MySql日志
类别
二进制日志-binlog
mysql的二进制日志是我们平时最常用的日志,他记录了我们事务中sql语句执行的信息
-
作用:它记录了数据库上的所有改变.
改变数据库的SQL语句执行结束时,将在binlog的末尾写入一条记录,同时通知语句解析器,语句执行完毕 -
位置:
show variables like '%datadir%';
-
常见使用:
1、用于数据库的基于时间点的还原
2、用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步
回滚日志-undolog
逻辑格式的日志,在执行undo的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现的,这一点是不同于redo log的。
- 作用:undo log有两个作用,提供回滚和多个行版本控制(MVCC)。
undo是在事务开始之前保存的被修改数据的一个版本,产生undo日志的时候,同样会伴随类似于保护事务持久化机制的redolog的产生。
- 位置:在5.6mysql以前,和共享表空间文件idb文件在一起,5.6以后可以自行配置
- 常见使用
保证数据的原子性,保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读
重做日志-redo log
重做日志的存在是为了确保事务的持久性。
- 作用:为了平衡io和一致性,引入redolog,实现了最终的数据一致性
物理格式的日志,记录的是物理数据页面的修改的信息,其redo log是顺序写入redo log file的物理文件中去的。
- 位置
默认情况下,对应的物理文件位于数据库的data目录下的ib_logfile1&ib_logfile
innodb_log_group_home_dir 指定日志文件组所在的路径,默认./ ,表示在数据库的数据目录下
innodb_log_files_in_group 指定重做日志文件组中文件的数量,默认2 - 常见使用:
通过以下三种方式将innodb日志缓冲区的日志刷新到磁盘👇
Master Thread 每秒一次执行刷新Innodb_log_buffer到重做日志文件
每个事务提交时会将重做日志刷新到重做日志文件
当重做日志缓存可用空间 少于一半时,重做日志缓存被刷新到重做日志文件