我似乎在任何地方都找不到这方面的任何信息。我在这里发现了一个叫做监控每个数据库的MySQL活动?的问题,但这也不是完全正确的答案。
我希望能够将以下内容记录到某个地方的系统日志,最好是通过syslog:
类似于last和lastb的MySQL。这能办到吗?是否已经在Ubuntu和存储库中编写了什么?MaatKit能做到这一点吗?
谢谢!
发布于 2011-12-27 19:20:44
唯一的办法是激活慢速日志并将其用作MyISAM表。默认情况下,慢速日志通常是一个文本文件。但是,general_log表是在较新版本的MySQL中作为CSV表提供的。
mysql> use mysql
Database changed
mysql> show create table slow_log\G
*************************** 1. row ***************************
Table: slow_log
Create Table: 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,
KEY `start_time` (`start_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Slow log'
1 row in set (0.03 sec)
mysql>如果必须添加以下内容,请确保my.cnf中有此内容,然后重新启动mysql:
[mysqld]
log-output=TABLE
log-slow-queries
long-query-time=0.00001接下来,将表转换为MyISAM并在所需列上索引:
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 starttime_index (start_time);
ALTER TABLE mysql.slow_log ADD INDEX db_starttime_index (db,start_time);
SET GLOBAL slow_query_log = @old_log_state;
SHOW CREATE TABLE mysql.slow_log\G您可以查询表,并从mysql.slow_log列user_host检索用户和主机。
您可以在需要的地方从mysql.slow_log复制数据的一些任务,可以是一个单独的数据库。
CREATE DATABASE IF NOT EXISTS mystatus;也许,您可以像这样运行查询:
SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log RENAME mystats.slow_log;
CREATE TABLE mysql.slow_log LIKE mystats.slow_log;
SET GLOBAL slow_query_log = @old_log_state;这将将缓慢的日志移到别处,并从一个空日志开始。
这可能不是一个完整的答案,但我希望这对你们有一定的帮助。
https://dba.stackexchange.com/questions/9772
复制相似问题