среда, 24 февраля 2010 г.

как быстро отучить mysql от socket'a и научить работать с localhost по tcp

Как правило нужно это для выноса 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 :)

1 комментарий:

  1. >> Все, теперь можем работать с удаленной базой как с локальной, даже авторизация не побьется, т.к. сервер на удаленной стороне будет авторизовать вас как 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 локальный адрес

    ОтветитьУдалить