我在 Windows 2000 服务器上安装了 MySQL Community Edition 5.1.41。在 my.ini 文件中,我启用了慢查询日志记录并将输出重定向到表。我已将 long_query_time 设置为 10 秒。然后,在运行一些查询后,我检查了慢查询日志表,发现已记录所有执行的查询,并且在数据文件夹中还创建了一个名为 database-slow.log 的文件。有人能告诉我我哪里出错了吗?我正在使用内置的 innodb,并且没有激活 innodb 插件。
谢谢
答案1
首先,我将这些行放在 /etc/my.cnf 中
[mysqld]
log-output=TABLE
slow-query-log
slow-query-log-file=slow-queries.log
当您使用 log_output 为 TABLE 的慢速日志时,不会在 /var/lib/mysql 中创建表。表是在 mysql 文件夹 /var/lib/mysql/mysql 中创建的。默认基于表的慢速日志的存储引擎是 CSV。您可以通过执行以下操作来检查这一点:
use mysql
show tables;
您应该看到表 slow_log
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
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
1 row in set (0.00 sec)
以下是如何将慢速日志表的 CSV 文件转换为 MyISAM
SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log ENGINE = MyISAM;
SET GLOBAL slow_query_log = @old_log_state;
请记住,转换后的 MyISAM 没有任何索引。
这是一个名为“start_time”的列,它是一个时间戳。您可以随意像这样对其进行索引:
SET @old_log_state = @@global.slow_query_log;
SET GLOBAL slow_query_log = 'OFF';
ALTER TABLE mysql.slow_log ADD INDEX (start_time);
SET GLOBAL slow_query_log = @old_log_state;
请让我们知道结果如何!!!