推荐答案
MariaDB 的二进制日志格式主要有以下三种:
- STATEMENT:记录 SQL 语句本身。
- ROW:记录每一行数据的变更。
- MIXED:结合了 STATEMENT 和 ROW 两种格式,根据具体情况自动选择。
本题详细解读
1. STATEMENT 格式
- 特点:记录的是 SQL 语句本身,而不是实际的数据变更。
- 优点:日志文件较小,占用空间少。
- 缺点:在某些情况下,可能会导致主从复制不一致,例如使用了不确定性的函数(如
NOW()
、RAND()
等)。
2. ROW 格式
- 特点:记录每一行数据的变更,而不是 SQL 语句。
- 优点:能够确保主从复制的一致性,特别是在使用了不确定性函数的情况下。
- 缺点:日志文件较大,占用空间多,尤其是在批量更新或删除操作时。
3. MIXED 格式
- 特点:结合了 STATEMENT 和 ROW 两种格式,MariaDB 会根据具体情况自动选择最合适的格式。
- 优点:在大多数情况下,能够兼顾日志文件的大小和主从复制的一致性。
- 缺点:在某些复杂场景下,可能仍然需要手动调整日志格式。
如何选择日志格式
- STATEMENT:适用于 SQL 语句简单且不涉及不确定性函数的场景。
- ROW:适用于需要确保主从复制一致性的场景,特别是涉及不确定性函数或复杂 SQL 语句的情况。
- MIXED:适用于大多数场景,能够自动平衡日志文件大小和复制一致性。
设置日志格式
可以通过以下 SQL 语句设置二进制日志格式:
SET GLOBAL binlog_format = 'STATEMENT'; SET GLOBAL binlog_format = 'ROW'; SET GLOBAL binlog_format = 'MIXED';
或者在配置文件中设置:
[mysqld] binlog_format = MIXED
查看当前日志格式
可以通过以下 SQL 语句查看当前的二进制日志格式:
SHOW VARIABLES LIKE 'binlog_format';