我有一个在本地网络上运行的主 MySQL 实例,但我想知道是否可以获得 EC2 RDS 实例来复制主实例,或者它是否被亚马逊锁定了?
答案1
显然,这现在是可能的,但是它还没有完全“支持”。亚马逊现在允许您将 RDS 复制到外部从服务器,并从外部主服务器复制到 RDS,但是他们的免责声明表明他们不打算将此作为服务器设置的永久组成部分。
我个人还没有测试过这个,但我计划使用它来帮助迁移一些托管各种数据库和应用程序的旧的非 AWS 服务器。
考虑到您的问题,下面的 AWS 文档最适合。
从外部主服务器复制到 RDS: http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.NonRDSRepl.html
Sönke Ruempler 博客文章中的概念证明(RDS to External Slave): http://www.ruempler.eu/2013/07/07/replicating-aws-rds-mysql-databases-to-external-slaves/
答案2
截至 2011 年 2 月,此功能仍不受支持,请参阅RDS 实例作为复制从属:
目前不支持非 RDS 到 RDS 的复制[...]。但是,我们会记录您的兴趣,以便规划未来的路线图。
答案3
现在已得到官方支持。除了 John C 的链接(http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.NonRDSRepl.html),AWS 也创建了一个关于它的(长篇)网络广播: http://youtu.be/TT1M_XRAlQo
我不会完全重现 AWS 文档,但简化的步骤如下:
- 创建将充当从属的 RDS 实例(MySQL 5.5 版本 5.5.33 或更高版本,或 MySQL 5.6 版本 5.6.13 或更高版本)
- 编辑 RDS 安全组以授权外部主服务器的 IP 地址
- 如果外部主服务器是 EC2 计算机,请更新该计算机的安全组以允许通过 TCP 3306 到您的 RDS IP 地址的入站和出站连接
- 设置外部主服务器和 RDS 从属服务器上的服务器变量以允许复制(例如,log-bin、server-id 等;超出了本问题的范围)
- 在外部主服务器上创建复制用户
- 在外部主服务器上运行 mysqldump
- 运行 head dump.sql -n80 | grep "MASTER_LOG_POS" 以获取 MASTER_LOG_FILE 和 MASTER_LOG_POS 值
- 跑步
mysql -u[RDS username] -h'[RDS IP address]' -p'[password]' < ~/dump.sql
- 将转储文件加载到 RDS 计算机后,您无法运行在标准 MySQL 中运行的相同类型的命令来设置复制变量,因此您需要登录 RDS 实例上的 mysql 并运行
mysql> CALL mysql.rds_set_external_master ('[external master ip]', 3306, '[replicant username form step 5]', '[replicant password]' , '[MASTER_LOG_FILE value from step 7, e.g., mysql-bin.000042]', [MASTER_LOG_POS value from step 7 e.g., 107] , 1);
mysql> call mysql.rds_start_replication;
答案4
不幸的是,亚马逊目前不支持。希望将来能支持,因为我也在等待这种功能。