如果希望在 自建机房创建一个 AWS RDS for MySQL 的从库实例, 可以参考如下步骤创建同步:
1. 准备线下环境, 例如在 EC2 上安装 MySQL Server 。 并且可以从实例中访问 RDS 环境, 确保网络通畅。
(1) 需要自建环境中自定义配置
server_id=2
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=innodb
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
2. 准备 RDS 数据库实例。
(1) 确保设置的备份保留期足够长,以便在导出期间不会清除任何二进制日志。如果在导出完成前清除了所有日志,您必须从头重新启动复制进程。mysql.rds_set_configuration 存储过程将二进制日志文件保留期设置得足够长,以便在导出期间不会清除二进制日志文件。
设置保留更长时间的 binlog 后, 需要确保数据库实例有足够的空间, 避免出现空间不足的情况。
RDS 端执行: (设置binlog 保留 24 小时, 具体需要看数据库的业务)
call mysql.rds_set_configuration('binlog retention hours', 24);
(2) 将 max_allowed_packet 和 slave_max_allowed_packet 参数都设置为最大大小,以避免复制错误。
3. 复制数据库
(1) 备份之前, 将数据库设置为 只读, 修改数据库参数 read_only = 1.
(2) 查看 binlog 状态
MySQL > show master status \G
*************************** 1. row ***************************
File: mysql-bin-changelog.000001
Position: 681
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
(2) 备份 RDS 数据
mysqldump -h rdsendpoint.rds.cn-north-1.amazonaws.com.cn -u dbadmin -ppassword --port=3306 --single-transaction --routines --triggers --databases database1 database2 --compress --port 3306 > backup.sql
4. 恢复数据库备份到
(1) 在自建环境中创建数据库
create database database1;
create database database2;
create database database3;
(2) 恢复备份文件
mysql -udbadmin -p'!QAZ2wsx' < rds_backup.sql
(3) 在自建环境中设置主库环境为 RDS 实例。
CHANGE MASTER TO
MASTER_HOST = 'rdsendpoint.rds.cn-north-1.amazonaws.com.cn ',
MASTER_USER = 'dbadmin',
MASTER_PASSWORD = '!QAZ2wsx',
MASTER_PORT = 3306,
MASTER_LOG_FILE = 'mysql-bin-changelog.001161',
MASTER_LOG_POS = 681;
5. 查看同步状态
show slave status \G
如果出现同步错误, 通过此方式
stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
start slave;
再次查看同步状态
show slave status \G
6. 将主库环境设置为 非只读 。 修改 RDS 参数组参数 read_only = 0。
7. 验证。
在 RDS 实例中创建验证表, 插入测试数据。 在 自建环境中查看。
MySQL> create table test_replica(id int);
Query OK, 0 rows affected (0.02 sec)