1. 为什么MySQL需要三大日志系统?
在数据库系统中,数据安全性和一致性是核心诉求。MySQL通过Binlog、Redo Log和Undo Log三大日志系统的协同工作,实现了事务的ACID特性(原子性、一致性、隔离性和持久性)。这三大日志各司其职又相互配合,构成了MySQL可靠性的基石。
Binlog(二进制日志)主要服务于数据库的复制和恢复场景,记录所有修改数据的SQL语句(或行变更)。Redo Log(重做日志)确保事务的持久性,记录的是物理页面的修改。Undo Log(回滚日志)则保证事务的原子性,记录事务发生前的数据状态。
提示:三大日志的关键区别在于Binlog是Server层实现,而Redo Log和Undo Log是InnoDB存储引擎特有的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Binlog:主从复制的核心
2.1 Binlog的工作原理
Binlog以事件形式记录所有对数据库的修改操作。当启用Binlog后,每个事务提交时,MySQL会将该事务中的所有SQL语句按执行顺序写入Binlog文件。Binlog有三种格式:
- STATEMENT:记录SQL语句原文
- ROW:记录行数据变更前后的内容
- MIXED:混合模式,默认使用STATEMENT,特定场景自动切换为ROW
sql复制-- 查看当前Binlog格式
SHOW VARIABLES LIKE 'binlog_format';
2.2 Binlog的配置与优化
在my.cnf中配置Binlog:
code复制[mysqld]
log-bin=mysql-bin # 启用Binlog
binlog-format=ROW # 推荐使用ROW格式
expire_logs_days=7 # 自动清理7天前的日志
max_binlog_size=100M # 单个文件最大100MB
sync_binlog=1 # 每次事务提交都刷盘
注意:sync_binlog=1会降低性能但能保证数据安全,生产环境建议开启。
2.3 Binlog的实战应用
主从复制配置步骤:
- 主库创建复制账号
sql复制CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATIO
