MySQL
5 种托管 MySQL 数据库的方式
简介
有许多方法可以启动并运行 MySQL 服务器以用于你的项目。你可以自己安装和管理服务器实例,也可以利用众多提供托管 MySQL 访问权限的提供商之一。
本文将介绍 MySQL 服务器的一些最常见选项,并比较它们的优点和挑战。通过确定你的项目和团队的优先事项,你可以找到适合你需求的解决方案。
自管理 MySQL
最灵活且最容易描述的选项是自托管你的 MySQL 服务器。自托管 MySQL 意味着你在你控制的计算机上安装和配置数据库,就像任何其他软件一样。
自托管让你在安装和运行数据库的位置方面有很多选择。如果你选择本节中的选项之一,你可以使用本指南了解如何在你的系统上安装 MySQL。
在本地开发计算机上安装 MySQL
对于早期开发、测试和概念验证,在本地开发机器上安装 MySQL 可以为你的数据库提供可靠、易于管理的访问。
托管选项 | 本地开发机器 |
---|---|
项目阶段 | 开发 |
成本 | 无额外成本 |
性能 | 低 |
可扩展性 | 无 |
管理复杂性 | 低 |
附加说明 | 不需要网络配置。良好 适用于本地开发。 |
成本
在你的开发机器上设置 MySQL 是免费的。你正在从一台在你开发时已经处于活动状态的计算机上运行数据库。你只需要考虑 MySQL 在启动并运行时将消耗的资源量。
性能
在你的开发机器上安装 MySQL 是一种低性能选项。
你的数据库不容易或可靠地可用给其他用户。你对数据库的自身使用将受到你的硬件和你为 MySQL 提供的资源量的限制。这些担忧通常在本地测试或开发时不是问题,但对于任何更复杂的事情都完全不够用。
可扩展性
在你的开发机器上托管几乎不提供可扩展性。你可以更改分配给 MySQL 的资源量,但仅此而已。你可以升级你的开发机器,但这在长期来看既不实用也没有特别的用处。
管理复杂性
就复杂性而言,在你的本地机器上托管 MySQL 通常非常简单。大多数操作系统的安装过程都经过深思熟虑,并且可以轻松启动或停止生成的数据库。但是,考虑到资源限制和消费者网络的不稳定性,通常不值得费力将本地 MySQL 实例配置为外部访问。
虽然本地设置 MySQL 并不复杂,但你仍然需要管理你的数据库并根据需要执行任何升级。这些升级有时可能是安全补丁所必需的,如果你担心你的数据,你将有责任跟踪这些实例。
附加说明
本地安装意味着即使网络中断,你的数据库也可以从你的开发计算机访问。这在旅行时尤其有用。本地访问你的数据消除了网络复杂性,使你可以专注于开发而不是数据库访问。
在本地开发计算机上安装 MySQL 很有用,但有一些非常明显的限制。你无法轻松配置多用户访问,并且你的数据库正常运行时间直接与你的计算机的可用性和网络稳定性相关联。由于这些原因,在你的开发机器上安装几乎总是作为补充选项,旨在提高你的生产力和灵活性,而绝不是唯一的数据库安装方式。
在单独的服务器上安装 MySQL
另一种自托管选项是在单独的计算机上安装和管理 MySQL。一些常见的实现包括
- 在专用服务器上安装: MySQL 配置为在专用计算机上运行的唯一服务。它可以访问机器的所有资源。
- 与相关应用程序一起安装: MySQL 与需要它的应用程序一起安装。这对于小型部署来说是一个流行的选择,因为所有组件都可以在一台机器上管理。计算机的资源必须在 MySQL 和其他正在运行的应用程序之间共享。
在单独的服务器上安装 MySQL 与在开发机器上安装看起来非常不同
托管选项 | 单独的服务器 |
---|---|
项目阶段 | 开发、暂存、生产 |
成本 | 可变。购买或租赁额外的 服务器以及额外的管理成本。 |
性能 | 高潜力 |
可扩展性 | 高潜力 |
管理复杂性 | 高 |
附加说明 | 最灵活的选项。也需要最多的 动手管理。如果 你在内部拥有硬件或数据库专业知识,可以投入到管理中,那么这是一个不错的选择。 你可以投入到管理中,那么这是一个不错的选择。 |
一个需要进一步强调的考虑因素是,当你自己管理 MySQL 时,安全是你的责任。如果你已经处理了基础架构,软件和网络安全是组织的其他部门负责,这可能不是问题。但是,如果你不太熟悉,保护你的 MySQL 实例及其保存的数据可能是一个重大挑战。在决定走这条路之前,请务必将其纳入你的计划中。
成本
在专用或共享机器上运行 MySQL 需要你购买或租用你将使用的服务器空间。实际服务器可能位于你组织的本地、数据中心托管或作为云提供商托管的虚拟机(也称为虚拟专用服务器或 VPS)运行。
服务器的成本可能差异很大。低功耗 VPS 可能非常便宜,而多个专用服务器将很快变得昂贵。但是,服务器的成本不是唯一的考虑因素。你还必须考虑额外的管理成本。根据你的部署环境,这可能包括管理数据库层、服务器软件和硬件的人员成本。这些成本将取决于你的可用性要求、托管环境和运营规模。
性能
在单独的服务器上部署 MySQL 具有非常高的性能潜力。由于运行 MySQL 的机器的规格由你控制,因此你可以完全灵活地选择与你的需求相匹配的硬件。如果你将来需要扩展,你可以升级你的硬件或购买额外的服务器来扩展你的工作负载。
你还可以微调你的数据库配置以获得额外的性能优势。你可以调整与内存管理、缓存、打开文件处理、客户端连接等相关的设置。虽然这为你提供了很大的能力,但利用这些选项需要时间、专业知识和实验。与运行你自己的服务器的其他方面一样,好处受到你可以分配给项目这一方面的时间和金钱的限制。
可扩展性
如上所述,在专用服务器上运行使你可以对数据库系统的变化的需求做出反应。你可以通过向数据库服务器添加额外的资源和硬件来向上扩展,或者你可以通过在 MySQL 服务器池中平衡你的请求来向外扩展。这两种选择都是对不同类型压力的合理响应。
管理复杂性
一般来说,扩展与性能调优具有相同的优势和局限性:你拥有令人难以置信的灵活性和能力,但你需要负责管理成本和配置。任何需要额外硬件的更改(例如需求增加)都必须与主动监控相结合,以便你的组织有时间采购硬件、配置软件和平衡你的工作负载。
附加说明
总而言之,管理你自己的 MySQL 可能非常高效、强大且灵活,但可能需要大量专门的时间和资源。此选项最适合具有内部基础架构和服务器专业知识的组织,他们希望控制其数据库的运行时环境、配置和架构拓扑。
使用 Docker 的 MySQL
另一种自托管选项是使用 Docker 将 MySQL 作为容器运行。Docker 允许你在本地或远程机器上的隔离环境中运行 MySQL。
托管选项 | Docker 容器 |
---|---|
项目阶段 | 开发、暂存、生产 |
成本 | 可变。购买或租赁额外的 服务器以及额外的管理成本。 |
性能 | 中-高 |
可扩展性 | 高 |
管理复杂性 | 中-高 |
附加说明 | 容器化基础架构在复杂性方面可能差异很大 。虽然容器使许多事情变得更容易 ,尤其是在开发和暂存期间,但它们也需要经验和 复杂的编排才能在生产环境中良好运行。 对于生产工作负载,容器很可能 只有在你已经投资于 像 Kubernetes 这样的容器编排时,才是一个好的选择。 像 Kubernetes 这样的容器编排时,才是好的选择。 |
与传统的本地安装相比,使用 Docker 的一些优势包括
- 与安装 MySQL 相比,使用官方 MySQL Docker 镜像 运行 MySQL 需要更少的精力。
- Docker 允许你在多个环境中重现完全相同的数据库配置,这对于团队协作处理需要相同 MySQL 配置的项目非常有用。
- 你可以使用 Docker 控制分配给 MySQL 的 CPU、内存和存储资源。
- Docker 减少了 MySQL 与你的机器上运行的其他软件之间不兼容的可能性。
在本地或远程机器上使用 Docker 安装 MySQL 是相似的,尽管根据你是否将 MySQL 用于生产工作负载,还有一些额外的注意事项。
虽然 Docker 简化了运行 MySQL 的某些方面,但也有一些权衡需要注意
- 根据你的配置,使用 Docker 运行可能会增加你的网络配置的复杂性。
- Docker 添加了一个额外的抽象层,这需要额外的安全考虑,并有可能使故障排除变得不那么直接。
容器和 Kubernetes
使用 Kubernetes,你可以在由多个服务器组成的集群上运行 Docker 容器。如果集群中的一台服务器需要停机维护,只要可以访问底层数据分区,Kubernetes 就会将 MySQL 容器移动到另一台服务器。你还可以在 Kubernetes 上运行使用 MySQL 的应用程序,这可以减少应用程序和 MySQL 之间的网络延迟。
托管服务
在你自己运行 MySQL 之外的另一种选择是从提供商处租用或购买 MySQL 数据库。托管服务允许你轻松地将数据库作为服务或 API 使用,而无需担心 MySQL 软件或底层服务器的幕后管理。
存在不同类型的托管服务以满足不同的需求。本节将介绍由托管或云提供商、第三方托管数据库和应用程序平台提供的数据库提供的服务。
由云提供商管理的数据库
也许最常见的托管 MySQL 托管类型是云或托管提供商提供的类型。这些示例包括 Amazon Web Service 的 RDS(关系数据库服务)、Google Cloud Platform 的 Cloud SQL 和 Azure Database。
托管选项 | 云提供商托管 |
---|---|
项目阶段 | 开发、暂存、生产 |
成本 | 高度可变,具体取决于你的选择 和使用情况。 |
性能 | 高度可变 |
可扩展性 | 高 |
管理复杂性 | 低 |
附加说明 | 通常由 可以运行你的 应用程序的同一云提供商提供的高度可扩展的解决方案。这允许在 网络和性能方面进行额外控制,而无需 运行你自己的服务器的繁重工作。 |
云提供商提供各种各样的 MySQL 数据库,这些数据库经过微调,可以在其数据中心运行,并与其其他服务无缝协作。
云提供商
以下云提供商提供托管 MySQL 数据库,你可以根据你的需求购买、配置和扩展
服务器和大部分 MySQL 将由托管提供商管理,而你将能够设置扩展选项、调整设置和管理访问权限。你可以将数据库配置为可从互联网连接,或将它们直接连接到由同一提供商管理的应用程序。
成本
由云提供商管理的 MySQL 数据库的成本可能差异很大。在低端,一些提供商提供免费层级,但性能和正常运行时间最低。在高端,如果你的流量意外激增,自动扩展以满足任何需求可能会在一夜之间花费你数千美元。与云中的大多数事物一样,你的实际使用情况将影响你每月的账单。许多云提供成本警报,甚至在使用量/成本超过一定点时自动关闭。监控你的使用情况并配置截止点以管理数据库系统的运营成本非常重要。
可扩展性
虽然成本有时可能难以预测,但好消息是云中的扩展非常容易。分配给你的数据库的资源是可动态配置的。这意味着你可以通过更改帐户中的设置来增加存储容量、内存和计算能力,或管理你的数据的副本数量。动态扩展数据库资源以适应当前需求的能力是一项强大的功能,如果配置不当,可能会导致高成本。这使你始终有能力满足你的需求,前提是你能够承担成本。
性能
与可扩展性相关,性能是在云中非常灵活的另一个领域。你通常可以根据你的使用模式微调对数据库性能影响最大的设置。如果你的当前配置性能不足,你也可以分配额外的资源。将数据库与使用它们的应用程序并置也可以帮助你在数据库和应用程序之间获得良好的网络性能。
管理复杂性
就管理复杂性而言,云托管数据库相当简单。你正在向提供商付费,让他们为你承担大部分管理负担。虽然你仍然需要控制你的帐户和影响数据库的设置,但硬件、操作系统和大部分 MySQL 配置将为你处理。这可以极大地减少使用数据库的管理开销,但在某些特殊情况下,你可能无法获得你期望的调整级别。
附加说明
总的来说,为云提供商管理的 MySQL 数据库付费通常是一个有吸引力的选择。它在扩展和性能方面提供了极大的灵活性,同时减少了管理工作量。选择云提供商的数据库产品的缺点是,在某些级别上,你最终可能会支付比其他方式更多的费用。此外,如果你的工具开始过度依赖提供商特定的功能,则存在被当前提供商困住的风险。
第三方托管数据库
除了直接从云提供商处购买数据库外,你还可以选择通过第三方提供商管理你的数据库。在大多数情况下,此选项会将数据库部署和管理到你选择的云或多个云上,从而将数据库管理与底层资源提供商分离。
托管选项 | 第三方托管 |
---|---|
项目阶段 | 开发、暂存、生产 |
成本 | 差异很大,具体取决于你的选择 和使用情况。 |
性能 | 高度可变 |
可扩展性 | 高 |
管理复杂性 | 低 |
附加说明 | 第三方托管数据库具有许多与云提供数据库相同的优势。 第三方托管数据库具有许多与云提供数据库相同的优势。 但是,通过第三方管理你的数据库,你可以将数据库 管理与底层云提供商分离。 管理与底层云提供商分离。 这可以让你将来更容易迁移到不同的 主机,有时可以提供 更强大的管理选项。 |
由第三方提供商管理的数据库通常使用与云提供商本身提供的数据库相同的基本组件。但是,第三方提供商通常与多个云合作,在你帐户中启动资源,并且通常在你需要时为你提供更低级别的访问权限。该服务将启动提供商上的虚拟服务器,并使用这些服务器安装和配置 MySQL,而不是使用云提供商提供的数据库。他们可以调整操作系统上的设置,并为你提供对托管你的实例的服务器的访问权限。第三方 MySQL 提供商的一个示例是 ScaleGrid,它目前可以在四个不同的云中管理实例。
第三方产品
以下第三方提供商提供托管的 MySQL 数据库,您可以根据需要购买、配置和扩展。
服务器和大部分 MySQL 将由提供商管理,而您将能够设置数据库运行的云平台、扩展选项、调整设置和管理访问权限。您可以将数据库配置为可从互联网连接,或将它们直接连接到由同一提供商管理的应用程序。
成本
在成本方面,第三方解决方案通常也具有高度的可变性。作为用户,您将需要为部署到的云中的计算资源以及数据库管理服务收取的管理成本付费。由于您为更基础的资源而不是托管数据库向云提供商付费,因此这方面的成本可能会更小。但是,与管理服务相关的成本可能会使总成本在某些价格点上更高。您将需要弄清楚每一方在不同级别上的扩展方式,以确定您的总成本。
性能
数据库的性能特征也可能差异很大。由于您的管理服务安装在云中的计算实例上,因此您的提供商除了 MySQL 设置外,还能够调整服务器配置。这意味着他们可能能够调整某些设置,以更合理地满足您的需求。
另一方面,他们可能无法访问虚拟化和硬件组件的底层,而这些底层对于充分调整是必要的。强烈建议您针对云提供商提供的原生数据库测试您的性能。
可扩展性
第三方托管数据库的可扩展性通常非常好。由于这些提供商可以部署在任何具有足够资源的计算实例上,因此他们有时可以为您提供比云提供商公开的更广泛的扩展选项。如果您的扩展原因之一是为了提高可用性,那么许多第三方服务都能够跨越多个可用区甚至提供商。
管理复杂性
用于管理数据库的第三方服务具有不同的复杂程度。由于此选项需要两个不同的提供商(托管计算实例的云和数据库管理服务)之间的协调,因此与使用云提供商提供的原生数据库服务相比,固有地增加了复杂性。
一些管理服务将自己定位为简化的选项,以与共享 Web 托管非常相似的方式隐藏复杂性。其他解决方案则利用操作系统可访问的事实,向用户公开各种配置选项。许多服务都提供这两种体验,以允许用户找到自己喜欢的复杂程度。
附加说明
将数据库管理与底层资源提供商分离既有优点也有缺点。
如果您的数据库管理服务抽象化了底层,那么您在迁移到不同的云提供商时可能会有更大的灵活性。这种抽象化还使您能够选择您感到舒适的复杂程度。您可以使用数据库管理服务提供的完整抽象化和界面,但由于您也可以访问为您预配置的数据库服务器,因此您可以登录并根据需要修改数据库服务器。数据库管理服务还可以提供一个简单的界面来管理这些操作系统级别的调整。
这种设置的缺点来自于您将依赖多个方来确保数据库的正确运行。这可能会增加服务中断的机会。您也可能会错过云提供商提供的数据库服务的任何底层优化。您的数据库管理服务将只能访问您的云提供商向他们公开的内容,并且他们将无法优化底层的虚拟化或硬件层。
总的来说,使用第三方管理服务是关于偏好和测试的。您需要测试性能并了解定价结构如何在各种使用级别上影响您。
总结
以下是此处讨论的各种选项之间比较的概述
托管选项 | 本地开发机器 | 单独的服务器 | 云提供商托管 | 第三方托管 | 应用程序平台管理 |
---|---|---|---|---|---|
项目阶段 | 开发 | 开发、暂存、生产 | 开发、暂存、生产 | 开发、暂存、生产 | 开发、暂存、生产 |
成本 | 无额外成本 | 可变。购买或租赁额外的 服务器以及额外的管理成本。 | 高度可变,具体取决于你的选择 和使用情况。 | 差异很大,具体取决于你的选择 和使用情况。 | 高度可变 |
性能 | 低 | 高潜力 | 高度可变 | 高度可变 | 高度可变 |
可扩展性 | 无 | 高潜力 | 高 | 高 | 高 |
管理复杂性 | 低 | 高 | 低 | 低 | 低 |
附加说明 | 不需要网络配置。良好 适用于本地开发。 | 最灵活的选项。也需要最多的 动手管理。如果 你在内部拥有硬件或数据库专业知识,可以投入到管理中,那么这是一个不错的选择。 你可以投入到管理中,那么这是一个不错的选择。 | 通常由 可以运行你的 应用程序的同一云提供商提供的高度可扩展的解决方案。这允许在 网络和性能方面进行额外控制,而无需 运行你自己的服务器的繁重工作。 | 第三方托管数据库具有许多与云提供数据库相同的优势。 第三方托管数据库具有许多与云提供数据库相同的优势。 但是,通过第三方管理你的数据库,你可以将数据库 管理与底层云提供商分离。 管理与底层云提供商分离。 这可以让你将来更容易迁移到不同的 主机,有时可以提供 更强大的管理选项。 | 应用程序提供的数据库服务 平台通常侧重于简单 管理和访问高于大多数其他 因素。成本可能会有很大差异 取决于您的使用情况,因此重要的是 密切关注扩展和使用情况 影响您的付款。 |
托管数据库的正确选择在很大程度上取决于您的应用程序的需求、您的开发阶段以及您自己管理 MySQL 的能力。不同的选择在这些因素之间提供权衡,使它们在特定时间或对于特定组织更合适。