Я только что установил новый сервер ubuntu с mysql (percona 5.5), но он отказывается принимать соединения с удаленных хостов
Вот что произойдет, если я попытаюсь подключиться к этому серверу удаленно:
mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)
telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused
Когда я проверил, слушает ли mysql удаленные соединения, я увидел следующее:
sudo netstat -ntlup | grep mysql
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 127018/mysqld
Как видите, там сказано 127.0.0.1:3306
что означает «Я принимаю только местные соединения».
Я проверил свой skip_networking
и bind-address
переменные - все выключено:
mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| skip_networking | OFF |
+-----------------+-------+
1 row in set (0.00 sec)
mysql> show variables like '%bind%';
Empty set (0.00 sec)
У меня есть другой сервер с абсолютно то же самое config, и он отлично работает:
sudo netstat -ntlup | grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2431/mysqld
В чем может быть причина этого? Как заставить mysql отвечать на удаленные подключения?
Попробуй добавить bind-address = 0.0.0.0
на ваш [mysqld]
раздел вашего my.cnf
и перезапустить mysqld.
у меня есть mariadb
установлены. Решение состояло в том, чтобы изменить bind-address
расположен в /etc/mysql/mariadb.conf.d/50-server.cnf
Это могло быть из-за пользовательской таблицы базы данных mysql (используйте mysql; показать таблицы;). Если привязка к 0.0.0.0 не работает для вас, попробуйте дать вашему пользователю хост "%" вместо "localhost" в этой таблице.
Например, попробуйте создать такого пользователя, как:
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ yourusername @ '%' ИДЕНТИФИЦИРОВАНО 'yourpassword'
муравей пытается связаться с этим пользователем.
Когда все остальное терпит неудачу и вы уверены, что сервер прослушивает порт по умолчанию, и вы отчаянно пытаетесь подключиться к клиенту mysql с другого хоста, попробуйте указать порт в URL-адресе команды mysql.
Как это ни странно, мне пришлось использовать следующий синтаксис:
mysql -h someHost --port=3306 -u someUser -p someDb
Я нашел эту (ошибку?) Совершенно случайно (после выпадения волос :)).
Моя настройка: debian jessie, свежий mysql 5.7.18, пользователи / db созданы, адрес привязки закомментирован, mysqld перезапущен
У меня была эта проблема, и моя проблема, похоже, была связана с брандмауэром. Кстати - Спасибо @Temnovit за команды устранения неполадок Mysql.
Я использовал netstat, чтобы сказать, что сервер работает и использует правильный порт. Я также мог сказать, что мой сервер не принимает соединения на этом порту, с помощью простой команды telnet.
# On the remote machine
➜ ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜ ~
После еще одного полезного ответа на команды брандмауэра Fedora я смог открыть правильные порты.
# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
Моя команда telnet была успешно выполнена.
# On the remote machine
➜ ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.
telnet> Connection closed.
➜ ~
Если у вас все еще есть проблемы, скорее всего, это проблема с правами пользователя.
Решение, описанное в приведенной ниже ссылке, должно решить вашу проблему. http://www.debianhelp.co.uk/remotemysql.htm