Mysql логирование запросов windows

Для просмотра логов MySQL вам потребуется доступ к серверу, на котором запущен MySQL. В зависимости от конфигурации MySQL и операционной системы сервера, логи могут храниться в различных местах и доступ к ним может осуществляться разными способами. Ниже приведены общие рекомендации по просмотру логов MySQL.

Шаг 1: Определение местоположения лог-файлов

Сначала вам нужно узнать, где MySQL хранит свои логи. Эту информацию можно найти в конфигурационном файле MySQL, который обычно называется my.cnf или my.ini. Расположение этого файла зависит от операционной системы и конкретной установки MySQL. Часто встречающиеся пути:

  • /etc/mysql/my.cnf (Linux)
  • /etc/my.cnf (Linux)
  • C:\ProgramData\MySQL\MySQL Server X.X\my.ini (Windows, где X.X — версия MySQL)

В этом файле ищите директивы, связанные с логированием, такие как log_error, general_log_file, slow_query_log_file и т.д., чтобы определить, куда записываются логи.

Шаг 2: Просмотр логов

После того как вы определили местоположение лог-файлов, вы можете просмотреть их содержимое. Вот несколько видов логов, которые могут быть полезны:

  • Ошибка логов (log_error): хранит информацию об ошибках, возникших во время работы сервера MySQL.
  • Запрос логов (general_log_file): содержит каждый SQL-запрос к серверу, если включено логирование запросов.
  • Медленных запросов лог (slow_query_log_file): записывает запросы, выполнение которых занимает больше времени, чем значение, указанное в long_query_time.

Linux
На Linux вы можете просмотреть эти файлы с помощью команды cat, more, less и т.д. Например:

sudo less /var/log/mysql/error.log

Windows
На Windows вы можете открыть файлы лога с помощью любого текстового редактора, например, Notepad. Просто перейдите к расположению файла лога через проводник Windows и дважды кликните по файлу лога, чтобы открыть его.

Шаг 3: Использование команд MySQL для просмотра логов

Также MySQL предоставляет некоторые команды для просмотра логов непосредственно через клиент MySQL:

SHOW VARIABLES LIKE '%log%';

Эта команда покажет вам пути ко всем лог-файлам, определенным в конфигурации MySQL.

Для просмотра содержимого некоторых типов логов (например, лога двоичных файлов или лога ошибок) могут быть доступны специальные команды, в зависимости от версии MySQL.

Важно помнить, что доступ к логам и их анализ может потребовать определенных привилегий. Убедитесь, что у вас есть необходимые права доступа для просмотра этих файлов.

MySQL query logging is a powerful feature that allows administrators to track and log all queries executed on the MySQL server. This is particularly useful for debugging, monitoring, and optimizing database performance. In this article, we will guide you through the steps to enable query logging in MySQL, along with examples and best practices.

Types of MySQL Query Logs

MySQL supports several types of logs, but for the purpose of query logging, we focus on:

  1. General Query Log: Logs all SQL queries received by the server.
  2. Slow Query Log: Logs queries that take longer than a specified duration to execute.

Enabling MySQL General Query Log

Enabling the MySQL General Query Log is a useful way to keep track of the SQL statements executed on your MySQL server. This query log can be instrumental in troubleshooting, performance optimization, and security analysis.

Syntax:

To enable or disable the general query log dynamically using the ‘SET GLOBAL' command:

— Enable Query Log

SET global general_log = 1;

— Disable Query Log (optional)

SET global general_log = 0;

To enable MySQL query log follow the given steps:

Step 1. Edit MySQL Configuration

  • Open the MySQL server configuration file (my.cnf or my.ini).
  • Locate the [mysqld] section.
  • Add or modify the following directives:
[mysqld]
general_log = 1
general_log_file = /path/to/query_log.log
  • Save and close the configuration file.

2. Restart MySQL Server

Restart the MySQL server to apply the changes.

  • Example for Linux:
    sudo service mysql restart
  • Example for Windows:

Restart the MySQL service using the service management tools.

Example of Enabling MySQL General Query Log

Let’s look at some examples, where we will learn how to enable MySQL query log.

Enabling Query Log and Executing SQL Queries Example

-- Enable Query Log
SET global general_log = 1;

-- Execute SQL Queries
SELECT * FROM your_table;
UPDATE your_table SET column1 = value1 WHERE condition;
-- ... add more queries ...

-- Disable Query Log (optional)
SET global general_log = 0;

Expected Output in Log File:

2024-06-28T10:20:00.000000Z   2 Connect   root@localhost on
2024-06-28T10:20:00.000000Z 2 Query SELECT * FROM your_table
2024-06-28T10:20:01.000000Z 2 Query UPDATE your_table SET column1 = value1 WHERE condition
2024-06-28T10:20:02.000000Z 2 Quit

Explanation: Enabling the query log will capture the executed SQL queries in the log file. After enabling, executing various SQL queries like SELECT and UPDATE will be logged. Disabling the query log stops logging further queries.

Enabling Query Log with a Specific Log File Example

-- Enable Query Log with Specific File

SET global general_log = 1;
SET global general_log_file = '/path/to/query_log.log';

-- Execute SQL Queries
SELECT * FROM your_table;
INSERT INTO your_table (column1, column2) VALUES (value1, value2);
-- ... add more queries ...

-- Disable Query Log (optional)
SET global general_log = 0;

Expected Output Specified in Log File:

2024-06-28T10:25:00.000000Z   3 Connect   root@localhost on
2024-06-28T10:25:00.000000Z 3 Query SELECT * FROM your_table
2024-06-28T10:25:01.000000Z 3 Query INSERT INTO your_table (column1, column2) VALUES (value1, value2)
2024-06-28T10:25:02.000000Z 3 Quit

Explanation: In this example, the query log is not only enabled but also configured to write logs to a specific file. Executing SQL queries will be logged in the specified file. Disabling the query log stops further logging.

Enabling the Slow Query Log

The Slow Query Log helps identify queries that take longer than a specified duration to execute, which is useful for performance optimization.

Step 1: Edit MySQL Configuration

  1. Open the MySQL server configuration file (my.cnf or my.ini).
  2. Locate the [mysqld] section.
  3. Add or modify the following directives:
[mysqld]
slow_query_log = 1
slow_query_log_file = /path/to/slow_query_log.log
long_query_time = 2
  • slow_query_log = 1 enables the slow query log.
  • slow_query_log_file specifies the path to the slow query log file.
  • long_query_time sets the threshold for query execution time (in seconds).

Step 2: Restart MySQL Server

Restart the MySQL server to apply the changes.

  • Example for Linux:
sudo service mysql restart
  • Example for Windows:

Restart the MySQL service using the service management tools.

Example of Enabling Slow Query Log

-- Enable Slow Query Log
SET GLOBAL slow_query_log = 1;
SET GLOBAL slow_query_log_file = '/path/to/slow_query_log.log';
SET GLOBAL long_query_time = 2;

-- Execute SQL Queries
SELECT SLEEP(3); -- This will be logged as it exceeds the long_query_time

-- Disable Slow Query Log (optional)
SET GLOBAL slow_query_log = 0;

Expected Output in Slow Query Log File:

# Time: 2024-06-28T10:30:00.000000Z
# User@Host: root[root] @ localhost []
# Query_time: 3.000000 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1656405000;
SELECT SLEEP(3);

Explanation: Enabling the slow query log with a specific log file will capture any query that exceeds the long_query_time threshold. The SELECT SLEEP(3) query will be logged because it takes longer than 2 seconds.

Best Practices

  1. Log Rotation: Implement log rotation to manage log file sizes and prevent them from consuming too much disk space.
  2. Security: Ensure that log files are accessible only to authorized users to prevent sensitive information leakage.
  3. Monitoring: Regularly monitor and analyze the logs to identify performance bottlenecks and optimize queries.

Conclusion

Enabling the MySQL Query Log is an important practice for database administrators and developers. It provides a detailed record of executed queries, aiding in performance optimization, debugging, and auditing. By modifying the server configuration with the ‘general_log‘ and ‘slow_query_log‘ directives, users can easily enable or disable the query logs as needed. Utilizing the query logs effectively enhances the overall management and maintenance of MySQL databases, contributing to a more efficient and well-monitored database environment.

Логирование запросов

Логирование запросов помогает найти узкие места в работе СУБД MySQL и повысить ее производительность. Рассмотрены варианты включения как с перезагрузкой сервера, так и БЕЗ перезагрузки.

Логирование медленных запросов

Включение лога длительных запросов без перезагрузки MySQL-сервера производится из терминала mysql:

mysql>SET global slow_launch_time = 1;
SET global slow_query_log_file = '/tmp/mysql_time.log';
SET global slow_query_log = 1;
FLUSH LOGS;

Установленные параметры означают следующее:

  • slow_query_log = 1 включает или выключает лог медленных запросов (1-включить; 0-выключить)
  • slow_launch_time = 1 задает время (здесь, 1 секунда), при превышении которого запрос будет считаться медленным
  • slow_query_log_file = ... путь до файла, в который будут записываться все медленные запросы
  • FLUSH LOGS — очищает log-файл

Путь до файла логов должен указывать на директорию, в которую пользователь mysql имеет права на запись. В противном случае, при выполнении команды SET global general_log_file='...' будет появляться ошибка: Variable 'general_log_file' can't be set to the value of .... По умолчанию эти директории имеют имена: /var/log/mysql/ и /var/lib/mysql/. Имя файла может быть любым.

Просмотр медленных запросов в реальном времени можно осуществлять командой:

tail -f /var/log/mysql/query_slow.log

Через какое-то время, при накоплении запросов можно проанализировать файл при помощи утилиты mysqldumpslow. Она покажет какой запрос сколько раз встречается в log-файле:

mysqldumpslow /var/log/mysql/query_slow.log

Логирование можно отключить в любое время с помощью:

mysql>SET global slow_query_log = 0;

После перезагрузки MySQL-сервера установленный параметры примут значение по умолчанию и логирование прекратиться. Что бы включить постоянное логирование запросов, то необходимо добавить вышеуказанные параметры в файл конфигурации MySQL-сервера, в секцию [mysqld]:

my.cnf[mysqld]
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /tmp/mysql_time.log

Логирование всех запросов

В таблицу

Самым простым способом логирования всех запросов поступающих к БД MySQL это включения логирования в отдельную таблицу базы данных.

Проверим, существует ли таблица логов general_log:

mysql>USE mysql;
SHOW TABLES LIKE 'general_log';

Если не существует то создадим ее:

mysql>CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log';

Включаем ведение журнала запросов в базе данных без перезагрузки MySQL-сервера:

mysql>SET global log_output = 'table';
SET global general_log = 1;

Логирование можно отключить в любое время командой:

mysql>SET global general_log = 0;

Просмотр журнала логов:

mysql>SELECT event_time, command_type, argument  FROM mysql.general_log;

После перезагрузки MySQL-сервера установленный параметры примут значение по умолчанию и логирование прекратиться. Что бы включить постоянное логирование запросов, то необходимо добавить вышеуказанные параметры в файл конфигурации MySQL-сервера, в секцию mysqld:

my.cnf[mysqld]
general_log = on
global log_output = 'TABLE'

В файл

Для включения логирования запросов в файл без перезапуска базы данных, необходимо выполнить следующие команды в mysql-консоли:

mysql>SET global log_output = 'FILE';
SET global general_log_file='/tmp/mysql_access.log';
SET global general_log = 1;

Файл логов должен указывать на директорию, в которую учетная запись (от которой работает MySQL-сервер) имеет права на запись. В противном случае, при выполнении команды SET global general_log_file='...' будет появляться ошибка: Variable 'general_log_file' can't be set to the value of .... По умолчанию эти директории имеют имена: /var/log/mysql/ и «/var/lib/mysql/». Имя файла может быть любым.

В принципе, для хранения логов запросов можно указать любую директорию, но при этом необходимо дать соответствующие разрешения командой chmod.

Просмотр всех запросов, поступающих к БД в реальном времени можно осуществлять командой:

tail -f /tmp/mysql_access.log

Логирование можно отключить в любое время с помощью:

mysql>SET global general_log = 0;

Что бы включить логирование запросов на постоянной основе, необходимо добавить вышеуказанные параметры в файл конфигурации MySQL-сервера, в секцию [mysqld]:

my.cnf[mysqld]
general_log = on
log_output = 'FILE'
general_log_file = /tmp/mysql_access.log

Логирование Error Log

Если необходимо понять, по какой причине не запускается MySql сервер error log вам в помощь.

Посмотреть расположение файла по умолчанию куда пишется error log, можно выполнив команду:

mysql>SHOW GLOBAL VARIABLES;

Бинарное логирование

В этот лог записываются все команды изменения БД, нужен он для репликации и восстановления. Включать его не рекомендуется, если никакой репликации не планируется, так как он требователен к ресурсам.

Посмотреть расположение файла по умолчанию куда пишется бинарный log, можно выполнив команду:

mysql>SHOW GLOBAL VARIABLES;


Категория:
MySQL

Настройка логирования и отладка MySQL запросов.

Логирование MySQL запросов настраивается в 2 этапа:

  1. Включаем само логирование;
  2. Указываем куда логировать запросы.

Почему удобно включать логирование с помощью MySQL команд:

  1. Не нужно дергать файл конфига MySQL /etc/mysql/my.cnf;
  2. После рестарта сервера — лог выключается.

Посмотреть включено ли логирование:

SELECT @@GLOBAL.general_log
SHOW GLOBAL VARIABLES LIKE '%log%';
SHOW GLOBAL VARIABLES WHERE Variable_name in ('version', 'log', 'general_log', 'general_log_file', 'log_output');

Включить/выключить логирование (1 — включить, 0 — выключить):

SET GLOBAL general_log = 1;

Логировать запросы в таблицу mysql.general_log:

SET GLOBAL general_log = 1;
SET GLOBAL log_output = 'TABLE';

Посмотреть логи запросов в таблице:

SELECT * FROM mysql.general_log;

Логировать запросы в файл /var/log/mysql.log (этот тип логирования включён по умолчанию):

SET GLOBAL log_output = 'FILE';
SET GLOBAL general_log_file = '/var/log/mysql.log';
Примечание

Файл не нужно создавать предварительно, но нужно дать права на запись в этот каталог!

По умолчанию лог-файл запросов: /var/lib/mysql/%USERNAME%log.

Включаем логирование SQL запросов в файл:

SET GLOBAL log_output = 'FILE';
SET GLOBAL general_log_file='dev-sql.log';
Внимание!

Глобальная системная переменная general_log_file содержит имя файла, а не полный путь к нему. Этот файл будет создан в каталоге /var/lib/mysql/ и по умолчанию именуется как <hostname>.log.

Примечание

Для просмотра значения глобальной системной переменной general_log_file — выполните запрос:

SHOW VARIABLES LIKE 'general_log_file';

Можно включить логирование и в таблицу, и в файл:

SET GLOBAL log_output = 'TABLE,FILE';

Для отключения лога:

SET GLOBAL log_output = 'NONE';

Пример включения логирования из PHP-скрипта и просмотр логов:

mysql_query("SET GLOBAL log_output = 'FILE'");
mysql_query("SET GLOBAL general_log_file = '/home/stas/tmp/mysql.project.log'");
mysql_query("SET GLOBAL general_log = 1");

// здесь выполняем SQL запрос

mysql_query("SET GLOBAL general_log = 0");
mysql_query("SET GLOBAL log_output = 'TABLE'");

Включить постоянное логирование (требует рестарт сервера):

[mysqld]
log = /var/log/mysql/mysql.log

Подробнее о других системных переменных логирования: http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_log_output

#mysql query log

В MySQL на данный момент существуют 4 вида журнала (лога) и при достаточно серьёзной работе с базами на MySQL необходимо за ними следить. Например, бинарный лог у нас за сутки набирает около гигабайта, а размер жёсткого диска на сервере ограничен и за ними надо следить. Однако следить следует не только за бинарным логом, так как логи (журналы) в MySQL могут принести немалую пользу.

Итак, какие логи ведёт MySQL? Это:
1. бинарный лог (binary log)
2. лог ошибок (error log)
3. лог медленный запросов (slow query log)
4. лог запросов (general query log)
5. лог репликаций (relay log)

Каждый из них по-своему полезен.

Бинарный лог

В первую очередь полезен с точки зрения репликаций. Можно его бэкапить, можно использовать для восстановления данных на более точное время при использовании бэкапов. Лог содержит все команды изменений базы данных, выборки (select, show) не сохраняет, для таблиц, поддерживающих транзакции (BDB, InnoDB) запись в лог выполняется только после выполнения команды COMMIT. Для лога можно указывать список баз данных, которые надо логировать и список баз данных, которые не надо логировать. В более ранних версиях вместо бинарного лога использовался лог обновлений. Использование бинарного лога снижает производительность базы данных, однако его польза настолько велика, что крайне не рекомендуется его отключать. Рекомендуется защищать бинарный лог паролем, так как он может данные также о паролях пользователей. При достижении максимально разрешённого размера (1 гиг по умолчанию) создаётся следующий файл. Каждый новый файл имеет порядковый номер после имени.

Содержание бинарного лога можно посмотреть с помощью утилиты mysqlbinlog.

Основные настройки в my.cnf

Местоположение лога:
log_bin = /var/log/mysql/mysql-bin.log

Максимальный размер, минимум 4096 байт, по умолчанию 1073741824 байт (1 гигабайт):
max_binlog_size= 500M

Сколько дней хранится:
expire_logs_days = 3

Наиболее часто использующиеся команды

Повторение действий после операции восстановления:
shell> mysqlbinlog log_file | mysql -h server_name

Удаление логов до определённого файла:
PURGE BINARY LOGS TO 'mysql-bin.000';

Удаление логов до определённой даты:
PURGE BINARY LOGS BEFORE 'YYYY-MM-DD hh:mm:ss';

Лог ошибок

Особенно полезен в случаях сбоев. Лог содержит информацию об остановках, запусках сервера, а также сообщения о критических ошибках. Может содержать сообщения с предупреждениями (warnings).

Основные настройки в my.cnf

Местоположение лога:
log_error = /var/log/mysql/mysql.err

Флаг, указывающий стоит ли записывать в лог в том числе предупреждения (записываются, если значение больше нуля):
log_warnings = 1

Наиболее часто использующиеся команды

Переход к новому файл лога:
shell> mysqladmin flush-logs

Копирование старой части лога (необходимо, так как в случае повторного выполнения fluch он будет удалён):
shell> mv host_name.err-old backup-directory

Лог медленных запросов

Если есть подозрение, что приложение работает медленно из-за неэффективных запросов к базе, то в первую очередь следует проверить лог медленных запросов. В случае оптимизации запросов этот лог поможет выяснить, что необходимо оптимизировать в первую очередь.

Основные настройки в my.cnf

Местоположение лога:
log_slow_queries = /var/log/mysql/mysql_slow.log

Со скольки секунд выполнения запрос считается медленным, минимальное значений — 1 секунда, по умолчанию 10 секунд:
long_query_time = 10

Если надо логировать запросы, которые не используют индексы, надо добавить строку:
log-queries-not-using-indexes

Если надо вести лог медленных команд, таких как OPTIMIZE TABLE, ANALYZE TABLE и ALTER TABLE:
log-slow-admin-statements

Лог запросов

Лог содержит информацию о подключениях и отключениях клиентов, а также все SQL запросы, которые были получены. Фактически, это временный лог. Обычно лог удаляется автоматически сразу после выполнения всех команд (т.е. как только он стал ненужным). Лог ведётся в соответствии с очередность поступления запросов. Этот лог содержит все запросы к базе данных (независимо от приложений и пользователей). Так что если есть желание (или необходимость) проанализировать, какие необходимы индексы, какие запросы могли бы оптимизированы, то этот лог как раз может помочь в таких целях. Лог полезен не только для случаев, когда необходимо знать, какие запросы выполняются с базой данных, но и в случаях, когда ясно, что возникла ошибка с базой данных, но неизвестно, какой запрос был отправлен к базе данных (например, в случае генерации динамического SQL-а). Рекомендуется защищать лог запросов паролем, так как он может данные также о паролях пользователей.

Основные настройки в my.cnf

Местоположение лога:
log = /var/log/mysql/mysql.log

Наиболее часто использующиеся команды

В отличии от других логов, перезагрузка сервера и команда fluch не инициирует создание нового лога. Но это можно сделать вручную:
shell> mv host_name.log host_name-old.log
shell> mysqladmin flush-logs
shell> mv host_name-old.log backup-directory

Лог репликаций

Здесь логируются изменения, выполненные по инициации сервера репликаций. Как и бинарный лог, состоит из файлов, каждый из которых пронумерован.

Основные настройки в my.cnf

Местоположение лога:
relay-log = /var/log/mysql/mysql-relay-bin.log

Максимальный размер:
max_relay_log_size = 500М

Наиболее часто использующиеся команды

Начать новый файл лога можно только при остановленном дополнительном (slave) сервере:
shell> cat new_relay_log_name.index >> old_relay_log_name.index
shell> mv old_relay_log_name.index new_relay_log_name.index

Команда fluch logs инициирует ротацию лога.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как сохранить все файлы при переустановке windows 10
  • Параметры папок в windows 10 pro
  • Network neighborhood windows 7
  • Эмулятор windows для mac для игр
  • Windows restart window manager