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

6次阅读

mysql主库必须开启binlog才能实现主从复制,这是硬性前提;需在my.cnf的[mysqld]段配置log_bin、server_id、binlog_format等参数并重启服务,再通过show master status验证是否生效。

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

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

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

确认当前是否已启用binlog

连接MySQL后执行:

SHOW varIABLES LIKE 'log_bin';

如果返回值是OFF,说明没开;返回ONlog_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]段。

text=ZqhQzanResources