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 这样的容器编排时才是不错的选择。

使用 Docker 相比传统的本地安装,一些好处包括

  • 使用官方的MySQL Docker 镜像运行 MySQL 比安装 MySQL 需要更少的精力。
  • Docker 允许您在多个环境中复制完全相同的数据库配置,这对于需要相同 MySQL 配置的项目的协作团队很有用。
  • 您可以使用 Docker 控制分配给 MySQL 的 CPU、内存和存储资源。
  • Docker 减少了 MySQL 与机器上运行的其他软件之间不兼容的可能性。

在本地或远程机器上使用 Docker 安装 MySQL 类似,尽管根据您是否将 MySQL 用于生产工作负载,有一些额外的注意事项。

虽然 Docker 简化了运行 MySQL 的某些方面,但也有一些需要了解的权衡

  • 根据您的配置,使用 Docker 运行可能会增加网络配置的复杂性。
  • Docker 添加了一个额外的抽象层,这需要额外的安全考虑,并且有可能使故障排除变得不那么直接。

容器和 Kubernetes

使用Kubernetes,您可以在由多台服务器组成的集群上运行 Docker 容器。如果集群中的一台服务器需要停机进行维护,只要底层数据分区可访问,Kubernetes 就会将 MySQL 容器移动到另一台服务器。您还可以将使用 MySQL 的应用程序运行在 Kubernetes 上,这可以减少应用程序和 MySQL 之间的网络延迟。

托管服务

除了自行运行 MySQL 外,还可以从提供商处租用或购买 MySQL 数据库。托管服务允许您像使用服务或 API 一样轻松地使用数据库,而无需担心 MySQL 软件或底层服务器的后台管理。

存在不同类型的托管服务来满足不同的需求。本节将介绍托管服务提供商、第三方托管数据库以及应用程序平台提供的数据库。

云提供商托管的数据库

也许最常见的 MySQL 托管类型是由云或托管服务提供商提供的。一些示例包括亚马逊网络服务的 RDS(关系数据库服务)、Google Cloud Platform 的 Cloud SQL 和 Azure Database。

托管选项云提供商托管
项目阶段开发、登台、生产
成本高度可变,取决于您的选择
和使用情况。
性能高度可变
可扩展性
管理复杂度
其他说明云提供商通常提供的可扩展性极强的解决方案,
该解决方案可以运行您的应用程序。
这允许对网络和性能进行额外控制,
而无需
运行您自己的服务器的繁重工作。

云提供商提供各种经过微调的 MySQL 数据库,这些数据库可在其数据中心中运行,并与其他服务无缝协作。

云提供商

以下云提供商提供托管的 MySQL 数据库,您可以根据需要购买、配置和扩展这些数据库

服务器和大部分 MySQL 将由托管服务提供商管理,而您可以设置扩展选项、调整设置和管理访问权限。您可以将数据库配置为可从互联网连接,或将其直接连接到由同一提供商管理的应用程序。

成本

云提供商托管的 MySQL 数据库可能会有很大范围的成本。在低端,一些提供商提供具有最低性能和正常运行时间的免费层。在高端,如果流量意外激增,自动扩展以满足任何需求可能会在一夜之间花费您数千美元。与云中的大多数事物一样,您的实际使用情况将影响您每个月的账单。许多云提供商提供成本警报,甚至在使用量/成本超过某个点时自动关闭。监控使用情况并配置截止值以管理数据库系统的运营成本非常重要。

可扩展性

尽管成本有时难以预测,但好消息是云中的扩展非常容易。分配给数据库的资源可以动态配置。这意味着您可以通过更改帐户中的设置来增加存储容量、内存和计算能力,或管理数据的副本数量。其中一个强大的功能(如果配置不当,会导致高成本)是能够根据当前需求动态扩展数据库的资源。这使您始终能够满足您的需求,前提是您可以承担成本。

性能

与可扩展性相关,性能是云中另一个非常灵活的领域。您通常可以根据您的使用模式微调对数据库性能影响最大的设置。如果当前配置的性能不足,您还可以分配其他资源。将数据库与使用它们的应用程序一起放置还可以帮助您在数据库和应用程序之间获得良好的网络性能。

管理复杂度

在管理复杂度方面,云托管数据库相当简单。您正在为提供商支付大部分管理负担。虽然您仍然需要控制您的帐户和影响数据库的设置,但硬件、操作系统和大部分 MySQL 配置将由您代劳。这可以在减少使用数据库的管理开销方面产生巨大影响,但在某些特殊情况下,您可能无法访问所需的调整级别。

其他说明

总的来说,支付云提供商托管的 MySQL 数据库通常是一个有吸引力的选择。它在可扩展性和性能方面提供了极大的灵活性,同时减少了管理工作。使用云提供商的数据库产品带来的缺点是,在某些级别上您最终可能支付的费用超过预期。此外,如果您的工具开始过分依赖于特定于提供商的功能,则存在被锁定到当前提供商的风险。

第三方托管数据库

除了直接从云提供商处购买数据库外,您还可以选择通过第三方提供商管理数据库。在大多数情况下,此选项将把数据库部署和管理到您选择的云或云中,从而将数据库管理与底层资源提供商分离。

托管选项第三方托管
项目阶段开发、登台、生产
成本高度多样化,取决于您的选择
和使用情况。
性能高度可变
可扩展性
管理复杂度
其他说明第三方托管数据库具有许多
与云提供数据库相同的优势。
但是,通过
第三方管理您的数据库,您可以将数据库
管理与底层云提供商分离。
这可以简化将来迁移到其他
主机的工作,并且有时可以允许
更强大的管理选项。

由第三方提供商管理的数据库通常使用与云提供商本身提供的数据库相同的基本组件。但是,第三方提供商通常与多个云合作,在您的帐户中启动资源,并且如果需要,通常会为您提供更低级别的访问权限。该服务不会使用云提供商提供的数据库,而是在提供商上启动虚拟服务器,并使用这些服务器安装和配置 MySQL。他们可以在操作系统上调整设置,并为您提供访问托管实例的服务器的权限。第三方 MySQL 提供商的一个示例是 ScaleGrid,它目前可以在四个不同的云中管理实例。

第三方产品

以下第三方提供商提供托管的 MySQL 数据库,您可以根据需要购买、配置和扩展这些数据库

服务器和大部分 MySQL 将由提供商管理,而您可以设置数据库运行的云平台、扩展选项、调整设置和管理访问权限。您可以将数据库配置为可从互联网连接,或者将它们直接连接到由同一提供商管理的应用程序。

成本

在成本方面,第三方解决方案通常也具有高度可变性。作为用户,您需要为部署到的云中的计算资源付费,以及数据库管理服务收取的管理费用。由于您为更基本的资源而不是托管数据库向云提供商付费,因此这方面的成本可能会更低。但是,与管理服务相关的成本可能会在某些价格点上累积起来变得更高。您需要了解每一方在不同级别的扩展方式,以确定您的总成本。

性能

数据库的性能特征也可能存在很大差异。由于您的管理服务安装在云中的计算实例上,因此您的提供商除了可以调整 MySQL 设置外,还可以调整服务器配置。这意味着他们可能能够调整某些设置,使其更合理地满足您的需求。

另一方面,他们可能无法访问调整所需的虚拟化和硬件组件的底层。强烈建议您针对云提供商提供的原生数据库测试您的性能。

可扩展性

第三方托管数据库的可扩展性通常非常好。因为这些提供商可以在任何具有足够资源的计算实例上部署,所以他们有时可以为您提供比云提供商提供的更广泛的扩展选项。如果您的扩展原因之一是为了提高可用性,许多第三方服务都能够跨多个可用区甚至多个提供商。

管理复杂性

管理数据库的第三方服务具有不同的复杂性。因为此选项需要在两个不同的提供商(托管计算实例的云和数据库管理服务)之间进行协调,所以与使用云提供商提供的原生数据库服务相比,其复杂性会自然增加。

一些管理服务将自己定位为简化的选项,以与共享网络托管相同的方式隐藏复杂性。其他解决方案利用操作系统可访问的事实,为用户提供大量配置选项。许多服务都提供这两种体验,以使用户能够找到自己喜欢的复杂程度。

其他说明

将数据库管理与底层资源提供商分离既有优点也有缺点。

如果您的数据库管理服务抽象了底层,您在迁移到不同的云提供商方面可能会有更大的灵活性。此抽象还使您能够选择您感到舒适的复杂程度。您可以使用数据库管理服务提供的完整抽象和界面,但由于您还可以访问为您配置的数据库服务器,因此您可以登录并根据需要修改数据库服务器。数据库管理服务还可以提供一个简单的界面来管理这些操作系统级别的调整。

这种设置的缺点在于,您将依赖多个方来正确操作您的数据库。这可能会增加服务中断的可能性。您也可能会错过云提供商提供的数据库服务中可用的任何内部优化。您的数据库管理服务只能访问云提供商公开给他们的内容,并且他们将无法优化底层的虚拟化或硬件层。

总的来说,使用第三方管理服务是关于偏好和测试。您需要测试性能并了解定价结构如何在不同使用级别影响您。

总结

以下是此处讨论的各种选项如何相互比较的概述

托管选项本地开发机器独立服务器云提供商托管第三方托管应用程序平台管理
项目阶段开发开发、登台、生产开发、登台、生产开发、登台、生产开发、登台、生产
成本无额外费用变量。购买或租赁额外的
服务器以及额外的管理成本。
高度可变,取决于您的选择
和使用情况。
高度多样化,取决于您的选择
和使用情况。
高度可变
性能高潜力高度可变高度可变高度可变
可扩展性高潜力
管理复杂度
其他说明不需要网络配置。适合本地开发。
用于本地开发。
最灵活的选项。也需要最多的
手动管理。如果您有
内部硬件或数据库专业知识
可以用于管理,这是一个不错的选择。
云提供商通常提供的可扩展性极强的解决方案,
该解决方案可以运行您的应用程序。
这允许对网络和性能进行额外控制,
而无需
运行您自己的服务器的繁重工作。
第三方托管数据库具有许多
与云提供数据库相同的优势。
但是,通过
第三方管理您的数据库,您可以将数据库
管理与底层云提供商分离。
这可以简化将来迁移到其他
主机的工作,并且有时可以允许
更强大的管理选项。
应用程序提供的数据库服务
平台通常专注于简单
管理和访问高于大多数其他
因素。成本可能会有很大差异
取决于您的使用情况,因此请务必
关注扩展和使用情况
如何影响您的付款。

托管数据库的正确选择在很大程度上取决于应用程序的要求、开发阶段以及您自己管理 MySQL 的能力。不同的选择在这些因素之间提供了权衡,使它们在某些时候或对于某些组织更合适。

关于作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以来一直撰写有关数据库、Linux、基础设施和开发人员工具的文章。他目前与妻子和两只兔子住在柏林。他通常不必以第三人称写作,这对所有相关方来说都是一种解脱。