mysql如何设置主库写入binlog_配置步骤说明

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

MySQL主库必须开启binlog才能做主从复制

不开启

binlog
,主库根本不会记录任何数据变更日志,从库连日志都拉不到,主从同步直接失效。这不是可选项,是硬性前提。

确认当前是否已启用binlog

连接MySQL后执行:

SHOW VARIABLES LIKE 'log_bin';
如果返回值是
OFF
,说明没开;返回
ON
log_bin_basename
有路径,才算真正启用。

log_bin
变量只反映“是否允许写入”,但实际是否生效还取决于配置文件里有没有正确设置
仅靠
SET GLOBAL log_bin = ON;
是无效的——该变量是只读的,必须改配置文件后重启
有些云数据库(如阿里云RDS)默认开启且不允许关闭,但自建MySQL几乎都需要手动配

my.cnf中必须设置的binlog相关参数

编辑

/etc/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
,在
[mysqld]
段落下添加以下几项:

log_bin = /var/lib/mysql/mysql-bin
—— 指定binlog基础文件名(注意路径要有写权限)
server_id = 1
—— 主库唯一ID,主从集群中不能重复(从库要设为其他整数)
binlog_format = ROW
—— 强烈建议用
ROW
格式,避免语句级复制的不确定性问题
expire_logs_days = 7
—— 自动清理7天前的binlog,防止磁盘打满(可选但推荐)

改完必须重启MySQL:

systemctl restart mysqld
(或
service mysql restart
),否则不生效。

验证binlog是否正常写入

重启后立即检查:

执行
SHOW MASTER STATUS;
,应看到非空的
File
(如
mysql-bin.000001
)和非零
Position
log_bin
指定路径下确认文件已生成:
ls -l /var/lib/mysql/mysql-bin.*
执行一条INSERT或UPDATE,再查
SHOW MASTER STATUS;
Position
值应明显增大

常见坑:SELinux或AppArmor阻止MySQL往指定路径写文件;

log_bin
路径目录不存在或权限不对;配置写在
[client]
段而非
[mysqld]
段。

相关推荐