云上RDS MySQL + 云下自建MySQL类主从创建

1. AWS RDS作为主库,自建MySQL为从库,建立master-slave架构:

提前配置并测试本地数据库和RDS所在VPC,子网之间的网络连通性,确保我们班可以通过RDS的endpoint连接到数据库,并提前在RDS中创建我们本地从库所使用的user,赋予相应的权限(grant replication slave)。建议尽量设置从库的版本与主库相同,或者从库的版本高于主库。

1.1 RDS MySQL的binlog是通过开启自动备份的方式开启,请确认RDS自动备份保留期为大于0的天数。

同时,为保证在配置master-slave期间binlog在RDS内保留足够的时长,请运行如下语句进行配置[1]:
call mysql.rds_set_configuration('binlog retention hours', 3);   //--> 将binlog在RDS内保留3小时(或者更多)

1.2 请在RDS内运行 show master status; 并记录此时的binlog 信息

1.3 请通过mysqldump的方式,将RDS内的业务数据库进行export, 而后import进自建MySQL数据库

1.4 可以在本地库中通过如下指令配置master-slave连接:

mysql> CHANGE MASTER TO
    ->     MASTER_HOST='RDS endpoint',
    ->     MASTER_USER='xxx',
    ->     MASTER_PASSWORD='xxx',
    ->     MASTER_LOG_FILE='mysql-bin.000003',   //--> 1.2中记录的binlog名字
    ->     MASTER_LOG_POS=73;   //--> 1.2中记录的binlog位置

而后,可以start slave; 以完成master-slave的配置。
 

2. 将自建MySQL作为主库,RDS MySQL 作为从库的架构

也是可以实现的,作为从库的RDS无论是一个single instance,还是作为拥有一个只读副本的master,配置方式均一致,步骤总结如下:

2.1 提前配置本地数据库和RDS VPC,子网的联通性,确保RDS可以连接到本地数据库。在本地数据库中创建主从结构所需要的user,并赋予相应权限。建议尽量设置从库的版本与主库相同,或者从库的版本高于主库。

2.2 在本地数据库运行show master status; 并记录相应信息

2.3 通过mysqldump 的方式,将本地数据库中业务数据库导出,并导入RDS[2].

因为RDS的master user不具备更改information_schema, mysql,sys等系统数据库的权限。因此,请您仅操作业务数据库的导出导入。

2.4 参考文档[3]的指令,配置master-slave 连接:

CALL mysql.rds_set_external_master (
  host_name    //-- 本地MySQL IP
  , host_port
  , replication_user_name 
  , replication_user_password
  , mysql_binary_log_file_name  //-- 2.2中记录的binlog名字
  , mysql_binary_log_file_location  //-- 2.2中记录的binlog位置
  , ssl_encryption
);

然后可以运行文档[3]中的CALL mysql.rds_start_replication; 从 RDS for MySQL 数据库实例发起复制。

3. 配置rds的只读副本(Read Replica)为主库,线下本地部署的mysql为从库

3.1. 默认情况下,在创建RDS Read Replica以后,只读副本的自动备份功能是关闭的。因此,只读副本本身不会存储binlog。

可以将只读副本进行modify,并将自动备份保留期设置成大于0的数,这样只读副本本身会开启binlog。

而后,可以在RDS内通过如下指令保留binlog为更久的时间:
call mysql.rds_set_configuration('binlog retention hours', 3);   //--> 将binlog在RDS内保留3小时(或者更多)

更改只读副本的自动备份保留期,从0 更改为非0值,会导致RDS重启。

3.2. 

在通过mysqldump来导出RDS database过程中,有可能会因为RDS托管服务的admin user本身权限限制的因素,导致锁表本身缺少权限,导致执行--lock-table失败。可以先进行测试,看是否mysqldump锁表方案能够成功执行。

推荐如下备选方案:


根据参考文档[4], 可通过调用系统存储过程 mysql.rds_stop_replication 和 mysql.rds_start_replication,在 Amazon RDS 数据库实例上停止再重新开始复制过程。

在RDS只读副本上执行:
CALL mysql.rds_stop_replication;
CALL mysql.rds_start_replication;

这样,在开启RDS只读副本的binlog以后,停止主从复制,而后show master status; 并运行mysqldump导出RDS MySQL只读副本内的数据。在完成mysqldump以后,可以启动RDS只读副本的主从复制,并通过dump建立自建MySQL从库,而后启动RDS -- 自建MySQL的主从复制。

参考文档:
[1] 设置binlog在RDS内保留期相关文档:
https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.Binarylog.html
[2] 通过mysqldump的方式将数据导入RDS
https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.SmallExisting.html
[3] mysql.rds_set_external_master
https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/mysql-stored-proc-replicating.html#mysql_rds_set_external_master

[4] https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_MySQL.Replication.ReadReplicas.html#USER_MySQL.Replication.ReadReplicas.StartStop

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值