Использование опций конфигурации log-slow-queries и general_log, позволяющих вести полный лог
медленных или всех запросов, требует перезапуска mysql для включения или выключения ведения логов,
что неудобно в ситуации, когда нужно проанализировать запросы только в текущий момент.
Для анализа запросов (не через локальный сокет) на лету можно воспользоваться сетевым сниффером.Перехватываем и записываем срез трафика MySQL в файл:
tcpdump -i eth0 port 3306 -s 1500 -w tcpdump.out
Выделяем из дампа SQL запросы, используя утилиту tshark из комплекта сниффера Wireshark (http://www.wireshark.org/):
tshark -r tcpdump.out -d tcp.port==3306,mysql -T fields -e mysql.query > query_log.out
Удаляем из полученного лога пустые и неинформативные строки:
cat query_log.out | grep -vE "^(commit.*|autocommit.*|rollback.*|)$" | awk '{print $0 ";"}' > query_log_no_blank.out
Полученный лог удобно анализировать утилитой mysqlsla (http://hackmysql.com/mysqlsla)
URL: http://www.bigdbahead.com/?p=99
Обсуждается: https://www.opennet.ru/tips/info/1921.shtml
Кто подскажет, чем можно помочь в случае соединения к mysql через unix сокет (.../mysql.sock) ?
включить и смотреть "binary log"
Он только для запросов изменяющих данные.
А зачем на лыжах и в гамаке?tcpdump -n -i $if -s 0 -w - port 3306 and dst $ip | strings
Зато они прорекламировали два снифера и одну утилиту :)
А-а-а-а, ну, тоже дело.Кстати, очень понравилось удаление "неинформативных" commit и rollback, с оставлением begin :-)
э-э-э... ключик "-v" у грепа -- енто ж с точностью до наоборот, как раз коммиты и роллбэки БУДУТ присутствовать в логе, в отличие от бегинов. ;-)
а чем плохо "log = /var/log/MySQL.log"? как описано тут http://michurin.com.ru/mysql-log.shtml
>а чем плохо "log = /var/log/MySQL.log"?Не подходит для включения лога на время, так как требует перезапуска mysqld, а постоянно держать - лишняя нагрузка, при сотне запросов в секунду лог растет как на дрожжах.