关于这一点,我有好消息和坏消息。
您可以将一般日志用作可以查询的表
步骤 01) 将此添加到 /etc/my.cnf
[mysqld]
log
log-output=TABLE
Run Code Online (Sandbox Code Playgroud)
步骤 02) service mysql restart
好的 mysqld 没有记录表中的每个查询mysql.general_log
。问题:看一下的初始布局mysql.general_log
:
mysql> show create table mysql.general_log\G
*************************** 1. row ***************************
Table: general_log
Create Table: CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` int(11) 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'
1 row in set (0.09 sec)
Run Code Online (Sandbox Code Playgroud)
一般日志作为 CSV 表有什么用
步骤 03) 创建mysql.general_log
一个 MyISAM 表并为其建立索引
SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
ALTER TABLE mysql.general_log ADD INDEX (event_time);
SET GLOBAL general_log = @old_log_state;
Run Code Online (Sandbox Code Playgroud)
现在它看起来像这样:
mysql> show create table general_log\G
*************************** 1. row ***************************
Table: general_log
Create Table: CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumtext NOT NULL,
KEY `event_time` (`event_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='General log'
1 row in set (0.00 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
用户和主机值一起附加在 user_host 字段中。
你如何轮换出一般日志?
以下是如何清空的示例mysql.general_log
:
SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
CREATE TABLE mysql.general_log_new LIKE mysql.general_log;
DROP TABLE mysql.general_log;
ALTER TABLE mysql.general_log_new RENAME mysql.general_log;
SET GLOBAL general_log = @old_log_state;
Run Code Online (Sandbox Code Playgroud)
以下是如何保留最近 3 天条目的示例:
SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
CREATE TABLE mysql.general_log_new LIKE mysql.general_log;
INSERT INTO mysql.general_log_new
SELECT * FROM mysql.general_log WHERE event_time > NOW() - INTERVAL 3 DAY;
DROP TABLE mysql.general_log;
ALTER TABLE mysql.general_log_new RENAME mysql.general_log;
SET GLOBAL general_log = @old_log_state;
Run Code Online (Sandbox Code Playgroud)
您在一般日志的文本文件版本中收集的任何内容都不会出现。您可以收集新条目。
归档时间: |
|
查看次数: |
3619 次 |
最近记录: |