Как правило нужно это для выноса mysql на отдельный сервер сохраняя при этом localhost в настройках соединения к базам.
Как известно mysql если видит что обращение идет к localhost'у то соединяется с сервером через локальный socket . И никакие настройки отучить его от этого не могут, т.к. это прошито в коде.
Отучить его от этого можно 2-мя способами.
1. Пересобрать mysql заменив
в файле include/mysql_com.h
#define LOCAL_HOST "localhost"
на что-нибудь типа
#define LOCAL_HOST "l0calhost"
После этого mysql не будет воспринимать localhost как нечто особенное, и будет работать с ним по tcp как с обычным хостом.
2. Второй способ - это бинарный патч клиентских библиотек.
Это очень быстро и безболезненно.
Ставим hexedit
hexedit /usr/lib64/mysql/libmysqlclient.so.15.0.0
жмем tab
ищем строку localhost
меняем одну букву и получаем например l0calhost
сохраняем и выходим Ctrl-X
Тоже самое делаем с /usr/lib64/mysql/libmysqlclient_r.so.15.0.0
Меняем IP в /etc/hosts для localhost на наш новый mysql сервер.
Все, теперь можем работать с удаленной базой как с локальной, даже авторизация не побьется, т.к. сервер на удаленной стороне будет авторизовать вас как localhost :)
Подписаться на:
Комментарии к сообщению (Atom)
>> Все, теперь можем работать с удаленной базой как с локальной, даже авторизация не побьется, т.к. сервер на удаленной стороне будет авторизовать вас как localhost :)
ОтветитьУдалитьА вот это не правда!
Делаю тунель
ssh -Nf -L 3306:REMOTE_IP:3306 user@localhost
mysql -u user -p
Если у юзера принимать коннекты только с локалхоста, то:
Access denied for user 'user'@'77.50.219.22' (using password: YES)
77.50.219.22 локальный адрес