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