По умолчанию сервер MySQL настроен таким образом, что к нему разрешены подключения только с локальной машины, следовательно, подключиться из-вне (по интернет или локальной сети) не получится.
Убедиться в этом можно набрав на сервере команду:
sudo netstat -tlp
В результате получите что-то типа этого:
Активные соединения с интернетом (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 localhost:mysql *:* LISTEN 634/mysqld tcp 0 0 *:http *:* LISTEN 987/nginx -g daemon tcp 0 0 *:ssh *:* LISTEN 375/sshd tcp6 0 0 [::]:http [::]:* LISTEN 987/nginx -g daemon tcp6 0 0 [::]:ssh [::]:* LISTEN 375/sshd
Отсюда видно, что mysql слушает только интерфейс localhost (127.0.0.1). Это не всегда удобно, особенно когда есть необходимость выделить под сервер mysql отдельный сервер. А в рамках корпоративной локальной сети такое бывает очень часто.
Чтобы разрешить серверу MySQL принимать запросы из-вне необходимо предпринять несколько несложных шагов:
- Поменять одну строчку в конфигурационном файле MySQL;
- Создать сетевого пользователя с необходимыми правами.
Разрешаем MySQL слушать интерфейс, который смотрит во внешнюю сеть
Открываем конфигурационный файл любимы редактором, например nano, из под привилегированного пользователя:
sudo nano /etc/mysql/my.cnf
Если у вас установлен сервер mariaDB, то конфигурационный файл находится в другом месте:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Находим строчки:
# Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 127.0.0.1
и меняем 127.0.0.1 на 0.0.0.0 — тогда сервер будет слушать все интерфейсы компьютера, либо задаем конкретный ip-адрес локального интерфейса, который смотрит в локальную сеть. Например — 192.168.122.10.
Получаем
# Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 0.0.0.0
Теперь остается только перезапустить сервис MySQL:
sudo service mysql restart
Теперь осталось только завести пользователя, которому разрешено обращаться к серверу MySQL извне.
Создание внешнего пользователя MySQL
Теперь нужной подключиться к MySql с паролем суперпользователя системы (системы!!! а не MySQL):
sudo mysql
После подключения к MySQL можно создать пользователя и дать привилегию, например:
mysql> GRANT ALL PRIVILEGES ON userdata.* TO 'user'@'%' IDENTIFIED BY 'password';
Здесь дается полный доступ к базе данных userdata пользователю с логином user и паролем password, подключающемуся с любого ip.
Можно ограничить права пользователя, разрешив ему подключаться к базе только с определенного ip. Для этого меняем % на конкретный ip-адрес, например 192.168.122.16
mysql> GRANT ALL PRIVILEGES ON userdata.* TO 'user'@'192.168.122.16' IDENTIFIED BY 'password';
А можно и разрешить пользователю всё — подключаться ко всем базам с любого ip-адреса
mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password';
Это делать не желательно, если конечно вы не заводите себя.