Комментарии 31
Потеря производительности Вас не беспокоит?
-6
Спасибо. Не знал о таком инструменте, извращался по другому.
0
Стоит упомянуть, что MySQL из коробки умеет логировать запросы
+12
Преимущество в том, что нам не нужно лезть в конфиги, к тому-же прицепиться мы можем сразу к нескольким серверам. (--proxy-backend-addresses=localhost:3306 --proxy-backend-addresses=localhost:3307 --proxy-backend-addresses=localhost:xxx)
Все в одной коробке.
Все в одной коробке.
+2
Почему же сразу в конфиг, это делаеть можно и нужно на боевом прямо с клиента:
устанавливаем куда писать лог
включаем лог
а через пару минут выключаем
Просто на боевом сервере за 10 минут он может нагнать файл размером в 100М и т.д.
устанавливаем куда писать лог
set global general_log_file='/tmp/mysql_query.log';
включаем лог
set global general_log = 1;
а через пару минут выключаем
set global general_log = 0;
Просто на боевом сервере за 10 минут он может нагнать файл размером в 100М и т.д.
+2
Так Proxy же не только логировать их умеет. Lua — полноценный язык, можно делать с запросами что хочешь.
0
Скромно напомню о бинари логах…
0
Думаю есть решение по проще — включить логирование на стороне MYSQL (http://dev.mysql.com/doc/refman/5.5/en/query-log.html)
и TIle -F Вам в помощь
и TIle -F Вам в помощь
+5
а что в бинари логи стали писать селекты?
+4
А я так понимаю что это работает только при использовании mysql/mysqli? А как же PDO?
0
Это работает между клиентом и сервером. Т.е. неважно что там на клиенте — mysql, mysqli или PDO.
+1
Вы в этом уверены или предполагаете? Настроки
mysql.default_port и mysqli.default_port не просто так, а такой настройки для pdo — нет.
Я просто уже успел проверить, WP видимо юзает mysql, т.к. стал отображаться только после установки mysql.default_port = 4040, остальные мои скрипты, которые работают через PDO — ничего не показывают :(
mysql.default_port и mysqli.default_port не просто так, а такой настройки для pdo — нет.
Я просто уже успел проверить, WP видимо юзает mysql, т.к. стал отображаться только после установки mysql.default_port = 4040, остальные мои скрипты, которые работают через PDO — ничего не показывают :(
-2
Я в этом уверен.
mysql.default_port это лишь номер порта по умолчанию, когда в параметре $server функции mysql_connect передается только имя хоста.
При создании экземпляра PDO можно также указать порт сервера в параметре $dsn.
Вообще это все немного разные уровни. Можно сказать, что mysql-proxy работает на более низком уровне. В конечном итоге что делают libmysql, mysqlnd и встроенный драйвер PDO? Устанавливают tcp-соединение с указанным сервером: портом, обмениваются данными через это соединение, соблюдая определенный протокол. В случае использования mysql-proxy они коннектятся к нему, передают теже самые данные, ничего не зная про прокси, они уверены, что общаются с сервером. mysql-proxy в свою очередь знает этот протокол и позволяет отобразить передаваемые данные, передает их серверу, возвращает клиентам ответы сервера.
mysql.default_port это лишь номер порта по умолчанию, когда в параметре $server функции mysql_connect передается только имя хоста.
При создании экземпляра PDO можно также указать порт сервера в параметре $dsn.
Вообще это все немного разные уровни. Можно сказать, что mysql-proxy работает на более низком уровне. В конечном итоге что делают libmysql, mysqlnd и встроенный драйвер PDO? Устанавливают tcp-соединение с указанным сервером: портом, обмениваются данными через это соединение, соблюдая определенный протокол. В случае использования mysql-proxy они коннектятся к нему, передают теже самые данные, ничего не зная про прокси, они уверены, что общаются с сервером. mysql-proxy в свою очередь знает этот протокол и позволяет отобразить передаваемые данные, передает их серверу, возвращает клиентам ответы сервера.
+1
Вы правы, у 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) Размещаем на 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
Попробовал 1 и 2 варианты — результат нулевой, к сожалению. Уж очень сильно хочется проверить своё приложение :(
0
Это просто автор привел привер. Сам прокси работает на стороне сервера как прокси — если вы у себя в подключении в PDO поменяете порт, все заработает
0
промазал
0
То что нужно. Если lua поддерживает регулярные выражения то можно более гибко выполнять логирование.
0
slow_query_log
slow_query_log_file=/var/log/mysql/slow_mysql.log
long_query_time=0
будет писать все запросы
потом можно легко проанализировать с помощью pt-query-digest
slow_query_log_file=/var/log/mysql/slow_mysql.log
long_query_time=0
будет писать все запросы
потом можно легко проанализировать с помощью pt-query-digest
0
оригинальное использование mysql-proxy
зачет
зачет
0
Ай да Иван Ай да мужик.. Я как раз занимаюсь рефакторингом одной системы. Думал чтобы было бы круто увидеть что да как не лазив в исходники PHP…
+1
Если кто-то зарегистрирован на форуме open-server.ru, предложите в пожеланиях добавить эту утилиту. Не могу создать акк, за… достала каптча, Максим Архипов наверное на ней зарабатывает.
UPD: Хотя выше дали ссылку как «включить логирование на стороне MYSQL»…
UPD: Хотя выше дали ссылку как «включить логирование на стороне MYSQL»…
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
MySQL On air. Мониторим SQL запросы