Как стать автором
Обновить

Комментарии 31

Потеря производительности Вас не беспокоит?
Производительность на локалхосте не беспокоит. Это лишь способ разобраться какие запросы присутствуют в том или ином контексте.
а) разбираешься как работает незнакомая система обычно не на боевом сервере
б) если нужно найти где она теряется на боевом, то оно того стоит
Спасибо. Не знал о таком инструменте, извращался по другому.
Преимущество в том, что нам не нужно лезть в конфиги, к тому-же прицепиться мы можем сразу к нескольким серверам. (--proxy-backend-addresses=localhost:3306 --proxy-backend-addresses=localhost:3307 --proxy-backend-addresses=localhost:xxx)
Все в одной коробке.
Почему же сразу в конфиг, это делаеть можно и нужно на боевом прямо с клиента:

устанавливаем куда писать лог
set global general_log_file='/tmp/mysql_query.log';


включаем лог
set global general_log = 1;


а через пару минут выключаем
set global general_log = 0;


Просто на боевом сервере за 10 минут он может нагнать файл размером в 100М и т.д.
Так Proxy же не только логировать их умеет. Lua — полноценный язык, можно делать с запросами что хочешь.
Скромно напомню о бинари логах…
:) Бинарные логи это сильно особено когда они row based или mixed.
Кстати не подскажете как лучше всего прочитать row based записть в логе?
Думаю есть решение по проще — включить логирование на стороне MYSQL (http://dev.mysql.com/doc/refman/5.5/en/query-log.html)

и TIle -F Вам в помощь
НЛО прилетело и опубликовало эту надпись здесь
На локалхосте?
НЛО прилетело и опубликовало эту надпись здесь
а что в бинари логи стали писать селекты?
А я так понимаю что это работает только при использовании mysql/mysqli? А как же PDO?
Это работает между клиентом и сервером. Т.е. неважно что там на клиенте — mysql, mysqli или PDO.
Вы в этом уверены или предполагаете? Настроки
mysql.default_port и mysqli.default_port не просто так, а такой настройки для pdo — нет.
Я просто уже успел проверить, WP видимо юзает mysql, т.к. стал отображаться только после установки mysql.default_port = 4040, остальные мои скрипты, которые работают через PDO — ничего не показывают :(
Я в этом уверен.
mysql.default_port это лишь номер порта по умолчанию, когда в параметре $server функции mysql_connect передается только имя хоста.
При создании экземпляра PDO можно также указать порт сервера в параметре $dsn.
Вообще это все немного разные уровни. Можно сказать, что mysql-proxy работает на более низком уровне. В конечном итоге что делают libmysql, mysqlnd и встроенный драйвер PDO? Устанавливают tcp-соединение с указанным сервером: портом, обмениваются данными через это соединение, соблюдая определенный протокол. В случае использования mysql-proxy они коннектятся к нему, передают теже самые данные, ничего не зная про прокси, они уверены, что общаются с сервером. mysql-proxy в свою очередь знает этот протокол и позволяет отобразить передаваемые данные, передает их серверу, возвращает клиентам ответы сервера.
Вы правы, у PDO своя политика. Отсюда 3 решения.
1) Размещаем на 3306 порту сам mysql-proxy (--proxy-address=3306 в параметрах запуска), сам MySQL вешаем на альтернативный порт, например 3307 и настраиваем proxy на адрес --proxy-backend-addresses=host:3307
2) При подключении PDO явно указываем порт $db = new PDO('dblib:host=your_hostname:4040;dbname=your_db;charset=UTF-8', $user, $pass);
3) Для мейнстрима: перенаправлять запросы с помощью чего-нибудь вроде iptables на 4040 порт
Попробовал 1 и 2 варианты — результат нулевой, к сожалению. Уж очень сильно хочется проверить своё приложение :(
В PDO есть то ли фича, то ли баг, что если в адресе сервера указан localhost, то соединение идет через unix socket, а не TCP. Лечится заменой localhost на 127.0.0.1
О, вот это ценное замечание, вчера уже видел что оно не умеет через unix socket, попробую, спасибо!
Это просто автор привел привер. Сам прокси работает на стороне сервера как прокси — если вы у себя в подключении в PDO поменяете порт, все заработает
То что нужно. Если lua поддерживает регулярные выражения то можно более гибко выполнять логирование.
slow_query_log
slow_query_log_file=/var/log/mysql/slow_mysql.log
long_query_time=0
будет писать все запросы
потом можно легко проанализировать с помощью pt-query-digest
А тут мы можем фильтровать, что писать, а что нет. Да и вообще извращаться над тем, что писать как угодно.
оригинальное использование mysql-proxy
зачет
Ай да Иван Ай да мужик.. Я как раз занимаюсь рефакторингом одной системы. Думал чтобы было бы круто увидеть что да как не лазив в исходники PHP…
Если кто-то зарегистрирован на форуме open-server.ru, предложите в пожеланиях добавить эту утилиту. Не могу создать акк, за… достала каптча, Максим Архипов наверное на ней зарабатывает.

UPD: Хотя выше дали ссылку как «включить логирование на стороне MYSQL»…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации