简介
Binlog:也称二进制日志,是 MySQL 最重要的日志,记录所有数据库表结构变更(如 CREATE
、ALTER TABLE
)以及表数据修改(如 INSERT
、UPDATE
、DELETE
),不会记录 SELECT
和 SHOW
这类操作,主要作用:复制(主从同步)、恢复和审计。
日志格式 | 记录说明 | 优点 | 缺点 |
---|---|---|---|
STATEMENT |
记录的是修改 SQL 语句 |
日志文件小,节约 IO |
准确性差,一些系统函数不能准确复制 |
ROW |
记录的是每行实际数据的变更 | 准确性强,能准确复制数据的变更 | 文件日志大,较大的磁盘和网络 IO |
MIXED |
以上两种模式的混合 | 准确性强,文件大小适中 | 有可能发生主从不一致问题 |
配置参数
1 | [mysqld] |
参数 | 含义 |
---|---|
log_bin = { on | off | base_name } | 指定是否启用二进制日志或者指定一个日志路径 |
binlog_format = { mixed | row | statement } | 指定二进制日志格式 |
expire_logs_days | 指定二进制日志过期时间 |
sql_log_bin = { on | off } | 指定是否启用记录二进制日志 |
log_bin_index | 指定 mysql-bin.index 文件路径 |
max_binlog_size | 指定二进制日志文件最大值 |
binlog_cache_size | 指定事务日志缓存区大小 |
max_binlog_cache_size | 指定二进制日志缓存最大值 |
sync_binlog = { 0 | n } | 指定写缓冲多少次,刷一次盘 |
操作
- 查看 binlog:mysqlbinlog
- 删除 binlog
1 | # 手工删除 |
问题
- MySQL · 案例分析 · 大事务导致 binlog 暴增
- MySQL · 案例分析 · 未设置过期时间导致 binlog 堆积