mysql如何配置binlog和redo log_mysql日志记录配置

来源:这里教程网 时间:2026-02-28 20:50:23 作者:

binlog 开启与格式设置必须改
my.cnf
并重启

MySQL 的 binlog 默认关闭,不改配置文件、不重启服务,光执行 SQL 是开不了的。关键配置项有三个:

log-bin
(启用并指定路径)、
binlog-format
(推荐
ROW
)、
server-id
(主从必需,非 0 整数)。例如:

log-bin = /var/lib/mysql/mysql-bin
binlog-format = ROW
server-id = 1

注意:

log-bin
值不能是相对路径或纯文件名(如
mysql-bin
),否则 MySQL 启动会失败并报错
Failed to open log file
server-id
在单机也得设,否则某些备份工具(如 mydumper)会拒绝连接。

redo log 不可动态关闭,大小和数量靠
innodb_log_file_size
innodb_log_files_in_group

redo log 是 InnoDB 引擎级日志,由固定大小的物理文件组成(默认 2 个 × 48MB),它不像 binlog 那样能用 SQL 开关。调整大小必须停库、删旧文件、改配置、再启动。常见误操作是只改

innodb_log_file_size
就启动,结果 MySQL 直接拒绝启动,并报错
InnoDB: Error: log file ./ib_logfile0 is of different size

安全调整步骤:

先执行
SET GLOBAL innodb_fast_shutdown = 0
,确保脏页刷盘
正常关闭 mysqld 删除
ib_logfile0
ib_logfile1
(路径由
datadir
决定)
修改
my.cnf
中的
innodb_log_file_size
(如设为
256M
重启服务,InnoDB 会自动重建新大小的日志文件

binlog 和 redo log 混用场景下要注意刷盘策略冲突

两者都涉及持久化,但控制开关不同:binlog 刷盘靠

sync_binlog
(设为 1 表示每次事务提交都 fsync),redo log 靠
innodb_flush_log_at_trx_commit
(1 = 每次提交都刷盘)。若两者都设为 1,写性能明显下降,尤其在高并发小事务场景;若设为 0 或 2,则存在 crash 后最多丢失 1 秒数据的风险。

生产环境常见折中配置:

sync_binlog = 1
+
innodb_flush_log_at_trx_commit = 1
:强一致性,适合金融类系统
sync_binlog = 1000
+
innodb_flush_log_at_trx_commit = 2
:兼顾性能与可用性,适用于大部分 Web 应用

别忽略磁盘本身:即使参数设为 1,如果底层是带写缓存但未启用电池/电容保护的 RAID 卡,仍可能丢日志。

查看当前日志状态优先用
SHOW VARIABLES
SHOW MASTER STATUS

验证配置是否生效,不要只看配置文件。运行中检查 binlog 是否开启,执行:

SHOW VARIABLES LIKE 'log_bin'; -- 返回 ON 才算真开了

查当前 binlog 文件和位置:

SHOW MASTER STATUS;

查 redo log 状态,主要看:

SHOW VARIABLES LIKE 'innodb_log%';

特别注意

innodb_log_file_size
innodb_log_files_in_group
的值是否与配置一致;
innodb_log_buffer_size
影响的是内存缓冲区,调太大反而浪费,一般 8–16MB 足够。

线上改日志配置前,务必确认备份完整、有回滚方案——redo log 文件删错或大小配错,MySQL 就起不来。

相关推荐