主从搭建前必须确认主库server_id唯一且非1、log_bin=ON、binlog_format=ROW;从库datadir必须为空;xtrabackup备份需加--slave-info、--no-timestamp或--target-dir,GTID模式还需--gtid。
主从搭建前必须确认的 3 个检查点
不验证这三项,
恢复后大概率从库起不来或数据不一致。
主库
必须唯一且非 1(从库不能和主库相同),
必须为
,否则
会报错或返回空
主库需开启
,
在某些 DDL 场景下会导致从库解析失败,
则无法支持部分函数和 UDF
从库的
必须为空,且不能残留
、
等文件——
的
不会覆盖已有 InnoDB 文件,强行恢复会卡在崩溃恢复阶段
用 xtrabackup 备份时最容易漏掉的参数
只跑
是不够的;缺了关键参数,备份出来的数据无法用于主从搭建。
必须加
:它会在备份目录里生成
,里面包含
所需的
和
必须加
或明确指定
,否则默认按时间戳建子目录,后续
和拷贝容易路径出错
如果主库用了
,还得加
,否则
不会写入
,从库启动后无法自动定位同步位点
示例命令:
恢复到从库后 set global read_only=on 不生效?
这是常见假象——
确实生效了,但复制线程(
)被允许绕过它。真正要防写入的是
。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
只限制普通用户,
权限用户(如复制账号)仍可执行
必须设
,它会同时锁住所有用户(包括拥有
权限的用户),但注意:MySQL 5.7.20+ 才支持该变量,低版本只能靠权限控制
设完别忘了
,否则已有的 SQL 线程可能还在跑旧任务,导致位点错乱
从库启动后 Seconds_Behind_Master 一直为 NULL
不是延迟高,而是复制根本没跑起来。最常卡在两个地方:
中
→ 检查主库网络连通性、复制账号权限(至少需要
)、主库
是否监听了从库可访问的 IP
且
→ 多半是备份时主库有未提交事务,
后残留了部分 binlog event,导致从库重放时主键冲突;此时应清空从库
,重新
并
如果
显示为
且
和
都是
,说明复制已就绪但尚未开始追赶(比如主库当前没新写入),可手动在主库执行
触发一次日志写入观察变化
物理备份恢复主从,最难的从来不是命令怎么敲,而是每一步的“状态是否真的符合预期”——
要逐字段看,
和
在 GTID 模式下必须对得上,差一个字符都会让 START SLAVE 失败。
xtrabackupserver_idlog_binONSHOW MASTER STATUSbinlog_format = ROWMIXEDSTATEMENTdatadiribdata1ib_logfile*xtrabackup--apply-logxtrabackup --backup--slave-infoxtrabackup_slave_infoCHANGE MASTER TOMASTER_LOG_FILEMASTER_LOG_POS--no-timestamp--target-dir--preparegtid_mode = ON--gtidxtrabackup_slave_infoExecuted_Gtid_Setxtrabackup --backup --slave-info --no-timestamp --target-dir=/backup/full --user=backup --password=xxxread_onlySQL_THREADsuper_read_onlyread_only=ONreplication slaveINSERT/UPDATEsuper_read_only=ONSUPERSTOP SLAVE; START SLAVE;SHOW SLAVE STATUS\GSlave_IO_Running: NoREPLICATION SLAVEbind_addressSlave_SQL_Running: NoLast_SQL_Errno: 1062--apply-logdatadir--prepareSTART SLAVESeconds_Behind_MasterNULLSlave_IO_RunningSlave_SQL_RunningYesINSERT INTO test.t1 VALUES (now());SHOW SLAVE STATUSSELECT @@global.gtid_executedSELECT @@global.gtid_purged