作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL(本章节)
PostgreSQL
Redis
Etcd
我们在前面在介绍中间件:ZooKeeper介绍过事务日志,在MYSQL里面其实有类似的东西,但是他们的功能并不相同。
二进制日志(Binary Log)是 MySQL 服务层创建的一种逻辑日志,它记录了对 MySQL 数据库执行的所有更改数据的操作(DDL 和 DML),但不包括 SELECT 和 SHOW 这类不修改数据的操作。
它以二进制的、序列化的形式存储在磁盘上,是数据恢复、主从复制(Replication)等功能的核心基础。
核心特点:
Binlog 有三种记录格式,这直接影响复制的行为和数据的安全性。可以通过 binlog_format 参数进行设置。
格式 | 描述 | 优点 | 缺点 |
|---|---|---|---|
STATEMENT (SBR) | 基于SQL语句的复制。记录的是执行的原始SQL语句。 | 日志文件小,节省磁盘和网络I/O。 | 不安全。某些语句(如 NOW(), RAND(), UUID())在主从执行结果可能不一致。 |
ROW (RBR) | 基于行的复制。记录的是每一行数据被修改后的内容(或修改前的内容)。 | 最安全。能绝对保证主从数据一致性。 | 日志文件大(例如一条 UPDATE 更新了100万行,STATEMENT 只记1条语句,而 ROW 会记录100万行变化)。 |
MIXED (MBR) | 混合模式复制。默认使用 STATEMENT,但在可能引起主从不一致的情况下,自动切换为 ROW 格式。 | 在安全性和性能之间取得平衡。 | 仍有极小的概率在某些复杂情况下出现问题。 |
强烈推荐: 在现代 MySQL 版本(5.7+,8.0+)中,默认并且强烈建议使用 ROW 格式,因为它提供了最强的数据一致性保证,这是数据安全最重要的考量。