关于Mysql binlog的面试理解
什么是binlog?
binlog是mysql服务中记录数据变更的二进制文件,它的模式可以分为3种,第一种是记录行数据变更,第二种是记录变更的sql,第三种就是混合模式,由mysql来判断它自己使用那种方式,比如记录表结构的变更,通常使用的是sql,记录某行数据变更,使用的就是行数据变更。
个人推荐使用行数据变更模式,虽然它会产生大量的日志数据,但是准确度高,sql模式会在5.0以前的版本有大量的复制bug
binlog能干什么?换句话说,它的应用场景是什么?
1.数据恢复,在我们不小心误删除了表或者数据时,使用数据库的全量备份和binlog日志,可以进行数据恢复 2.主从同步,通过读取binlog数据,可以进行数据的复制,或者根据具体业务来进行一些业务操作,比如任务分发 3.安全审计,binlog作为日志文件,记录了数据库数据的改变,可以从数据是否有异常变化,来判断是否有被攻击。
binlog需要注意的地方
1.在使用mysql的innodb 引擎时,mysql采用了两段式提交方案来解决数据一致性和性能问题。
保存数据到内存——》写redolog日志(Prepare阶段)——》写binlog日志——》提交事务(Commit阶段)
Prepare阶段:将undo设置为Prepared状态,将产生的redolog刷入磁盘,binlog不做操作 Commit阶段:将产生的binlog刷入磁盘,设置undo为Commit状态,释放资源,清理回滚段
2.在使用binlog进行主从同步时,大事务有可能会导致数据产生很高的延迟,于是就需要注意一个问题,binlog的定时清理时间的设置,如果设置的时间不合适的话,会导致binlog还未传到从库便因过期而删除,导致主从不一致。