Возможно ли, чтобы я включил ведение журнала аудита в моей базе данных mysql?
Я в основном хочу отслеживать все запросы в течение часа и выгружать журнал в файл.
Возможно ли, чтобы я включил ведение журнала аудита в моей базе данных mysql?
Я в основном хочу отслеживать все запросы в течение часа и выгружать журнал в файл.
Запустите mysql с опцией -log:
mysqld --log=log_file_name
или поместите в файл my.cnf
следующее:
log = log_file_name
Любой из них будет записывать все запросы в log_file_name.
Вы также можете записывать только медленные запросы, используя опцию --log-slow-queries
вместо --log
. По умолчанию запросы, которые занимают 10 секунд или более, считаются медленными, вы можете изменить это, установив long_query_time
на количество секунд, которое должен выполнить запрос для выполнения перед регистрацией.
(Примечание: для 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;
Помимо того, что я наткнулся здесь, выполнение следующего было самым простым способом вывести запросы в файл журнала без перезапуска
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;
Лучший ответ не работает в 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.yz\my.ini
xampp: c:\xampp\mysql\bin\my.ini.
Включить журнал для таблицы
mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';
Просмотр журнала по запросу
select * from mysql.general_log
Быстрый способ включить общий журнал запросов MySQL без перезапуска.
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. Распространение 5.7.15, для osx10.11 (x86_64) с помощью обложек EditLine
Для записи в файл 5.1.6 были введены general_log и slow_log:
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 базы данных
Вы должны знать, что ведение журнала mysql действительно влияет на производительность, но это может быть разумным делом.
Я обычно оставляю его на сервере dev (кроме случаев, когда он сводит нас с ума:))
В случае использования AWS RDS MYSQL, пошаговое руководство здесь.
При установке в качестве вывода "файл" вы можете просматривать журнал непосредственно из консоли "Журнал" AWS RDS.
Версия 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
Перезапущенный Mysql
Результат:
$ sudo tail -f /var/log/mysql/mysqld_general.log
181210 9:41:04 21 Connect [email protected] 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
По умолчанию журналы не включены, кроме журнала ошибок. Это сделано по определенной причине, и это то, что ведение журнала забирает некоторые ресурсы сервера из основных функций БД. Фактически, документы MySQL рекомендуют включать определенные журналы только при попытке обнаружить причину проблем с производительностью. Конечно, включение регистрации после факта создает свой собственный набор проблем.
По этим причинам я использую профессиональный инструмент мониторинга для оценки производительности и работоспособности экземпляров моей базы данных. За прошедшие годы я прошел через множество инструментов, но моим предпочтительным инструментом мониторинга в настоящее время является Navicat Monitor для MySQL/MariaDB. Он использует так называемую "безагентную архитектуру", что означает, что вам не нужно устанавливать какое-либо программное обеспечение на сервер БД, и вы можете получить доступ к своей статистике БД из любого места через веб-браузер.
Вы можете отслеживать выполненные запросы на экране Query Analyzer. Он показывает запросы в режиме реального времени и отображает сводную информацию обо всех выполняемых запросах. Это действительно полезно для выявления проблемных запросов, например, с самым медленным временем выполнения, и для обнаружения взаимоблокировок.
Все ваши метрики могут быть использованы для создания высококачественных отчетов. Они могут включать диаграммы одного или даже нескольких экземпляров для сравнения и анализа данных. Вы также можете сохранить отчет в виде высококачественного PDF-документа.
Дайте ему шанс и крошечный, что вы думаете!