mysql - 在包含 InnoDB 和 MyISAM 表的数据库的 RDS 中创建只读副本。

标签 mysql myisam amazon-rds

谁能告诉我是否可以从 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/

相关文章:

MYSQL 外连接,不返回不匹配的行

mysql - 比较 n-n 关系的所有记录

php - 如何将 Google 搜索结果重定向到动态网页?

mysql - Grails 2.3.2 : findOrCreate using Enums in Bootstrap

MySQL 针对 LOAD DATA INFILE 的优化

mysql - 如何让Slick建表语句使用InnoDB

php - 如何调试 AWS Elastic Beanstalk 中的性能问题

python - 如何从本地 Django 应用程序连接 AWS RDS MySQL

mysql MyISAM 数据库和外键关系在 phpmyadmin 中如何工作? MyISAM 有更新吗?

bash - 每次使用 psql 手动输入密码的问题