Могу ли я включить ведение журнала аудита в моей базе данных 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;
CREATE TABLE
команды должны (если таблицы еще не существуют) выполняться в mysql
базе данных, а не в любых пользовательских базах данных. Возможно, операторы SQL можно обновить, чтобы отразить это.
SELECT * FROM mysql.general_log order by (event_time) desc
будет лучше. просто говорю. :-)
Помимо того, что я наткнулся здесь, выполнение следующего было самым простым способом вывести запросы в файл журнала без перезапуска
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;
GRANT SUPER ON *.* TO user1@localhost
Топ ответ не работает в 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.
phpMyAdmin
?
general_log_file=filename.log
Включить журнал для таблицы
mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';
Просмотр журнала по запросу
select * from mysql.general_log
Быстрый способ включить 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
Для записи, 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.
Вы должны знать, что вход в MySQL действительно влияет на производительность, но это может быть мудрым решением.
Я обычно оставляю это включенным на сервере dev (кроме случаев, когда это сводит нас с ума :))
Версия 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 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
В случае использования AWS RDS MYSQL пошаговое руководство здесь.
Если выбран выход «файл», вы можете просматривать журнал непосредственно из консоли «Журнал» AWS RDS.