Я установил стандартную установку mysql 5.5, и хотя я могу подключиться к службе mysql с помощью команды mysql, и служба, похоже, работает, я не могу подключиться к ней через spring + tomcat или через внешний разъем jdbc.
Я использую следующий URL:
jdbc:mysql://myserver.com:myport/mydb
с правильным именем пользователя / паролем, но я получаю следующее сообщение:
server.com: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. the driver has not received any packets from the server.
и кот бросает:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
Кажется, это та же проблема, что и при попытке подключиться извне.
Ответы:
Это может произойти по разным причинам. Я сам видел это несколько недель назад, но не могу вспомнить, что для меня было исправлением.
1) Убедитесь, что адрес, к которому привязан mysql, вероятно, 127.0.0.1 (только), который, по моему мнению, является значением по умолчанию (по крайней мере, на стандартном сервере Ubuntu). Вам нужно закомментировать параметр bind-address в my.cnf, чтобы связать все доступные адреса (вы не можете выбрать несколько, это один или все).
2) Если он привязан к 127.0.0.1 и вы не можете подключиться с помощью «localhost», убедитесь, что он не разрешается по адресу localhost IPv6 вместо IPv4. (или просто используйте IP-адрес)
3) Дважды и трижды проверьте порт, который прослушивает mysql.
4) Убедитесь, что вы используете правильный разъем JDBC для вашего JDK.
5) Убедитесь, что вы не делаете что-то действительно глупое, как запуск mysql с --skip-network.
Я думаю, что мое первое предложение имеет наибольшее обещание ... на самом деле, я думаю, что именно там я видел это недавно ... Я пытался подключиться к mysql удаленно (также в Ubuntu 8.04).
источник
У меня была такая же проблема в двух моих программах. Моя ошибка была в следующем:
Я трачу несколько дней, чтобы решить эту проблему. Я проверил много подходов, которые были упомянуты на разных веб-сайтах, но ни один из них не сработал. Наконец, я изменил свой код и выяснил, в чем проблема. Я постараюсь рассказать вам о различных подходах и суммировать их здесь .
Пока я искал в Интернете решение этой ошибки, я понял, что существует множество решений, которые сработали хотя бы для одного человека, но другие говорят, что это не работает для них! почему существует много подходов к этой ошибке? Кажется, эта ошибка может возникнуть, как правило, когда есть проблема с подключением к серверу . Возможно, проблема в неправильной строке запроса или слишком большом количестве подключений к базе данных.
Поэтому я предлагаю вам попробовать все решения одно за другим и не сдаваться!
Вот решения, которые я нашел в Интернете, и для каждого из них, по крайней мере, есть человек, для которого его проблема была решена с помощью этого решения.
точка: для решений, которые вам нужно изменить настройки MySQL, вы можете сослаться на следующее нет:
Linux: /etc/my.cnf
Windows: D: \ Program Files \ mysql \ bin \ my.ini
Вот решения:
Раскомментируйте атрибут «bind-address» или измените его на один из следующих Ips:
связывать-адрес = "127.0.0.1"
или
связывать-адрес = "0.0.0.0"
Если в вашем конфигурационном файле MySQL есть строка «skip-network», добавьте комментарий, добавив знак «#» в начале этой строки.
Добавьте эти строки в файл конфигурации MySQL:
wait_timeout = число
interactive_timeout = число
connect_timeout = число
Убедитесь, что Firewall или антивирусные программные продукты не блокируют службу MySQL.
Проверьте строку запроса. Ваша строка подключения должна выглядеть примерно так:
Убедитесь, что в вашей строке нет пробелов. Вся строка подключения должна быть продолжена без пробелов.
Попробуйте заменить "localhost" на ваш порт, например, 127.0.0.1. Также попробуйте добавить номер порта в строку подключения, например:
Обычно порт по умолчанию для MySQL - 3306.
Не забудьте изменить имя пользователя и пароль на имя пользователя и пароль вашего сервера MySQL.
« max_allowed_packet » - это переменная в конфигурационном файле MySQL, которая указывает максимальный размер пакета, а не максимальное количество пакетов. Так что это не поможет решить эту ошибку.
изменить TOMCAT6_SECURITY = да на TOMCAT6_SECURITY = нет
используйте validationQuery = "select now ()", чтобы убедиться, что на каждый запрос есть ответы
Добавьте этот код в строку подключения:
Хотя ни одно из этих решений не помогло мне, я предлагаю вам попробовать их. Потому что некоторые люди решили свою проблему, выполнив следующие действия.
Но что решило мою проблему? Моя проблема была в том, что у меня было много SELECTs в базе данных. Каждый раз, когда я создал соединение, а затем закрыл его. Хотя я закрывал соединение каждый раз, но система столкнулась со многими соединениями и выдала мне эту ошибку. Что я сделал, так это то, что я определил свою переменную соединения как общедоступную (или приватную) переменную для всего класса и инициализировал ее в конструкторе. Затем каждый раз, когда я просто использовал это соединение. Это решило мою проблему, а также значительно увеличило мою скорость.
Вывод
Нет простого и уникального способа решения этой проблемы. Я предлагаю вам подумать о собственной ситуации и выбрать вышеуказанные решения. Если вы берете эту ошибку в начале программы и вообще не можете подключиться к базе данных, у вас может быть проблема в строке подключения. Но если вы возьмете эту ошибку после нескольких успешных взаимодействий с базой данных, проблема может заключаться в количестве соединений, и вы можете подумать об изменении «wait_timeout» и других настроек MySQL или переписать свой код так, чтобы это уменьшило количество соединений.
источник
Если вы используете установку Linux, у вас, вероятно, есть блокировка входящих сообщений lokkit, кроме как через SSH.
Войдите в систему как пользователь root и запустите команду lokkit из командной строки, отключите брандмауэр и SElinux и посмотрите, есть ли у вас такая же проблема.
Также проверьте, правильно ли установлены ваши разрешения, чтобы все могли писать в правильные места.
источник
В версии 5.1.9 есть также ошибка в драйвере mysql-jdbc:
http://bugs.mysql.com/bug.php?id=47494
источник
Это также может быть вызвано неправильными настройками прокси . У меня была эта проблема при попытке подключиться через jdbc к экземпляру MySQL, работающему в виртуальном устройстве Parallels на моем Mac. Соединение jdbc использует сетевые настройки системного уровня, и, поскольку я был за прокси-сервером SOCKS, мне пришлось установить хост MySql в качестве хоста без прокси-сервера (например, на Mac вы можете настроить это в «Настройки-> Сеть-> Дополнительно-»). > Прокси и, наконец, добавьте имя хоста или IP-адрес в «Параметры обхода прокси для этих хостов и доменов»).
источник
MySQL Connector / J поддерживает только TCP / IP. Java не поддерживает подключение к сокетам домена Unix.
Если MYSQL запускается с флагом пропуска сети или MySQL работает за брандмауэром, то опция TCP / IP отключена. Так что Java не может общаться с MySQL.
источник
У меня была очень похожая проблема в течение почти дня, и это сводило меня с ума! но мне удалось найти решение, и это было очень, очень просто, вам просто нужно /etc/init.d/tomcat6 изменить TOMCAT6_SECURITY = yes на TOMCAT6_SECURITY = no. это не мое решение, я нашел его здесь , как вы можете видеть, я использую Ubuntu, надеюсь, это работает.
источник
У меня такая же проблема. Изменено свойство "bind-address" в файле /etc/mysql/my.cnf на 0.0.0.0, и оно работает. Соответствующая строка в my.cnf выглядит так:
bind-адрес = 0.0.0.0
До этого был задан внешний IP-адрес сервера, поэтому он выглядел примерно так:
bind-address = 196.152.4.145
Я думаю, что когда он установлен на внешний IP-адрес, а не на цикл localhost, сервер mysql просто подключается к сетевой карте и не прослушивает соединения из локальной петли.
источник
попробуйте свой локальный адрес, чтобы связать адрес в файле my.cnf
Соединение con = null;
источник