Для доступа к MySQL из-вне должно быть выполнено 2 условия:
- MySQL должен слушать все адреса, а не только 127.0.0.1
- У пользователя должны быть пермишены для коннекта не только с localhost (с самого сервера где установлена БД), а и других адресов.
Слушать все адреса
Во-первых, изначально mysql слушает только localhost. Нужно исправить это в конфигурационном файле my.cnf
(обычно в линуксах путь /etc/mysql/my.cnf). В my.cnf находим строку:
bind-address = 127.0.0.1
И заменяем её на:
bind-address = 0.0.0.0
Теперь после service mysql restart
мы можем коннектиться к mysql с любого ip (если создан пользователь). При этом для супер-пользователя root доступ из-вне под пустым паролем остаётся закрыт.
bind-address 127.0.0.1
означает, что mysql слушает соединения только с текущего хоста.
Создание пользователя для коннекта к базе данных из-вне
Во-вторых, нужно создать пользователя, под которым мы будем подключаться из-вне к mysql. У пользователя должны быть пермишены для подключения не только по localhost, но и иных адресов.
CREATE USER 'username'@'%' IDENTIFIED BY 'password'; #создаём пользователя username с паролем password GRANT ALL PRIVILEGES ON database.* TO 'username'@'%'; #даём пользователю username все права для работы с базой данных database FLUSH PRIVILEGES; # применяем новые права (чтобы не делать restart)
В команде CREATE USER мы создали пользователя, который может коннектиться к mysql со всех ip. Мы можем разрешать коннектиться только с определённых ip, например:
#создаём пользователя user с паролем pass, который может подключаться только с ip '10.10.50.50 CREATE USER 'user'@'10.10.50.50' IDENTIFIED BY 'pass';
Если разрешаете внешние подключения к базе данных, то нужно давать сложные пароли пользователям mysql.
В случае проблем с внешними подключениями, проверить не блокирует ли брандмауэр или фаервол MySQL-порт 3306 или другой, если используете не стандартный порт.
Узнать порт mysql:
mysql> show variables like 'port'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | port | 3306 | +---------------+-------+ 1 row in set (0,05 sec)
После изменения bind-address в MySQL и создания пользователя с пермишенами (либо грант пермишенов текущим пользователям), к базе данных можно подключиться передавая параметр -h
<host>. Хост — адрес машины, на которой установлен MySQL:
mysql -u -root -p -h <ip адрес>
Комментарии 4
>CREATE USER 'username'@'host' IDENTIFIED BY 'password';
Кавычки не обязательны в случае простых имён и паролей. Но если, например, в username присутствуют тире, то кавычки обязательны.
mysql -u -root -p -h db-host-example.com
Хост — фактически адрес сервера, на котором установлен MySQL.