我想在Amazon RDS上的数据库中为MySQL表添加索引,但我不想在创建索引时停止使用数据库。此answer建议使用只读副本升级,首先在只读副本上创建索引,然后提升只读副本。我创建了一个只读副本来尝试这种方法,但是当我尝试更改只读副本上的索引时,我得到ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement
。我如何制作它以便我可以编辑只读副本,这是否会阻止亚马逊继续更新只读副本以匹配主数据库?
答案 0 :(得分:5)
默认情况下,只读副本是可读的,直到您自定义它们以进行读写。
通过将为数据库实例创建的数据库参数组的read_only参数设置为false,可以将Amazon RDS数据库实例只读副本配置为可读/写。按照此开发人员指南实现读取/写入读取副本。然后,您将能够实现您的用例。
https://aws.amazon.com/premiumsupport/knowledge-center/rds-read-replica/
答案 1 :(得分:4)
您尝试的模式是:
使用MySQL,您必须非常小心第2步,特别是如果您的应用程序在2个以上的实例上运行。如果您的应用层的一部分写入current_db并且您的部分应用写入next_db,那么如果您不小心,可能会发生不好的事情。以下是保持安全的两种方法:
不幸的是,RDS读取副本升级似乎不足以实现零停机时间架构。 以下是RDS文档关于阅读副本推广的内容:
促销过程需要几分钟才能完成。当你 提升只读副本,停止复制并读取只读副本 重新启动。重新启动完成后,只读副本可用 作为单可用区数据库实例。
这并不能真正实现零停机时间。但是,您可以使用该机制安全地执行“三[分钟]切换”更新。可悲的是,由于重启,需要几分钟。方法如下:
如果您真的想要“零停机”更新,则需要调查: http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html
最后一句话:无论你选择做什么,我都建议在你的应用程序的模拟版本之前练习一次,然后再在你的实时系统上试用它! : - )