前言
MySQL中常见的日志:
-
重做日志(Redo Log):
用途: 保证事务的持久性,记录事务对数据库所做的所有修改。
内容: 记录事务对数据页的物理修改,而不是逻辑修改。
配置: 配置文件中设置 innodb_log_group_home_dir 和 innodb_log_files_in_group 参数。 -
撤销日志(Undo Log):
用途: 保证事务的原子性,用于事务的回滚和 MVCC 实现。
内容: 记录事务对数据页的逻辑修改,以支持事务的回滚。
配置: 通常无需人工配置,由存储引擎自动管理。 -
二进制日志 (Binary Log):
用途:记录对数据库的修改操作,用于主从复制,点播恢复等
内容:记录了对数据库执行的所有修改操作的语句或者原始二进制数据。
配置:通过配置文件或动态设置 log_bin
参数启用。
1. Redo Log 重做日志
重做日志保存的是事务提交时的物理修改,是用来实现事务的持久性的。
它由两部分组成:redo log buffer(重做日志缓冲区), redo log file(重做日志文件)
前者是在内存中的,后者是在磁盘中的。
当执行 Update, Delete 操作时,会先在一个叫 Buffer Pool 的mysql的缓存池里面进行更新数据,但是Buffer Pool 不会立马把数据刷新到磁盘,因为更新和删除操作时,会操作随机的数据页,也就是会进行随机磁盘IO,这样效率是很低的。所以就会先把修改记录写到redo log buffer中,事务提交的时候,会把redo log buffer中的数据刷新到磁盘中的redo log file中,这样即使Buffer Pool刷新脏页数据到磁盘的过程中发生错误,也能根据redo log buffer进行数据恢复。
2. Undo Log 回滚日志
回滚日志用于记录数据修改前的信息,并能提供数据的回滚,也是mvcc中的一个组成部分。
比如,如果你进行了一个 Update操作,那么会在日志里面记录一条相反的Update操作,如果你进行了一个Delete操作, 那么会在日志里记录一条对应的Insert操作。
3. bin Log 二进制日志
记录的是对数据库执行的所有增删改操作(不包括查询),但是是逻辑日志.它一般用于主从复制和点播恢复等。
他有三种日志格式,如下:
在ROW格式下,会记录每次修改前后的行数据记录,而在STATEMENT格式下,会记录每次修改的sql语句。
同时,要想删除日志,也可以使用以下的命令: