在RDS上,我可以在主副本中不存在的只读副本中创建表吗?

时间:2013-01-18 18:20:56

标签: mysql master-slave rds

我们有一个单独的RDS实例来处理会话状态表,但是发现会话数据库负载非常低。如果我们可以将实例处理会话转换为主数据库的只读副本,那么我们可以将它用于即使在副本中有大滞后的安全的只读任务。

有没有人在RDS上做过类似的事情(这是否可能且安全)?我应该注意任何严重的副作用吗?任何链接或帮助更好地理解这将有所帮助。

http://aws.amazon.com/rds/faqs/#95尝试回答这个问题,但我正在寻找更多的见解。

2 个答案:

答案 0 :(得分:3)

是的,有可能。我正在使用RDS成功使用它,用于本地缓存的特定情况。

您需要将副本上的read_only参数设置为0。我必须重新启动服务器才能使该参数正常工作。

如果使用不同的表名,它将很好地工作,因为RDS不允许您设置:replicate-ignore-table参数。

请记住,master<> slave之间没有任何数据冲突。如果有一个语句在MASTER上正常,但在SLAVE上失败,那么您刚刚打破了复制。这可能发生在例如首先在SLAVE上创建表格,然后在一段时间后将表格添加到MASTERCREATE语句将在MASTER上清除,但在SLAVE上失败,因为表已存在。

假设您需要非常小心,允许您的应用程序写入SLAVE。如果您忘记/或犯了错误并开始编写读取副本以获取其他一些数据,最终可能会丢失数据或难以调试问题。

答案 1 :(得分:-1)

没有太多要添加的东西 - 在纯读取副本上真正有意义的唯一正常场景是添加一些索引之类的东西,如果它主要用于报告或其他读取密集型的东西

如果您尝试预先计算大量数据并以其他方式修改只读副本上的内容,则需要真正小心您不要改变数据 - 如果读数不再一致,那么您就遇到了麻烦:)

如果您对在奴隶上更改数据并且主人试图更新数据时会发生什么感到好奇,那么您已经走错了路径恕我直言。

TL; DR不要这样做,除非你真的知道你正在做什么,并了解所有后果。

  • 直言不讳地说,根据我的经验,MySQL复制可能很奇怪,所以即使知道所谓的会发生什么, 会发生什么如果作为主人尝试将更新的数据写入奴隶,你也已经更新....谁知道。