谁能告诉我是否可以从 Amazon RDS 服务中包含 InnoDB 和 MyISAM 表的数据库创建只读副本。
我知道 Amazon 不备份 MyISAM 表,但在创建只读副本时,文档似乎有点随意。
这段文档对我来说似乎有点争议: “只读副本需要事务性存储引擎,并且仅支持 InnoDB 存储引擎。MyISAM 等非事务性引擎可能会阻止只读副本按预期工作。但是,如果您仍然选择将 MyISAM 与只读副本一起使用,我们建议您仔细观察 Amazon CloudWatch“副本滞后”指标(可通过 AWS 管理控制台或 Amazon Cloud Watch API 获取),并在只读副本由于复制错误而落后时重新创建只读副本。”
一方面它声明需要事务引擎,但另一方面以下句子并不禁止使用 MyIsam 表。我的意思是,我愿意承担在一定程度上失去数据并发性的风险。
为什么我需要这个?我注意到 RDS 上有一个相当大的队列,并且 CPU 利用率< 20%。我花了一周时间优化查询,结果是 CPU 利用率低。但是,由于交通量很大,因此需要排队。我的结论是,为了减少队列的大小,我需要创建一个主从解决方案,并将错误宽松的查询移至从属,以减少等待时间。
最佳答案
根据 AWS 文档:
准备使用 MyISAM 的 MySQL 数据库实例
如果您的 MySQL 数据库实例使用非事务性引擎(例如 MyISAM),您将需要执行以下步骤才能成功设置只读副本。需要执行这些步骤才能确保只读副本具有一致的数据副本。请注意,如果所有表都使用事务引擎(例如 InnoDB),则不需要这些步骤。
停止源数据库实例中非事务表上的所有 DML 和 DDL 操作并等待它们完成。 SELECT 语句可以继续运行。
刷新并锁定源数据库实例中的表。
使用以下部分中的方法之一创建只读副本。
使用例如DescribeDBInstances API 操作检查只读副本创建的进度。只读副本可用后,解锁源数据库实例的表并恢复正常的数据库操作。 http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html
关于mysql - 在包含 InnoDB 和 MyISAM 表的数据库的 RDS 中创建只读副本。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22458411/