MySQL Binlog 日志的三种格式详解
warning:
这篇文章距离上次修改已过326天,其中的内容可能已经有所变动。
MySQL的二进制日志(binlog)记录了所有影响数据库数据变更的语句,用于复制和数据恢复。binlog有三种格式:STATEMENT、ROW和MIXED。
- STATEMENT格式:每一条会修改数据的SQL语句会记录在binlog中。
-- 查看当前的binlog_format
SHOW GLOBAL VARIABLES LIKE 'binlog_format';
-- 设置binlog_format为STATEMENT
SET GLOBAL binlog_format = 'STATEMENT';
- ROW格式:不记录SQL语句的上下文相关信息,仅记录哪条数据被修改了。
-- 查看当前的binlog_format
SHOW GLOBAL VARIABLES LIKE 'binlog_format';
-- 设置binlog_format为ROW
SET GLOBAL binlog_format = 'ROW';
- MIXED格式:结合了STATEMENT和ROW的特点,根据语句自动选择记录格式。
-- 查看当前的binlog_format
SHOW GLOBAL VARIABLES LIKE 'binlog_format';
-- 设置binlog_format为MIXED
SET GLOBAL binlog_format = 'MIXED';
在实际应用中,选择哪种格式通常取决于特定需求,如是否需要精确恢复数据以及是否关心数据变更的语句精确度。STATEMENT格式可能导致复制过程中的主从不一致,而ROW格式可能导致binlog文件过大。MIXED格式既保证了数据的准确性又尝试减小了binlog文件的大小。
评论已关闭