题
是否有MySQL将其日志转移到远程MySQL Server上?
我想审核MySQL连接,但我不希望服务器在其自己的硬件上存储所有本地信息。
解决方案
我对此有个好消息和坏消息。
好消息
您可以将常规日志用作表格您可以查询
步骤01)将其添加到/etc/my.cnf
[mysqld]
log
log-output=TABLE
步骤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)
作为CSV表的一般日志有什么好处
步骤03) mysql.general_log
迈萨姆桌并索引
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;
现在看起来像这样:
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>
用户和主机值在用户_ -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;
这是如何保留最后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;
坏消息
您在通用日志的文本文件版本中收集的任何内容都不会出现。您可以收集新的条目。
其他提示
您可以将NFS安装安装设置为目标服务器,并将一般日志路径指向该安装座。
而不是重新启动mySQL,您可以做到这一点:
SET GLOBAL log_output = 'TABLE';
服务器将立即开始登录到 `mysql`.`general_log`
.
不隶属于 dba.stackexchange