跨区域MySQL主从复制可行但需规避公网直连、DNS解析延迟和防火墙策略;必须禁用skip_name_resolve、绑定公网IP、使用mysql_native_password认证,并配置max_binlog_size、slave_net_timeout及relay_log_recovery等参数保障稳定性。

云服务器 ECS 上跨区域 MySQL 主从复制能做,但必须绕开公网直连、DNS 解析延迟和防火墙策略这三道坎;直接填公网 IP + 开放 3306 端口是最常见失败原因。
为什么不能直接用公网 IP 配置 MASTER_HOST
跨区域(比如华东1 → 华北2)ECS 之间默认不互通内网,若主库在华东1、从库在华北2,两者公网 IP 虽可通,但:
• MySQL 的 CHANGE MASTER TO 会尝试反向解析从库主机名(除非显式禁用),而跨区域 DNS 不一致或超时会导致 Connecting 卡死
• 阿里云/腾讯云等平台对公网 3306 端口有主动限流或拦截策略,连接可能被随机中断
• 没有 TLS 加密时,binlog 传输明文暴露风险极高
无序列表:
• 必须关闭主从双方的 skip_name_resolve=ON(写进 my.cnf 的 [mysqld] 段)
• 主库需绑定 0.0.0.0 或具体公网 IP,并确认安全组放行 3306 入方向(仅限从库公网 IP)
• 从库连接主库时,MASTER_HOST 必须填主库**实际可达的公网 IP**,不能填域名或内网地址
• 强烈建议主库创建账号时用 mysql_native_password 插件(MySQL 8.0 默认的 caching_sha2_password 在跨网络握手时易超时)
如何让 binlog 传输在跨区域链路上稳定
公网带宽波动、TCP 重传、MTU 不一致都会导致 relay log 中断或错位。关键不是“能不能传”,而是“断了之后怎么续”。
无序列表:
• 主库配置中必须加 max_binlog_size=100M(避免单个 binlog 过大,降低传输失败概率)
• 从库配置中加 slave_net_timeout=60(默认 3600 秒太长,网络抖动后恢复慢)
• 启用 relay_log_recovery=ON(从库崩溃重启后自动丢弃损坏 relay log 并重拉)
• 不要设 binlog-do-db —— 跨区域场景下数据库名大小写、字符集微小差异易引发过滤漏同步
从库启动复制时 MASTER_LOG_POS 总是报错
报错典型如 Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file',本质是主库 binlog 文件已被清理,或从库记录的位置已失效。
无序列表:
• 执行 SHOW MASTER STATUS 前,先在主库运行 FLUSH LOGS,确保当前 binlog 处于活跃写入状态
• 记录 File 和 Position 后,立即导出主库快照(mysqldump --single-transaction --master-data=2),再把 dump 导入从库,避免位置漂移
• 若主库已有数据且未提前锁表,不要依赖 SHOW MASTER STATUS 的瞬时值,改用 dump 输出里的 CHANGE MASTER TO 语句(它自带精确坐标)
• 从库执行 CHANGE MASTER TO 后,务必检查 Seconds_Behind_Master 是否为 NULL(表示 IO 线程未启动)或 0(正常)
验证复制是否真正生效的硬指标
只查 SHOW SLAVE STATUS\G 里的 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes 不够——跨区域链路下,SQL 线程可能卡在某条 DDL 上长时间不动。
无序列表:
• 在主库执行 INSERT INTO test_replica (ts) VALUES (NOW());(建个最小测试表)
• 等待 5 秒后,立刻在从库查 SELECT * FROM test_replica ORDER BY ts DESC LIMIT 1;,比对时间戳误差是否 • 查 SHOW SLAVE STATUS\G 中的 Exec_Master_Log_Pos,对比主库当前 Position,差值应 • 如果 Seconds_Behind_Master 长期 > 60,优先检查从库磁盘 I/O(iostat -x 1)而非网络
跨区域主从最脆弱的环节不在配置,而在 binlog 传输中途被运营商劫持重置 TCP 连接——所以永远不要省略 relay_log_recovery=ON 和定期校验 Exec_Master_Log_Pos 偏移量。


















