Mar*_*ery 30 mysql amazon-ec2 amazon-rds
在工作中,我们将所有网络服务器托管在 Amazon EC2 上,并且通常使用与 Apache 网络服务器安装在同一台机器上的 MySQL 数据库,并在localhost. 我们现在需要将我们的数据库迁移到我们的系统之一的自己的服务器上。我有两种解决方案可供选择:使用Amazon RDS,或者只是启动一个新的Amazon EC2 机器并在其上安装 MySQL。
RDS 是与 EC2 同一家公司提供的专用数据库服务,似乎应该是更好的选择。但是,当我查看这两个选项的定价时(请参阅http://aws.amazon.com/ec2/pricing和http://aws.amazon.com/rds/pricing),似乎 RDS 服务器的成本几乎对于具有相同规格的盒子,是 EC2 服务器的两倍。
鉴于我能够自己处理备份,并且 EC2 提供了与 RDS 所需的相同的扩展实例的能力,我完全看不出有任何理由使用 RDS 而不是 EC2。不过,似乎我可能遗漏了一些重要的东西,因为如果我是对的,那么没有人会使用 RDS。我到底缺少什么,与在 EC2 实例上安装自己的数据库相比,RDS 有哪些优势?
Mic*_*bot 20
总的来说,我是 AWS 的忠实粉丝……但 RDS,不是很多。
@RolandoMySQLDBA 指出了一些非常好的观点。
与 EC2 上的 MySQL 相比,我在 RDS 中看到的唯一优势是能够进行点击快照、克隆和时间点恢复,但这些还不足以弥补失去控制和灵活性的能力,而且它们绝对不能证明价格更高是合理的。RDS 在某些方面很吸引人,但是您最终不能相信您最终无法解决的问题,因为您无法了解所有活动部件。
我不喜欢没有SUPER特权。我不喜欢无法跟踪错误日志。我不喜欢不能在我的数据库服务器上运行“top”或“iostat”来查看内核和驱动器如何享受负载。我不喜欢无法访问联合存储引擎。我不喜欢为我什至无法用作只读副本的热备用(多可用区)备份主机付费的想法。当然,有完全合理的解释,为什么所有这些限制都必须到位才能使 MySQL 成功打包并作为 RDBMS-in-a-box 出售。唯一的问题是,RDBMS-in-a-box“解决”了我没有的一系列问题……并且妨碍了我,导致了新的问题。
但对我来说,RDS 的绝对交易破坏者是完全无法访问二进制日志和复制。Binlogs,尤其是基于行的,是一种极好的小灾难恢复工具,但如果你不能访问它们,它们对你没有帮助。想要将办公室的本地服务器配置为 RDS 中生产数据库的只读副本?如果您的 RDS 中的数据发生无法想象的事情,可以从中获取本地备份、报告、进行灾难恢复吗?这是一个既明显又出色的想法。
糟糕,抱歉,无法直接访问复制。当然,您可以为只读副本付费……但只能作为其他 RDS 实例付费。在我的书中不是一个价值主张。
我仍然更喜欢运行我自己的服务器(即使在 EC2 中)而不是运行 RDS 出于多种原因,包括缺乏对用户定义函数的支持、无法使用联合存储引擎以及无法拥有一个额外的连接可用于紧急访问......但是......
Amazon 在 MySQL 5.6 for RDS 中进行了重大更改,消除了我的主要反对意见之一——也许是我最大的反对意见:现在可以访问二进制日志,您可以将非 RDS 实例作为从属运行,或将其他实用程序连接到读取二进制日志流的服务器。
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Exporting.NonRDSRepl.html
正式地,文档表明他们正在公开这一点,以便您可以设置一个从属服务器以进行实时迁移——您使用 同步来自现有 RDS 实例的外国未来主服务器mysqldump,然后将其作为从属服务器连接到 RDS通过复制流获取实时更新源,直到您的应用程序迁移到新的主服务器 - 但非正式地,只要您不希望它们支持您,您就可以持续执行此操作...其中,对我来说,似乎合理。
这在最近的一次网络研讨会中得到证实,在 56:45 左右开始的对话中:
“你可以无限期地将它保持在复制状态......
“……只要你负责维护复制品……”
“如果这是您想要的,我们不会阻止您进行持续复制。”
这个新功能足以让我完全反对在我们面向公众的网站支持 MySQL 实例中使用 RDS,在那里我们不使用FEDERATED或根本不使用其他一些东西。
所以我仍然不赞成它,但我不再反对它,因为拥有二进制日志的实时流使我最终重新实时控制数据,并负责确保没有事务在灾难性停电中迷失的我又回来了,因为作为 DBA,我又回到了控制之中——这正是我想要的。让第三方供应商指责或提起诉讼或其他任何事情,如果丢失的数据消失在黑匣子内的黑洞中,则无法找回丢失的数据。
管理层似乎喜欢 RDS 的“想法”,并且不反对成本差异,因此我们现在正在推出所有支持 RDS 的新网站。
我承认,点击时间点恢复是 RDS 中的一个不错的功能……它不会改变或破坏您现有的机器——相反,它会使用之前的备份启动一个全新的实例最接近所选时间点,然后应用必要的二进制日志,使新机器前进到您指定的时间点。
与此相关,但在另一个方向,现在也可以使用类似的策略将实时 MySQL 数据库迁移到 RDS 中……您可以连接 RDS 主控(大概,通常,这将是新部署的实例)作为现有系统的从属,以便 RDS 实例在您迁移到其中时具有数据的实时版本。与访问 RDS binlog 进行向外复制仅适用于 5.6 不同,RDS从 5.5.33 和 5.6.13 开始支持向内复制。
Rol*_*DBA 11
如果扩展 DB Servers不是您的菜,那么 Amazon RDS 可以使用,因为它具有所有功能。那些只想要适度 HA、备份和横向扩展的人受益匪浅。
另一方面,如果你想扩展硬件,这对 RDS 来说是不可能的。如果您想扩展 MySQL 的功能怎么办?不幸的是,对于人们想要的许多方面来说,这是不可能的。
例如,您是否知道所有七 (7) 个 RDS 服务器模型中的两个字段都有上限?
请注意以下关于这两个选项的图表:
MODEL max_connections innodb_buffer_pool_size
--------- --------------- -----------------------
t1.micro 34 326107136 ( 311M)
m1-small 125 1179648000 ( 1125M, 1.097G)
m1-large 623 5882511360 ( 5610M, 5.479G)
m1-xlarge 1263 11922309120 (11370M, 11.103G)
m2-xlarge 1441 13605273600 (12975M, 12.671G)
m2-2xlarge 2900 27367833600 (26100M, 25.488G)
m2-4xlarge 5816 54892953600 (52350M, 51.123G)
Run Code Online (Sandbox Code Playgroud)
您没有获得SUPER 特权,也无法直接访问my.cnf. 鉴于此,为了更改my.cnf启动选项,您必须首先创建一个基于 MySQL 的数据库参数选项列表,并使用RDS CLI (Command Line Interface)更改所需的选项。然后,您必须执行此操作以导入新选项:
MySettings)./rds-modify-db-parameter-group MySettings --parameters "name=whateveroption,value=whatevervalue,method=immediate"MySettings使用 API 更新单个变量并强制重启 RDS 实例以实现更改?对任何一个选项进行调整都是一个相当痛苦的过程。
如果您想扩展 MySQL,请使用 EC2。然后,您可以按照my.cnf自己的喜好进行调整,就像您一直以来所做的那样并且已经习惯了。