有人可以告诉我们是否可以从包含Amazon RDS服务中的InnoDB和MyISAM表的数据库创建只读副本。
我知道亚马逊不会备份MyISAM表,但在阅读副本创建方面,文档看起来很随意。
这一点文件对我来说似乎有点争议: “只读副本需要一个事务存储引擎,并且仅支持InnoDB存储引擎。非事务性引擎(如MyISAM)可以防止只读副本按预期工作。但是,如果您仍然选择将MyISAM与只读副本一起使用,我们建议您要仔细观看Amazon CloudWatch“副本滞后”指标(可通过AWS管理控制台或Amazon Cloud Watch API获取),并在因复制错误而重新创建只读副本。“
一方面,它声明需要事务引擎,但另一方面,在句子之后不禁止使用MyIsam表。我的意思是,我愿意承担在一定程度上失去数据并发性的风险。
为什么我需要这个?我注意到我在RDS上有一个非常大的队列,并且CPU利用率是< 20%。我花了一周的时间来优化查询,因此CPU利用率很低。但是,Queue就在那里,因为有很多流量。我总结说,为了减少队列的大小,我需要创建一个主从解决方案,并将错误的宽松查询移到slave,减少等待时间。
答案 0 :(得分:2)
根据AWS文件:
准备使用MyISAM的MySQL数据库实例
如果您的MySQL数据库实例使用非事务性引擎(如MyISAM),则需要执行以下步骤才能成功设置只读副本。需要执行这些步骤以确保只读副本具有一致的数据副本。请注意,如果所有表都使用InnoDB等事务引擎,则不需要执行这些步骤。
停止源数据库实例中非事务性表上的所有DML和DDL操作,并等待它们完成。 SELECT语句可以继续运行。
刷新并锁定源数据库实例中的表。
使用以下各节中的一种方法创建只读副本。
使用例如DescribeDBInstances API操作检查只读副本创建的进度。只读副本可用后,解锁源数据库实例的表并恢复正常的数据库操作。 http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html
答案 1 :(得分:0)
基本上,文档说他们建议只使用InnoDB表。这有助于复制和崩溃恢复。从技术上讲,你仍然可以使用MyISAM表,但结果可能不是你所期望的,如果出现问题,你就可以自己动手了。