【数据库系列教程】MySQL日志管理
【数据库系列教程】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
所有事务进行的修改都会先记录到这个回滚日志中,然后再执行相关的操作。如果执行过程中遇到异常的话,我们直接利用回滚日志中的信息将数据回滚到修改之前的样子即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WangShengJJのblog!