Як увімкнути функцію MySQL, яка записує кожне повідомлення запиту SQL, отримане від клієнтів, і час подання заяви запиту? Чи можу я це зробити в phpmyadmin або NaviCat? Як я аналізую журнал?
Як увімкнути функцію MySQL, яка записує кожне повідомлення запиту SQL, отримане від клієнтів, і час подання заяви запиту? Чи можу я це зробити в phpmyadmin або NaviCat? Як я аналізую журнал?
Відповіді:
По-перше, пам’ятайте, що цей лог-файл може зростати дуже багато на зайнятому сервері.
Для mysql <5.1.29:
Щоб включити журнал запитів, помістити це в /etc/my.cnf
в [mysqld]
розділі
log = /path/to/query.log #works for mysql < 5.1.29
Також ввімкнути це з консолі MySQL
SET general_log = 1;
Дивіться http://dev.mysql.com/doc/refman/5.1/en/query-log.html
Для mysql 5.1.29+
У програмі mysql 5.1.29++ ця log
опція застаріла. Щоб вказати файл журналу та увімкнути ведення журналу, використовуйте це в my.cnf у [mysqld]
розділі:
general_log_file = /path/to/query.log
general_log = 1
Крім того, щоб увімкнути ведення журналу з консолі MySQL (також потрібно якось вказати розташування файлу журналу або знайти розташування за замовчуванням):
SET global general_log = 1;
Також зауважте, що є додаткові опції для реєстрації лише повільних запитів або тих, які не використовують індекси.
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
Подивіться на цю відповідь на інше пов’язане питання. Він показує, як увімкнути, вимкнути та побачити журнали на живих серверах без перезавантаження.
Ось підсумок:
Якщо ви не хочете або не можете перезапустити сервер MySQL, ви можете продовжити так на своєму запущеному сервері:
Створіть таблиці журналів (див. Відповідь )
Увімкнути ведення журналу запитів у базі даних (зауважте, що рядок 'table' слід ставити буквально, а не замінювати жодним іменем таблиці. Дякую Ніколасу Пікерінгу )
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log;
SET global general_log = 0;
Цей метод я використовую для ведення журналу, коли хочу швидко оптимізувати різні завантаження сторінки. Це невелика порада ...
Вхід до таблиці
SET global general_log = 1;
SET global log_output = 'table';
Потім ви можете вибрати з моєї mysql.general_log
таблиці, щоб отримати останні запити.
Тоді я можу зробити щось подібне tail -f
на mysql.log, але з більшою доробкою ...
select * from mysql.general_log
where event_time > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> ""
and argument <> "SET NAMES 'UTF8'" and argument <> "SHOW STATUS"
and command_type = "Query" and argument <> "SET PROFILING=1"
Це дозволяє легко бачити мої запити, які я можу спробувати і скоротити. Я використовую 8-секундний інтервал для отримання запитів, виконаних протягом останніх 8 секунд.
Це вже було в коментарі, але заслуговує на власну відповідь: Без редагування файлів конфігурації: в mysql як root виконайте
SET global general_log_file='/tmp/mysql.log';
SET global log_output = 'file';
SET global general_log = on;
Не забудьте вимкнути його згодом:
SET global general_log = off;
/tmp/
, це може виявитися десь на зразок/tmp/systemd-private-...-mariadb.service-.../tmp/
Ви можете відключити або включити загальний журнал запитів (який записує всі запити) за допомогою
SET GLOBAL general_log = 1 # (or 0 to disable)
Я також хотів увімкнути файл журналу MySQL для перегляду запитів, і я вирішив це за допомогою наведених нижче інструкцій
/etc/mysql/mysql.conf.d
і ввімкніть наступні рядки
general_log_file = /var/log/mysql/mysql.log
general_log = 1
/etc/init.d/mysql restart
/var/log/mysql/
і перевірити журнали// To see global variable is enabled or not and location of query log
SHOW VARIABLES like 'general%';
// Set query log on
SET GLOBAL general_log = ON;
У Windows можна просто перейти
C:\wamp\bin\mysql\mysql5.1.53\my.ini
Вставте цей рядок у my.ini
general_log_file = c:/wamp/logs/mysql_query_log.log
Файл my.ini нарешті виглядає приблизно так
...
...
...
socket = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log = c:/wamp/logs/mysql_query_log.log #dump query logs in this file
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
...
...
...
...
У MySQL 5.6 версія є помилка. Навіть mysqld показують як:
Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
Реально налаштування читаються в наступному порядку:
Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
Перевірте файл: "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini"
Сподіваюся, це допоможе комусь.
для mysql> = 5,5 лише для повільних запитів (1 секунда і більше) my.cfg
[mysqld]
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes
Щоб увімкнути журнал запитів у MAC Machine:
Відкрийте такий файл:
vi /private/etc/my.cnf
Встановіть URL журналу запитів у розділі "mysqld" таким чином:
[mysqld]
general_log_file=/Users/kumanan/Documents/mysql_query.log
Мало хто не записує запит належним чином, тож у цьому випадку ви можете ввімкнути його з консолі MySQL
mysql> SET global general_log = 1;
Не зовсім відповідь на питання, тому що на питання вже є чудові відповіді. Це побічна інформація. Увімкнення General_log дійсно поставило зубчик для продуктивності MySQL. Я general_log =1
випадково залишився на виробничому сервері і витратив години, з'ясовуючи, чому продуктивність не порівнянна з аналогічною установкою на інших серверах. Потім я знайшов це, що пояснює вплив включення загального журналу. http://www.fromdual.com/general_query_log_vs_mysql_performance .
Суть історії, не вкладайте general_log=1
у .cnf
файл. Замість цього скористайтеся set global general_log =1
ненадовго, щоб просто увійти, щоб дізнатися, що ви намагаєтесь дізнатись, а потім вимкніть це.
У phpMyAdmin 4.0 ви переходите до стану> Монітор. Там ви можете увімкнути журнал повільних запитів і загальний журнал, побачити монітор, вибрати частину графіка, побачити відповідні запити та проаналізувати їх.
Мені довелося в один момент скинути і відтворити загальний журнал. Під час відпочинку набори персонажів зіпсувались, і я виявив помилку в журналах:
[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'
Тож якщо стандартна відповідь "перевірити, щоб переконатися, що реєстрація увімкнена" не працює для вас, переконайтеся, що для ваших полів встановлено правильний набір символів.