При масштабировании Drupal (и не только :) ) сайтов, при настройках репликации mysql требуется настроить в mysql возможность подключения с удаленного сервера. В этой статье речь пойдет о настройке безопасного удаленного подключения к серверу mysql на примере Linux debian.
Первым делом нужно проверить, какие интерфейсы слушает наш mysql. Это можно сделать командой:
netstat -nap | grep mysql
При правильной настройке (в плане безопасности) mysql должен быть такой вывод:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 31574/mysqld
Это означает, что mysql слушает только локальные соединения и игнорирует внешние подключения.
Разрешим внешние подключения. Для этого отредактируем /etc/mysql/my.cnf, закомментировав две строки:
#skip-networking #bind-address = 127.0.0.1
Проверим снова, какие интерфейсы слушает mysql:
root@test:# netstat -nap | grep mysql tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 31911/mysqld
Сейчас он должен слушать все интерфейсы.
Добавим пользователя, разрешенному удаленные подключения:
mysql@master> GRANT ALL PRIVILEGES ON db.* TO user@'xxx.xxx.xx.x' IDENTIFIED BY 'password';
ALL PRIVILEGES - указываем привилегии для данного пользоателя;
db.* — база данных, к которой пользователь будет иметь доступ;
user — имя пользователя;
xxx.xxx.xx.x — ip адрес, с которого будет производится подключение;
password — пароль пользователя.
Настройка iptables
Оставлять доступ открытым для подключения с любого ip небезопасно, поэтому настроим iptables для доступа только с конретного адреса. В iptables очередность правил играет роль, поэтому вначале разрешим запросы с определенного ip-адреса, а потом запретим для всех:
/sbin/iptables -A INPUT -i eth0 -s ХХХ.ХХХ.ХХ.Х -p tcp --destination-port 3306 -j ACCEPT, где ХХХ.ХХХ.ХХ.Х - ip-адрес, с которого мы планируем подключаться к mysql. /sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP
После этих манипуляций к нашему серверу можно удаленного подключить с указанного IP адреса и под добавленным пользователем mysql.