MySQL DBA Linux SA C/C++ Perl PHP Python Hadoop
分类: Mysql/postgreSQL
2013-02-28 20:57:55
有需要去看下slow.log,但是发现slow.log好久没写了。看了下服务器设置:
root@(none) 01:13:41>show global variables like '%slow%';
+---------------------+-------------------------+
| Variable_name | Value |
+---------------------+-------------------------+
| log_slow_queries | OFF |
| slow_launch_time | 2 |
| slow_query_log | OFF |
| slow_query_log_file | /u01/mysql/log/slow.log |
+---------------------+-------------------------+
4 rows in set (0.00 sec)
关闭的,于是开启,竟然报错。
root@(none) 01:14:27>set global slow_query_log=1;
ERROR 1146 (42S02): Table 'mysql.slow_log' doesn't exist
发现mysql.slow_log表不存在,desc了下,确实不存在。该表,是当开启参数log_output设置为table的时候,slow.log会记录到这个表里面,但是由于记录该表会对性能有影响,所以一般都是记录到FILE里面,然后再用脚本来处理。究竟影响有多大,见我之前写的博客。
那么难道写FILE也必须该表存在吗?
我手动把这个表建上。
// 不让该操作写到binlog中
set session sql_log_bin=0;
use mysql
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'
然后:
root@mysql 01:34:02>set global slow_query_log=1;
Query OK, 0 rows affected (0.00 sec)
设置ok,来测试下:
root@(none) 01:35:40>select sleep(2);
+----------+
| sleep(2) |
+----------+
| 0 |
+----------+
1 row in set (2.00 sec)
slow.log里面:
设置成功。
总结:
mysql.slow_log表还是必须的,没有这个表slow log 也不能输出到FILE。