MySQL InnoDB底层原理与MySQL日志机制
binlog:
binlog二进制日志记录了所有执行过的修改操作语句,不保存查询操作。如果MySQL服务意外停止,可通过二进制日志文件排查,用户操作或表结构操作,从而来恢复数据库数据。
启用binlog记录功能,会影响服务器性能,如果需要恢复数据或主从复制功能,则好处则大于对服务器的影响。
#查看binlog相关参数
show variables like '%log_bin%';


MySQL5.7版本中,binlog默认关闭。8.0版本默认打开。
修改配置文件my.ini(windows)或者my.cnf(linux),重启数据库。

binlog日志格式:
参数 binlog_format:
STATEMENT:基于SQL语句的复制,每一条SQL都会记录到master机器的bin-log中,性能高,但一些uuID(),sysdate()函数,同步到slave中时,值会跟master不一样。
ROW:基于行的复制,记录每一行数据被修改的形式,然后在slave段再对相同的数据进行修改记录下每一行数据修改的细节,可以解决函数,存储过程在slave机器复制问题,日志量较大,性能较STATEMENT小。update语句更新10行数据,STATEMENT是记录这条update语句,ROW会记录被修改的10行数据。
MIXED:混合复制模式,mysql根据每条具体的SQL来区分对待记录的日志形式,从STATEMENT和ROW中选择一种,如果sql中有一些需要再执行时才知道结果的情况,就选择ROW,否则就选择STATEMENT。推荐使用。
binlog日志写入:
追加写:文件写满后切换新文件,不覆盖旧日志
binlog的刷盘策略:
sync_binlog
=1:每次事务提交都刷盘(保证主从不丢数据)。
=0:默认,依赖 OS 刷盘(性能高,但操作系统宕机可能丢失数据)
=N:
使用binlog进行数据恢复,必须在已备份的库基础上进行恢复。
mysqlbinlog --no-defaults --start-position=219 --stop-position=1000 --database=test D:/app_install/mysql-5.6.51-winx64/data/000025-bin.000001 | mysql -uroot -proot -v test
自动删除的天数比如配置了15,那么15天之内,必须有全量备份的数据库,要不然完成不了数据库恢复。









