Постоянная ссылка: 2014-11-08 00:10:00+03:00 , автор Евгений Лопатин в Блог тэги: mysql-proxy php pdo ubuntu

Столкнулся со следующей ситуацией:

  • два сервера MySQL, между ними master-slave рекликация
  • "перед" ними стоит mysql-proxy, настроенный соответственно - пусть R/O-запросы на slave, и R/W на master

Если я пытаюсь подключиться стандартным клиентом mysql к порту proxy - всё нормально, и работает как ожидалось.

Если соединение инициализируется PHP-приложением через стандартный PDO:

`$db = new PDO('mysql:host=$PROXY_HOST;dbname=$DB_NAME;port=$PROXY_PORT', $user, $pass);`

то выдаётся "сбой подключения".

Перевёрнуто и вытряхнуто наизнанку было всё, начиная от логина и пароля к базе и заканчивая LUA-скриптом - помощником mysql-proxy, который осуществляет распределение зарпосов по их типу между бэкендами. Что характерно - в интернете аналогичные проблемы описывали во множестве мест, но ни одного приемлемого решения найдено не было, и в логах самого mysql-proxy абсолютная тишина, даже с включенным debug.

Итог грустный и неочевидный - версия mysql-proxy, идущая в комплекте Ubuntu 14.04 Trusty Tahr (0.8.1) каким-то диким образом несовместима с подключениями через PDO. Замена mysql-proxy на последнюю версию с оффсайта (на момент написания это 0.8.5) решила проблему на корню.

В очередной раз убеждаюсь, что у дистрибутивов с rolling-release есть некоторые преимущества перед дистрибутивами с жесткой заморозкой версий...