Войти все запросы в MySQL - PullRequest
251 голосов
/ 20 ноября 2008

Могу ли я включить ведение журнала аудита в моей базе данных mysql?

В основном я хочу отслеживать все запросы в течение часа и вывести журнал в файл.

Ответы [ 10 ]

214 голосов
/ 18 января 2013

( Примечание : для mysql-5.6 + это не сработает. Существует решение, которое применимо к mysql-5.6 +, если вы прокрутите вниз или нажмите здесь .)

Если вы не хотите или не можете перезапустить сервер MySQL, вы можете продолжить на своем работающем сервере следующим образом:

  • Создание таблиц журналов в базе данных mysql
  CREATE TABLE `slow_log` (
   `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
                          ON UPDATE CURRENT_TIMESTAMP,
   `user_host` mediumtext NOT NULL,
   `query_time` time NOT NULL,
   `lock_time` time NOT NULL,
   `rows_sent` int(11) NOT NULL,
   `rows_examined` int(11) NOT NULL,
   `db` varchar(512) NOT NULL,
   `last_insert_id` int(11) NOT NULL,
   `insert_id` int(11) NOT NULL,
   `server_id` int(10) unsigned NOT NULL,
   `sql_text` mediumtext NOT NULL,
   `thread_id` bigint(21) unsigned NOT NULL
  ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
  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'
  • Включить ведение журнала запросов в базе данных
SET global general_log = 1;
SET global log_output = 'table';
  • Просмотр журнала
select * from mysql.general_log
  • Отключить ведение журнала запросов в базе данных
SET global general_log = 0;
181 голосов
/ 10 декабря 2013

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

SET global log_output = 'FILE';
SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';
SET global general_log = 1;

можно отключить с помощью

SET global general_log = 0;
158 голосов
/ 20 ноября 2008

Запустите mysql с опцией --log:

mysqld --log=log_file_name

или поместите в файл my.cnf следующее:

log = log_file_name

Любой из них запишет все запросы в log_file_name.

Вы также можете регистрировать только медленные запросы, используя параметр --log-slow-queries вместо --log. По умолчанию запросы, которые занимают 10 секунд или дольше, считаются медленными, вы можете изменить это, установив long_query_time на количество секунд, которое должен выполнить запрос до его регистрации.

113 голосов
/ 01 августа 2014

Лучший ответ не работает в MySQL 5.6+. Используйте это вместо:

[mysqld]
general_log = on
general_log_file=/usr/log/general.log

в вашем файле my.cnf / my.ini

Ubuntu / Debian : /etc/mysql/my.cnf
Windows : c: \ ProgramData \ MySQL \ MySQL Server 5.x
wamp : c: \ wamp \ bin \ mysql \ mysqlx.y.z \ my.ini
xampp : c: \ xampp \ mysql \ bin \ my.ini.

29 голосов
/ 06 апреля 2017

Включить журнал для таблицы

mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';

Просмотр журнала по запросу select

select * from mysql.general_log
12 голосов
/ 17 ноября 2016

Быстрый способ включить MySQL General Query Log без перезапуска.

mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL general_log_file = '/var/www/nanhe/log/all.log';

Я установил mysql через homebrew, версия mysql: mysql Ver 14.14 Distrib 5.7.15, для osx10.11 (x86_64) с использованием оболочки EditLine

6 голосов
/ 10 мая 2013

Для записи, general_log и slow_log были введены в 5.1.6:

http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html

5.2.1. Выбор пунктов назначения общего запроса и журнала медленных запросов

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

4 голосов
/ 22 ноября 2008

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

Я обычно оставляю его включенным на сервере разработки (кроме случаев, когда это сводит нас с ума :))

1 голос
/ 27 ноября 2016

В случае использования AWS RDS MYSQL пошаговое руководство здесь.

Если выбран выходной файл, вы можете просматривать журнал напрямую из консоли «Журнал» AWS RDS.

Регистрация в AWS RDS MYSQL

0 голосов
/ 10 декабря 2018

OS / MySQL версия:

$ uname -a
Darwin Raphaels-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Thu Jun 21 20:07:40 PDT 2018; root:xnu-3248.73.11~1/RELEASE_X86_64 x86_64

$ mysql --version
/usr/local/mysql/bin/mysql  Ver 14.14 Distrib 5.6.23, for osx10.8 (x86_64) using  EditLine wrapper

Добавление ведения журнала (например, я не думаю, что /var/log/... - лучший путь в Mac OS, но это сработало:

sudo vi ./usr/local/mysql-5.6.23-osx10.8-x86_64/my.cnf

[mysqld]
general_log = on
general_log_file=/var/log/mysql/mysqld_general.log

Restarted Mysql

Результат:

$ sudo tail -f /var/log/mysql/mysqld_general.log
181210  9:41:04    21 Connect   root@localhost on employees
           21 Query /* mysql-connector-java-5.1.47 ( Revision: fe1903b1ecb4a96a917f7ed3190d80c049b1de29 ) */SELECT  @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@collation_server AS collation_server, @@collation_connection AS collation_connection, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_buffer_length AS net_buffer_length, @@net_write_timeout AS net_write_timeout, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS transaction_isolation, @@wait_timeout AS wait_timeout
           21 Query SET NAMES latin1
           21 Query SET character_set_results = NULL
           21 Query SET autocommit=1
           21 Query SELECT USER()
           21 Query SELECT USER()
181210  9:41:10    21 Query show tables
181210  9:41:25    21 Query select count(*) from current_dept_emp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...