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`