Как я могу отслеживать все запросы на моем сервере MySQL?
Я пытаюсь подсчитать все запросы SELECTS, UPDATES, INSERT на моем сервере MySQL. Основная идея заключается в том, чтобы в конце дня сказать: "у нас сегодня было x запросов, то есть x1 выборок, x2 вставок и т. Д.".
Как мне это сделать?
Спасибо!!
5 ответов
Текущие версии MySQL поддерживают два разных типа журналов запросов:
Во-первых, общий журнал запросов отслеживает все операторы, выполняемые на сервере MySQL, включая SELECT. Но это медленно, неэффективно и может легко убить производительность производственной базы данных, поэтому будьте осторожны с этим.
В зависимости от того, какую версию MySQL вы используете, вы должны использовать опцию '--log' или опции '--general-log' и '--general_log_file' вместе, чтобы включить общий журнал запросов и контролировать где он пишет в. В документах есть больше деталей:
- http://dev.mysql.com/doc/refman/5.1/en/query-log.html
- http://dev.mysql.com/doc/refman/5.1/en/log-tables.html
В случае, если общее время выполнения общего журнала запросов слишком велико, вы можете подумать, может ли двоичный журнал (binlog) удовлетворить ваши потребности. Бинлог отслеживает любые операторы, которые могут обновлять данные или схему, но не операторы только для чтения, такие как SELECT. Но binlog действительно быстрый и эффективный на диске, и его также можно использовать для репликации, резервного копирования / восстановления и т. Д.
Базовая опция для включения binlog -'log-bin', и есть несколько других связанных опций, которые точно контролируют, как он работает. Утилита "mysqlbinlog" (часть установки основного сервера MySQL) может анализировать двоичный формат binlog обратно в операторы SQL, которые можно направить в любой сценарий или программу, которые вы используете для суммирования запросов (например, mysqlbinlog <BIN_LOG_FILENAME> | <YOUR_SCRIPT_NAME>
, См. Соответствующие страницы документа для получения дополнительной информации:
- (документы binlog) http://dev.mysql.com/doc/refman/5.0/en/binary-log.html
- (утилита перевода mysqlbinlog docs) http://dev.mysql.com/doc/refman/5.0/en/mysqlbinlog.html
MySQL уже поддерживает внутренние счетчики:
mysqladmin ext | grep -e 'Com_\(update\|select\|insert\)'
нет необходимости в файлах журналов / таблиц /tcpdumping/maatkit.
Логи все в порядке, но ответы, упомянутые Иросой и Райаном, великолепны, но вы можете сделать это полностью пассивно - без включения регистрации. взгляните на mk-query-digest из maatkit. он может анализировать не только журналы MySQL, но и трафик, захваченный с помощью tcpdump. и "бесплатно", это даст вам хорошую разбивку типов запросов / времени выполнения и т. д.
Помимо двух упомянутых решений (журнал запросов MySQL и mk-query-digest
) вы можете взглянуть на MySQL Proxy, который можно использовать для регистрации запросов, отправленных на ваш mysqld
,
Отредактируйте my.cnf и добавьте
войти =/ путь / к / все / архив /you.want
и перезапустите MySQL.
Вы найдете все запросы, зарегистрированные в указанном вами файле.