SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log ENGINE = MyISAM;
ALTER TABLE mysql.slow_log ADD INDEX (start_time);
CREATE TABLE mysql.areva_log LIKE mysql.slow_log;
ALTER TABLE mysql.slow_log ADD INDEX (db);
SET GLOBAL slow_query_log = @old_log_state;
步骤 03) 创建一个存储过程,将所有 db 为 areva 的慢日志条目复制到 mysql.areva_log
DELIMITER $$
DROP PROCEDURE IF EXISTS `mysql`.`AppendToArevaLog` $$
CREATE PROCEDURE `mysql`.`AppendToArevaLog` ()
BEGIN
SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
INSERT INTO mysql.aerva_log
SELECT * FROM mysql.slow_log WHERE db = 'areva';
SET GLOBAL slow_query_log = @old_log_state;
END $$
DELIMITER ;
步骤 04) 使用 crontab 或使用 mysql 事件每 15 分钟调用一次存储过程
步骤 05) 每周、每月或每年删除慢日志:
SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
CREATE TABLE mysql.slow_log_empty LIKE mysql.slow_log;
ALTER TABLE mysql.slow_log RENAME mysql.slow_log_to_zap;
ALTER TABLE mysql.slow_log_empty RENAME mysql.slow_log;
SET GLOBAL slow_query_log = @old_log_state;
DROP TABLE mysql.slow_log_to_zap;
我尝试尝试为系统表(mysql.slow_log)创建触发器。根本做不到。但是,您可能想尝试一种非常规的方法:
步骤 01) 激活输出为表的 slow_log 并重启 mysql
Step 02) 将slow_log转换为MyISAM,复制到areva_log,在db上索引slow_log
步骤 03) 创建一个存储过程,将所有 db 为 areva 的慢日志条目复制到 mysql.areva_log
步骤 04) 使用 crontab 或使用 mysql 事件每 15 分钟调用一次存储过程
步骤 05) 每周、每月或每年删除慢日志:
试试看 !!!