Настроить удаленное подключение к MySQL с другой машины

Как настроить подключение к удаленному серверу MySQL? Пробуем подключиться (192.168.0.17 здесь и далее - удаленный MySQL сервер):

mysql -uUser -h192.168.0.17 -pYourPassword

Если это невозможно, появится ошибка:

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.0.17' (113)

Проверить запущен ли mysql

ps -ef | grep mysqld

Должно получиться что-то вроде этого:

root     29329     1  0 17:56 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql    29653 29329  0 17:56 ?        00:00:28 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306

/usr/sbin/mysqld

Для запуска демона mysql следует использовать один из вариантов:

service mysqld start
systemctl start mysqld.service

для добавления в авто-старт:

systemctl enable mysqld.service

Проверить порт mysql

Важно запустить программу с правами root:

sudo netstat -lnp | grep mysql

Должно быть:

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      4736/mysqld     
unix  2      [ ACC ]     STREAM     LISTENING     192127   4736/mysqld         /var/run/mysqld/mysqld.sock

netstat -lnp grep mysql

tcp должен слушать 0.0.0.0, если нет - см. далее

Порт 3306 - стандартный порт mysql, если же используется нестандартный, его следует использовать при подключении:

mysql dbname -uuser -ppasswd -P<port> ...

Настройка адресов подключения

Следует исправить строку конфига bind_address, чтобы разрешить для всех - закомментировать:

/etc/mysql/my.cnf
# bind_address=127.0.0.1

затем перезапустить сервер одним из вариантов:

service mysqld restart
systemctl restart mysqld.service

В более сложных случаях bind_address можно назначить:

  • bind_address=* или bind_address=:: - слушать все IPv4 и IPv6 TCP/IP интерфейсы
  • 0.0.0.0 - все IPv4
  • IP-адрес или название хоста - будет разрешено соединение только с него
  • IPv4 маска - как ограничение серверов

Мана по bind_address

Проверить файрвол

На стороне сервера mysql:

sudo service iptables status

На стороне сервера приложений, с которого необходимо подключиться к mysql:

nmap -p 3306 192.168.0.17

Должно быть:

3306/tcp open  mysql

Источник