MySQL中的日志比较重要的有binlog(归档日志)、redolog(重做日志)以及undolog,那么跟我们本文相关的主要是binlog,另外两个日志松哥将来有空了再和大家详细介绍。
1.binlogbinlog我们中文一般称作归档日志,如果大家看过松哥之前发的MySQL主从搭建,应该对这个日志有印象,当我们搭建MySQL主从的时候就离不开binlog(传送门:MySQL8主从复制踩坑指南)。
binlog是MySQLServer层的日志,而不是存储引擎自带的日志,它记录了所有的DDL和DML(不包含数据查询语句)语句,而且是以事件形式记录,还包含语句所执行的消耗的时间等,需要注意的是:
binlog是一种逻辑日志,他里边所记录的是一条SQL语句的原始逻辑,例如给某一个字段+1,注意这个区别于redolog的物理日志(在某个数据页上做了什么修改)。binlog文件写满后,会自动切换到下一个日志文件继续写,而不会覆盖以前的日志,这个也区别于redolog,redolog是循环写入的,即后面写入的可能会覆盖前面写入的。一般来说,我们在配置binlog的时候,可以指定binlog文件的有效期,这样在到期后,日志文件会自动删除,这样避免占用较多存储空间。根据MySQL官方文档的介绍,开启binlog之后,大概会有1%的性能损耗,不过这还是可以接受的,一般来说,binlog有两个重要的使用场景:
MySQL主从复制时:在主机上开启binlog,主机将binlog同步给从机,从机通过binlog来同步数据,进而实现主机和从机的数据同步。MySQL数据恢复,通过使用mysqlbinlog工具再结合binlog文件,可以将数据恢复到过去的某一时刻。2.配置binlog为了演示方便,松哥这里在Docker中安装了MySQL,我们以此为例来开始今天的演示。如果小伙伴们还不懂docker的使用,可以在