如何配置云服务器的MySQL主从复制?

常见问题

如何配置云服务器的MySQL主从复制?

2025-03-31 23:41



标签:
  • MySQL主从复制
  • 云服务器配置
  • 数据库高可用性
  • 莱卡云

在当今数据驱动的时代,MySQL主从复制技术已成为保障数据库高可用性的标配方案。本文将为您详细解析在云服务器环境下配置MySQL主从复制的完整流程,特别针对阿里云、腾讯云等主流云平台的特殊设置进行重点说明。

🔧 前期准备工作

  1. 服务器准备:建议主从服务器配置相同版本MySQL(推荐5.7+)
  2. 网络配置:确保主从服务器间3306端口互通(云服务器需配置安全组规则)
  3. 权限准备:主库需要具有REPLICATION SLAVE权限的账号
# 创建复制账号示例
CREATE USER 'repl'@'%' IDENTIFIED BY 'SecurePass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

⚠️ 云平台特殊注意事项

  • 阿里云RDS如需配置外部的从库,需先开通外网地址
  • 腾讯云CVM默认禁用bind-address,需手动修改my.cnf配置
  • 华为云需要额外配置安全组入方向规则

📝 主库配置详解

1. 修改my.cnf配置文件

[mysqld]
server-id = 1           # 必须唯一
log_bin = mysql-bin     # 开启二进制日志
binlog_format = ROW     # 推荐使用ROW格式
binlog_do_db = 需要复制的数据库名 # 可选配置

2. 重启MySQL服务

systemctl restart mysqld

3. 锁定数据库并获取位置信息

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;  # 记录File和Position值

🔄 从库配置流程

1. 修改从库my.cnf

[mysqld]
server-id = 2  # 必须与主库不同
relay_log = /var/lib/mysql/mysql-relay-bin
read_only = 1  # 建议开启只读模式

2. 设置复制通道

CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='SecurePass123!',
MASTER_LOG_FILE='mysql-bin.000001',  # 主库show master status结果
MASTER_LOG_POS=120;  # 主库show master status结果

3. 启动复制进程

START SLAVE;
SHOW SLAVE STATUS\G  # 检查Slave_IO_Running和Slave_SQL_Running状态

💡 专家级优化建议

参数 推荐值 说明
sync_binlog 1 确保binlog及时落盘
slave_parallel_workers 4-8 提升从库复制性能
binlog_group_commit_sync_delay 100 适当合并提交提升性能

🔍 常见问题排查

Q: 从库显示Slave_IO_Running=Connecting
▶️ 检查:网络连通性、账号权限、防火墙设置
Q: 出现1236错误(Got fatal error)
▶️ 解决方法:重新获取主库位点信息,使用CHANGE MASTER TO重置
Q: 主从数据不一致
▶️ 推荐工具:pt-table-checksum + pt-table-sync

🎯 总结

通过本文详细的步骤指导,您应该已经成功在云服务器上建立了MySQL主从复制环境。记得定期检查复制状态,建议设置监控告警(如使用Prometheus+Granfa)。对于生产环境,推荐考虑更高级的GTID复制组复制方案。

需要更详细的MySQL优化指南?点击订阅我们的数据库周刊

` content = content.indexOf('') > 0 ? content.replace('', `${viewstyle}`) : `${content}${viewstyle}` const iframe = document.querySelector('#viewcontent') const viewdoc = iframe.contentDocument viewdoc.open() viewdoc.write(content) viewdoc.close() iframe.height = viewdoc.body.scrollHeight + 20 })