在MySQL中,有几种不同类型的日志,用于记录数据库的活动和操作,以便于故障排查、性能调优和数据恢复等目的。以下是MySQL中常见的几种日志类型:
-
错误日志(Error Log):
错误日志记录了MySQL服务器在启动和运行过程中出现的错误消息、警告和一般信息。错误日志对于诊断数据库问题非常有用,例如数据库启动失败、查询执行错误等情况。 -
查询日志(Query Log):
查询日志记录了所有已执行的SQL语句,包括SELECT、INSERT、UPDATE、DELETE等操作。查询日志可以用于分析数据库的性能问题、优化慢查询以及审计数据库操作等。 -
慢查询日志(Slow Query Log):
慢查询日志记录了执行时间超过预定义阈值的SQL查询语句。通常情况下,管理员可以根据自己的需求设置慢查询日志的阈值,以便于找出需要优化的查询语句,并对其进行性能调优。 -
归档日志(BinLog):
事务日志记录了所有对数据库进行修改的操作,例如INSERT、UPDATE、DELETE等。事务日志是MySQL数据库复制(Replication)的基础,它可以用于在主从服务器之间复制数据,并实现数据备份和灾难恢复。(用于数据备份和主从复制) -
重做日志(Redo Log):
重做日志记录了数据库引擎对数据文件进行的物理级别的修改,例如页的插入、更新和删除操作。重做日志用于在数据库崩溃或断电等意外情况下,恢复数据到最新的一致状态。 -
回滚日志(Undo Log):
撤销日志记录了数据库引擎对事务进行的修改操作的逆操作,以便于在事务回滚或数据库崩溃时撤销事务对数据库的影响。
这些日志类型在MySQL中起着不同的作用,可以帮助管理员监控数据库的健康状态、优化性能和实现数据的安全备份和恢复。
参考:
【1】 https://zhuanlan.zhihu.com/p/150105821
【2】https://xiaolincoding.com/mysql/log/how_update.html#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%9C%80%E8%A6%81-undo-log
【3】https://javaguide.cn/database/mysql/mysql-logs.html#%E5%89%8D%E8%A8%80
最重要的三个日志: | 作用 |
---|---|
undo log(回滚日志) | 是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和 MVCC。 |
redo log(重做日志) | 是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要==用于掉电等故障恢复 == |
binlog (归档日志) | 是 Server 层生成的日志,主要用于数据备份和主从复制 |
1——undo log(回滚日志)
undo log(回滚日志),它保证了事务的 ACID 特性 (opens new window)中的原子性(Atomicity)。
undo log 两大作用:
- 实现事务回滚,保障事务的原子性。事务处理过程中,如果出现了错误或者用户执 行了 ROLLBACK 语句,MySQL 可以利用 undo log 中的历史数据将数据恢复到事务开始之前的状态。
当进行操作(修改、删除、新增)时,undo log 中会把记录中的内容都记下来,然后执行回滚操作的时候,就读取 undo log 里的数据,比如:
- 在插入一条记录时,要把这条记录的主键值记下来,这样之后回滚时只需要把这个主键值对应的记录删掉就好了;
- 在删除一条记录时,要把这条记录中的内容都记下来,这样之后回滚时再把由这些内容组成的记录插入到表中就好了;
- 在更新一条记录时,要把被更新的列的旧值记下来,这样之后回滚时再把这些列更新为旧值就好了。
<