MySQL相关的日志分为以下几种:
通用查询日志
错误日志
二进制日志
中继日志
慢查询日志
DDL日志
MySQL为通用查询和慢查询日志输出提供灵活的控制,这些日志可以输出到文件也可以存到mysql库中的general_log和slow_log两个表中。在MySQL5.5.7之前,将日志信息存入到数据库表比存入到文件更会家中MySQL服务器的负担,如果想要开启General Log和Slow Query Log又不想太影响MySQL服务器的性能,就将MySQL日志记录到文件中。
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.00 sec)
mysql> show create table mysql.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)
general_log和slow_log默认使用CSV作为存储引擎,也可以使用MyISAM存储引擎。
1)通用查询日志General Log
General Log记录MySQL的连接信息和一些操作信息.
MySQL根据接收到的SQL语句顺序将查询语句写入到查询日志中。默认情况下,General Log是没有开启的。
使用
general_log=1 或者 general_log
可以开启MySQL的General Log记录功能,如果设置general_log=0 那么General Log日志记录功能将关闭。
使用以下方式指定General Log的路径
general_log_file=/data/app_data/mysql/mysql.log
如果general_log没有指定特定的路径,默认使用hostname.log,即日志文件名称为主机名。
如果想要在MySQL运行期间关闭或者开启general_log功能,或者更改general_log_file的路径,可以使用全局变量general_log和general_log_file指定
mysql> show global variables like '%general%'; +------------------+---------------------------------------+ | Variable_name | Value | +------------------+---------------------------------------+ | general_log | ON | | general_log_file | /data/app_data/mysql/zabbixserver.log | +------------------+---------------------------------------+ 2 rows in set (0.00 sec)
重启MySQL实例或者使用FLUSH LOGS命令不会导致生成一个新的日志文件。
如果要重新命名日志文件并创建一个新的文件可以使用以下方式:
#mv zabbixserver.log zabbixserver.log20150422 # mysqladmin -uroot -p "flush-logs";
也可以通过以下的方式:
SET GLOBAL general_log = 'OFF'; mv zabbixserver.log zabbixserver.log20150422 SET GLOBAL general_log = 'ON';
通过更改全局变量的值不用重新启动MySQL实例
2)慢查询日志 Slow Query Log
慢查询日志会记录超过long_query_time设置的值查询语句。long_query_time默认最小的值为0,默认值是10.单位为秒。这个值也可以用毫秒记录,如果是记录到文件,毫秒部分也会被记录,如果是记录到数据库表中,毫秒部分将被忽略。
默认情况下,管理语句和没有使用索引的查询语句不会被记录。
通过以下方式开启慢查询日志记录功能
slow_query_log=1
或者
slow_query_log
通过以下方式设置慢查询日志记录文件
slow_query_log_file=/data/app_data/mysql/mysql-slow.log
如果没有特别指定慢查询日志的文件路径,将默认在数据库目录下创建hostname-slow.log的文件
也可以通过设置全局变量的方式来记录慢查询日志
mysql> show variables like '%slow_query%'; +---------------------+--------------------------------------------+ | Variable_name | Value | +---------------------+--------------------------------------------+ | slow_query_log | OFF | | slow_query_log_file | /data/app_data/mysql/zabbixserver-slow.log | +---------------------+--------------------------------------------+ 2 rows in set (0.00 sec)
可以使用
log_queries_not_using_indexes
来记录没有使用索引的查询
mysql> SET GLOBAL slow_query_log = 'ON'; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL long_query_time=30; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL slow_query_log_file = '/data/app_data/mysql/mysql-slow.log'; Query OK, 0 rows affected (0.00 sec) mysql> SET GLOBAL log_queries_not_using_indexes=1; Query OK, 0 rows affected (0.00 sec)
3)错误日志
log_error=/data/app_data/mysql/mysql-error.log
6)服务器日志维护
参考文档:
https://dev.mysql.com/doc/refman/5.5/en/server-logs.html