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

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]段落下添加以下几项:
发卡宝是一个专业的软件卡密等虚拟商品在线交易平台,拥有多种兑换方式,费率低,结算快,正规企业平台一直稳定运营,24小时不间断提供自动发卡服务。【模板说明】试用版自带一套模板(响应式)【环境支持】PHP环境 / 200M或以上空间大小 / 开启父路径 / 设置index.php为默认首页 / 目录写入权限需要开启【数据库】MySQL【安装步骤】将文件上传至空间目录,运行“http://域名/inst
-
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]段。









