面试题答案
一键面试binlog日志在数据库一致性校验方面的作用
- 数据恢复与灾难恢复:当数据库发生故障(如崩溃、硬件故障等)后,通过重放binlog日志,可以将数据库恢复到故障前的某一状态,确保数据的一致性。例如,在崩溃恢复时,系统可以根据binlog中记录的事务操作,重新执行未完成的事务,保证数据的完整性。
- 主从复制:在主从复制架构中,主库将binlog日志发送给从库,从库通过重放这些日志来保持与主库的数据一致性。这使得多个从库可以实时复制主库的数据,实现数据的分布式存储和读写分离,同时保证各个节点数据的一致性。
binlog日志实现机制
- 记录时机:binlog采用“写时复制”(Copy - on - Write)机制,在事务进行过程中,并不立即写入binlog,而是在事务提交时,将该事务的所有操作记录一次性写入binlog。这样可以保证事务的原子性,即要么事务所有操作都成功记录到binlog,要么都不记录。
- 格式:binlog有两种主要格式,Statement格式和Row格式。Statement格式记录的是SQL语句,这种方式记录简单,但可能在不同环境下重放出现数据不一致问题。Row格式则记录每一行数据的修改,能更准确地保证数据一致性,不过日志量相对较大。
- 刷盘策略:MariaDB通过sync_binlog参数控制binlog刷盘的频率。sync_binlog = 0 表示由操作系统决定何时将binlog缓冲区的数据刷入磁盘,性能最高但故障时可能丢失部分binlog。sync_binlog = 1 表示每次事务提交都将binlog刷入磁盘,能最大程度保证数据一致性,但会有一定性能开销。其他大于1的值表示每执行n次事务提交才刷盘一次,在性能和数据安全性之间取得平衡。