【数据库系列教程】MySQL日志管理

一、日志类型

  • 错误日志
    • /var/log/mysqld.log
  • 慢查询日志
  • 二进制日志
  • 重做日志
  • 回滚日志

二、慢日志 slow query log

1.作用

记录慢查询

2.如何定义慢查询

执行时长超过long_query_time指定的值的查询
默认值10s

3.启用慢查询

vim /etc/my.cnf
[mysqld]
long_query_time=10
slow_query_log=ON
slow_query_log_file=slow.log			# 默认存放到数据目录下
systemctl restart mysqld

4.验证慢查询

mysql> select sleep(15);
+-----------+
| sleep(15) |
+-----------+
|         0 |
+-----------+
[root@localhost data]# cat slow.log 
/usr/sbin/mysqld, Version: 5.7.17-log (MySQL Community Server (GPL)). started with:
Tcp port: 0  Unix socket: /data/mysql.sock
Time                 Id Command    Argument
# Time: 2021-06-02T05:50:44.216487Z
# User@Host: root[root] @ localhost []  Id:     4
# Query_time: 15.000596  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1622613044;
select sleep(15);

三、二进制日志 binary log(重要)

1.作用

  • 存储MySQL服务器产生所有写操作
  • 实际应用:
    • 即时点还原
    • 主从复制

2.启用二进制日志

vim /etc/my.cnf
[mysqld]
server_id=10	#ID不是唯一的,多个服务器下ID不允许重复
log_bin=master	#这里的名字是什么,以后的二进制文件就是什么名字

server_id:为MySQL服务器分配唯一的ID,取值范围1—2^32
log_bin:启用二进制日志, 默认存放到数据目录

3.二进制文件详细

二进制文件的命名格式

  • master.xxxxxx #前面的master是我们配置文件里写的自定义名称
  • master.index #文本文件,记录当前服务器都有哪些二进制日志文件
[root@localhost ~]# cat /data/master.index 
./master.000001
./master.000002
./master.000003
[root@localhost ~]# file /data/master.000001 
/data/master.000001: MySQL replication log

4.二进制日志文件格式

  • 起始时间
  • 事件
  • 终止时间
  • 起始位置position
  • 终止位置position
    • 下一个事件的起始位置,就是上一个事件的结束位置

5.查看二进制文件

命令格式

mysqlbinlog 二进制文件路径

查看所有

[root@localhost ~]# mysqlbinlog /test/master.000002 	#每个人的都不一样

按照时间查看

  • —start-datetime= #起始日期
  • —stop-datetime= #截止日期
[root@localhost ~]# mysqlbinlog --start-datetime="2021-01-20 11:01:22"  --stop-datetime="2021-01-20 11:12:18" /test/master.000002

按照位置查看

  • —start-position= #起始位置
  • —stop-position= #截止位置
[root@localhost ~]# mysqlbinlog --start-position=219 --stop-position=313 /test/master.000002 

6.查看当前正在使用的二进制文件

[root@localhost ~]# mysql -uroot -p -e "show master status;"

+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| master.000004 |     6458 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+

7.查看日志文件大小

[root@localhost ~]# mysql -uroot -p -e "show binary logs;"

8.查看二进制文件中的事件

mysql> show binlog events in "master.000003";
+---------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name      | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
+---------------+-----+----------------+-----------+-------------+---------------------------------------+
| master.000003 |   4 | Format_desc    |        10 |         123 | Server ver: 5.7.17-log, Binlog ver: 4 |
| master.000003 | 123 | Previous_gtids |        10 |         154 |                                       |
| master.000003 | 154 | Anonymous_Gtid |        10 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| master.000003 | 219 | Query          |        10 |         307 | create database AA                    |
| master.000003 | 307 | Anonymous_Gtid |        10 |         372 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| master.000003 | 372 | Query          |        10 |         460 | create database BB                    |
| master.000003 | 460 | Stop           |        10 |         483 |                                       |
+---------------+-----+----------------+-----------+-------------+---------------------------------------+

四、二进制文件滚动

  • 重启mysql服务
  • 人为操作
    • mysql> flush logs;
  • 单个文件的大小超过1GB

五、重做日志 redolog

redolog是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。比如MySQL 实例挂了或宕机了,重启时,InnoDB存储引擎会使用redo log恢复数据,保证数据的持久性与完整性。

六、回滚日志 undolog

所有事务进行的修改都会先记录到这个回滚日志中,然后再执行相关的操作。如果执行过程中遇到异常的话,我们直接利用回滚日志中的信息将数据回滚到修改之前的样子即可。