面试题答案
一键面试在MariaDB中,binlog_format
参数有以下取值:
- STATEMENT
- 数据记录方式:记录的是SQL语句原文。例如执行
UPDATE users SET age = age + 1 WHERE name = 'John';
,binlog中就记录这条SQL语句。 - 应用场景:
- 优点:日志量相对较小,因为只记录语句而非每行数据的变化。适用于简单的数据库操作场景,如对数据进行批量的、基于条件的修改等。在这种场景下,通过记录语句能高效地恢复数据。
- 缺点:在一些情况下可能导致数据不一致。比如执行依赖于服务器状态(如
NOW()
函数获取当前时间)的SQL语句,在主从复制时,从库执行该语句获取的时间和主库可能不同,因为执行时间有差异。
- 数据记录方式:记录的是SQL语句原文。例如执行
- ROW
- 数据记录方式:记录的是每行数据的实际变化。例如上述
UPDATE
语句,binlog会记录修改前users
表中满足name = 'John'
的行数据,以及修改后的行数据。 - 应用场景:
- 优点:能非常准确地记录数据变化,在主从复制中,从库按照记录的行数据变化进行应用,能最大程度保证主从数据的一致性。适合对数据一致性要求极高的场景,如金融交易相关的数据修改。
- 缺点:日志量较大,因为每行数据变化都要记录,存储空间需求大,并且写入binlog的性能开销相对较高。
- 数据记录方式:记录的是每行数据的实际变化。例如上述
- MIXED
- 数据记录方式:结合了
STATEMENT
和ROW
两种模式。MariaDB会自动判断SQL语句是否适合用STATEMENT
模式记录,如果适合则用STATEMENT
,否则用ROW
。例如对于使用了不确定函数(如NOW()
)的语句,会采用ROW
模式记录;而对于一些简单的、不依赖服务器状态的语句则采用STATEMENT
模式记录。 - 应用场景:
- 优点:试图在保证数据一致性的同时,尽量减少日志量。在大多数场景下能提供较好的平衡,既保证数据可靠复制,又不过度增加日志量。
- 缺点:判断何时使用何种模式可能存在一定复杂性,并且在某些极端情况下,可能无法完全避免一致性问题或日志量过大问题。
- 数据记录方式:结合了