在数据同步和备份策略中,将阿里云 RDS 配置为主库,自建数据库配置为从库是一个常见的做法。这种配置可以利用云服务的高可用性和可扩展性,同时保持自建数据库的备份和冗余。本文将详细介绍如何实现这一配置,包括所需的步骤和注意事项。

1. 准备工作

在开始之前,请确保以下条件已满足:

  • 阿里云 RDS 实例:已创建并配置好,并且具备主库的功能。(版本:5.7.43-log)
  • 自建数据库:已安装并运行,并且能够访问。
  • 网络配置:确保阿里云 RDS 和自建数据库之间的网络连接畅通。(RDS设置了白名单,应将自建数据库的IP地址添加上)
2. 配置阿里云 RDS 实例
  1. 登录阿里云控制台
  • 访问 阿里云控制台
  1. 选择 RDS 实例
  • 导航到 RDS 控制台,选择你作为主库的 RDS 实例。
  1. 配置参数
  • 确保 RDS 实例的 binlog_format 设置为 ROW(行级日志),因为这是支持主从同步的必要配置。
  • 数据库参数 设置中,启用 gtid_mode 并设置为 ON,这是 GTID(全局事务标识符)模式的配置。
  • RDS 实例的 master_info_repository 设置为 TABLE
  • RDS 实例的 relay_log_info_repository' 设置为 TABLE
  1. 创建同步用户
  • 在 RDS 实例中创建一个用于从库连接的同步用户:
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION MASTER ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
  • 1.
  • 2.
  • 3.
  1. 获取主库的二进制日志文件和位置
  • 执行以下命令获取当前的二进制日志文件和位置:
SHOW MASTER STATUS;
  • 1.
3. 配置自建数据库
  1. 开启二进制日志
  • 编辑自建数据库的 my.cnf 配置文件,启用二进制日志和 GTID 模式:
  • 设置需要同步的数据库。test
[mysqld]
log-bin=mysql-bin
gtid-mode=ON
enforce-gtid-consistency=ON
binlog-format=row

replicate-do-db=test

replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=mysql
replicate-ignore-db=sys
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  1. 重启数据库
  • 保存更改并重启数据库以应用新的配置:
sudo systemctl restart mysql
  • 1.

  我的服务器是安装的lnmp一键安装,用这句命令。

lnmp mysql restart
  • 1.
  1. 配置从库
  • 连接到自建数据库,配置其作为从库并连接到阿里云 RDS:
CHANGE MASTER TO
  MASTER_HOST='阿里云 RDS 的 IP 地址',
  MASTER_PORT=3306,
  MASTER_USER='repl_user',
  MASTER_PASSWORD='password',
  MASTER_LOG_FILE='mysql-bin.000001',  -- 从 RDS 获取 SHOW MASTER STATUS;
  MASTER_LOG_POS=154;                 -- 从 RDS 获取
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  1. 启动复制
  • 启动自建数据库上的复制进程:
START SLAVE;
  • 1.
  1. 检查复制状态
  • 确保复制进程正常运行,没有错误:
SHOW SLAVE STATUS\G;
  • 1.
4. 验证和维护
  • 验证同步
  • 在阿里云 RDS 实例上创建一些测试数据,然后在自建数据库上检查这些数据是否被同步。
  • 监控复制状态
  • 定期检查 SHOW SLAVE STATUS 输出,确保没有错误并且 Slave_IO_RunningSlave_SQL_Running 状态为 Yes
  • 处理错误
  • 如果出现错误,可以根据错误信息采取相应的措施,例如跳过错误、修复数据不一致等。
  • 可能的错误:主库某个表有那一条记录,而从库没有那条记录,当进行更新时,从库找不到这一条记录。原因是,从库在开始执行同步时,表中的记录与主库没有一致。在从主库导出sql后,应该记录主库的记录状态,即:show master status;

阿里云 RDS 作为主库,自建数据库作为从库的同步指南_数据库

  • 实际案例

两个Yes,Yes,同步正常:

阿里云 RDS 作为主库,自建数据库作为从库的同步指南_mysql_02

修改表结构和增加表也同步过来了。

最开始,只有一张表user, 字段值:uid,last_login_time.

主库增加了字段login_count,  又增加了一张表,_article. 

阿里云 RDS 作为主库,自建数据库作为从库的同步指南_mysql_03

6. 总结

将阿里云 RDS 作为主库,自建数据库作为从库的配置,可以实现数据的高可用性和冗余,同时享受云服务带来的灵活性和扩展性。通过本文提供的步骤,你可以顺利完成主从库的同步配置,并在实际运行中保持监控和维护,以确保系统的稳定性和数据一致性。

如果你在配置过程中遇到问题或有其他问题需要解决,请随时与我联系。希望这篇指南对你有所帮助!