MySQL日志文件总结

MySQL有几个日志文件,帮助管理员了解mysqld(MySQL Server的主程序)内部发生的事情。

 

表1 MySQL的日志文件及功能
日志文件 记入文件中的信息类型
错误日志 记录启动,运行或停止mysqld时出现的问题
通用日志 记录建立的客户端连接和执行的语句
二进制日志 记录更改数据的所有语句,用于复制,备份恢复
慢查询日志 记录执行时间超过long_query_time秒的所有查询

 

1.错误日志

    错误日志问包含了mysqld启动或停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。可以用--log-error[=file_name]选项来指定mysqld保存错误日志文件的位置。

查看错误日志的位置:

mysql> show variables like 'log_error%';
+---------------------+--------------------------+
| Variable_name       | Value                    |
+---------------------+--------------------------+
| log_error           | /var/log/mysql/error.log |
| log_error_verbosity | 3                        |
+---------------------+--------------------------+
2 rows in set (0.01 sec)

2.通用日志

      如果你想知道mysqld内部发生了什么,你应该用--log[=file_name]或-1[file_name]选项启动它。如果没有给定file_name的值,那么默认名就是host_name.log。所有连接和语句都将被记录到日志文件中。

以下命令可查询通用日志的路径。

mysql> show variables like '%gene%';
+------------------+---------------------------------+
| Variable_name    | Value                           |
+------------------+---------------------------------+
| general_log      | OFF                             |
| general_log_file | /var/lib/mysql/loggeneral.log |
+------------------+---------------------------------+
2 rows in set (0.03 sec)

3.二进制日志

      二进制日志包含了所有更新了数据或者潜在更新了数据的语句。它还包含了每个更新数据库的语句的执行时间信息,但不包含没有修改任何数据的语句,如果想要记录所有的语句,比如查询之类的,那么应该使用通用日志。二进制日志的主要作用是恢复数据,因为二进制日志包含备份后进行的所有更新。

二进制日志的主要作用:

1,用于复制,在数据库主从复制的时候,主服务器会将其产生的二进制日志发送到slave端,slave端会利用这个二进制日志的信息在本地重做,实现主从同步
2,用户恢复,MySQL可以在全备和差异备份的基础上,利用二进制日志进行基于时间点或者事物Id的恢复操作。原理雷同于主从复制的日志重做

查看二进制日志的位置:

mysql> show variables like 'log_bin%';
+----------------------------------------+--------------------------+
| Variable_name                          | Value                    |
+----------------------------------------+--------------------------+
| log_bin                                | OFF                      |
| log_bin_basename                       |                          |
| log_bin_index                          |                          |
| log_bin_trust_function_creators        | OFF                      |
| log_bin_use_v1_row_events              | OFF                      |

 可见二进制日志并没有打开,那么需要打开二进制日志的话进行如下操作:

进入my.cnf文件,cd /etc/mysql/my.cnf,并在[mysqld]后添加以下内容:

[mysqld]                                                                                                     
server-id = 1                              # 确保在整个Mysql集群中唯一
log-bin = /var/log/mysql/mysql-bin.log     # 日志存放位置 
log-bin-index = binlog.index

 记得重启mysql,再查看二进制日志是否打开及其位置:

mysql> show variables like 'log_bin%';
+----------------------------------------+-----------------------------+
| Variable_name                          | Value                       |
+----------------------------------------+-----------------------------+
| log_bin                                | ON                          |
| log_bin_basename                       | /var/log/mysql/mysql-bin    |
| log_bin_index                          | /var/lib/mysql/binlog.index |
| log_bin_trust_function_creators        | OFF                         |
| log_bin_use_v1_row_events              | OFF                         |

然后就可以查看二进制日志了: 

mysql> show master status; #查看当前日志
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> show binary logs; #查看日志【所生成的全部日志文件】
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       154 |
+------------------+-----------+
1 row in set (0.00 sec)

mysql> show binlog events in 'mysql-bin.000001'; #可以查看对某个日志中具体的操作
+------------------+-----+----------------+-----------+-------------+--------------------------------------------
------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                       
            |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------
------------+
| mysql-bin.000001 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.22-0ubuntu0.16.04.1-log, Bi
nlog ver: 4 |
| mysql-bin.000001 | 123 | Previous_gtids |         1 |         154 |                                            
            |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------
------------+
2 rows in set (0.00 sec)

 也可以使用mysqlbinlog命令来查看二进制日志文件中的的内容:

[root@localhost  mysql]:~/ $ mysqlbinlog /var/lib/mysql/mysql-bin.xxxxx [15:14:30]
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
xxxxxxxxxxxxxxxx
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

4.慢查询日志

当参数slow_query_log = 1时,mysqld将记录一个执行时间超过long_query_time秒的所有SQL语句的日志文件。

查看慢查询日志的位置:

mysql> show variables like '%slow_query%';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| slow_query_log      | OFF                                  |
| slow_query_log_file | /var/lib/mysql/54b78b286d5c-slow.log |
+---------------------+--------------------------------------+
2 rows in set (0.01 sec)

可以通过mysqldumpslow命令来查看和分析慢查询日志:

[root@localhost mysql]# mysqldumpslow /var/lib/mysql/54b78b286d5c-slow.log -t 2 -s al
 
Reading mysql slow query log from /var/lib/mysql/iZbp1akzlq26t30fbsdwh7Z-slow.log
-- count 执行次数
-- time 执行时间
-- lock 锁定时间
-- rows 返回条数
-- root[root]@localhost  通过那个用户执行的
Count: 5  Time=0.00s (0s)  Lock=0.01s (0s)  Rows=5.0 (25), root[root]@localhost
  SHOW COLUMNS FROM `yp_area`

 

你可能感兴趣的:(MySQL)