Во-первых, изначально mysql слушает только localhost. Нужно исправить это в конфигурационном файле my.cnf
(обычно в линуксах путь /etc/mysql/my.cnf). В my.cnf находим строку:1
bind-address = 127.0.0.1
И заменяем её на:1
bind-address = 0.0.0.0
Теперь после service mysql restart
мы можем коннектиться к mysql с любого ip (если создан пользователь). При этом для супер-пользователя root доступ из-вне под пустым паролем остаётся закрыт.
Во-вторых, нужно создать пользователя, под которым мы будем подключаться из-вне к mysql.
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)