MySQL

5 种托管 MySQL 数据库的方式

分享到

简介

有多种方法可以为你的项目启动并运行 MySQL 服务器。你可以自己安装和管理服务器实例,或者可以利用许多提供托管 MySQL 访问的提供商之一。

本文将介绍 MySQL 服务器的一些最常见选项,并比较它们的优势和挑战。通过弄清楚你的项目和团队的优先事项,你可以找到适合你需求的解决方案。

自托管 MySQL

最灵活且最容易描述的选项是自托管你的 MySQL 服务器。自托管 MySQL 意味着你在你控制的计算机上安装和配置数据库,就像任何其他软件一样。

自托管让你在安装和运行数据库的位置方面有很多选择。如果你选择本节中的选项之一,你可以使用本指南来学习如何在你的系统上安装 MySQL

在本地开发计算机上安装 MySQL

对于早期开发、测试和概念验证,在本地开发机器上安装 MySQL 可以为你的数据库提供可靠、易于管理的访问。

托管选项本地开发机器
项目阶段开发
成本无额外成本
性能
可扩展性
管理复杂性
附加说明不需要网络配置。适用于本地开发。
for local development.

成本

在你的开发机器上设置 MySQL 是免费的。你正在从一台在你开发时已经处于活动状态的计算机上运行数据库。你只需要考虑 MySQL 在运行后将消耗的资源量。

性能

在你的开发机器上安装 MySQL 是一种低性能选项。

你的数据库将不容易或可靠地供其他用户使用。你对数据库的自身使用将受到你的硬件和你为 MySQL 预留的资源量的限制。这些顾虑在本地测试或开发时通常不是问题,但对于任何更复杂的情况来说都完全不够。

可扩展性

在你的开发机器上托管几乎不给你提供可扩展性。你可以更改分配给 MySQL 的资源量,但仅此而已。你可以升级你的开发机器,但这在长期来看既不实用也不是特别有用。

管理复杂性

在复杂性方面,在你的本地机器上托管 MySQL 通常非常简单。大多数操作系统的安装过程都经过深思熟虑,并且可以轻松启动或停止生成的数据库。然而,考虑到资源限制和消费者网络的不稳定性,为外部访问配置你的本地 MySQL 实例通常不值得付出努力。

尽管在本地设置 MySQL 并不复杂,但你仍然需要管理你的数据库并在必要时执行任何升级。这些升级可能偶尔需要用于安全补丁,如果你关心你的数据,那么跟踪这些实例将是你的责任。

附加说明

在本地安装意味着即使网络中断,你的数据库也可以从你的开发计算机访问。这在旅行时尤其有帮助。在本地访问你的数据消除了网络复杂性,使你可以专注于开发而不是数据库访问。

在本地开发计算机上安装 MySQL 很有用,但有一些非常明显的限制。你无法轻松配置多用户访问,并且你的数据库正常运行时间直接与你的计算机的可用性和网络稳定性相关联。由于这些原因,在你的开发机器上安装几乎总是一种补充选项,旨在提高你的生产力和灵活性,而不是唯一的数据库安装。

在单独的服务器上安装 MySQL

另一种自托管选项是在单独的计算机上安装和管理 MySQL。一些常见的实现包括

  • 在专用服务器上安装:MySQL 配置为在专用计算机上运行的唯一服务。它可以访问机器的所有资源。
  • 与相关应用程序一起安装:MySQL 与需要它的应用程序一起安装。对于小型部署来说,这是一个流行的选择,因为所有组件都可以在一台机器上管理。计算机的资源必须在 MySQL 和其他正在运行的应用程序之间共享。

在单独的服务器上安装 MySQL 与在开发机器上安装看起来非常不同

托管选项单独的服务器
项目阶段开发、暂存、生产
成本可变的。购买或租用额外的服务器加上额外的管理成本。
server plus additional management costs.
性能高潜力
可扩展性高潜力
管理复杂性
附加说明最灵活的选项。也需要最多的手动管理。如果你有内部硬件或数据库专业知识可以投入到管理中,这是一个不错的选择。
amount of hands-on management. A good choice if
you have hardware or database expertise in-house
that you can devote to management.

一个需要进一步强调的考虑因素是,当你自己管理 MySQL 时,安全性是你的责任。如果你已经处理了基础设施,软件和网络安全由你组织的其他部门负责,这可能不是问题。但是,如果你不太熟悉,保护你的 MySQL 实例及其包含的数据可能是一个重大挑战。在决定走这条路之前,请务必将其纳入你的计划。

成本

在专用或共享机器上运行 MySQL 需要你购买或租用你将使用的服务器空间。实际的服务器可能位于你组织的本地,托管在数据中心,或作为由云提供商托管的虚拟机(也称为虚拟专用服务器或 VPS)。

服务器的成本可能变化很大。低功耗 VPS 可能非常便宜,而多个专用服务器将很快变得昂贵。然而,服务器的成本不是唯一的考虑因素。你还必须考虑额外的管理成本。根据你的部署环境,这可能包括管理数据库层、服务器软件和硬件的人员成本。这些成本将取决于你的可用性要求、托管环境和运营规模。

性能

在单独的服务器上部署 MySQL 具有实现非常高性能的潜力。由于运行 MySQL 的机器的规格在你控制之下,你可以完全灵活地选择符合你需求的硬件。如果你将来需要扩展,你可以升级你的硬件或购买额外的服务器来扩展你的工作负载。

你还可以微调你的数据库配置以获得额外的性能优势。你可以调整与内存管理、缓存、打开文件处理、客户端连接等相关的设置。虽然这为你提供了很大的权力,但利用这些选项需要时间、专业知识和实验。与运行你自己的服务器的其他方面一样,好处受到你可以分配给项目这方面的时间和金钱的限制。

可扩展性

如上所述,在专用服务器上运行使你可以对数据库系统不断变化的需求做出反应。你可以通过向数据库服务器添加更多资源和硬件来向上扩展,也可以通过在 MySQL 服务器池中平衡你的请求来向外扩展。这两种选择都是对不同类型压力的合理响应。

管理复杂性

一般来说,扩展与性能调优具有相同的优势和局限性:你拥有令人难以置信的灵活性和权力,但你负责管理成本和配置。任何需要额外硬件(例如需求增加)的更改都必须与主动监控相结合,以便你的组织有时间采购硬件、配置软件并平衡你的工作负载。

附加说明

总而言之,管理你自己的 MySQL 可能非常高效、强大且灵活,但可能需要大量专门的时间和资源。此选项最适合具有内部基础设施和服务器专业知识的组织,他们希望控制其数据库的运行时环境、配置和架构拓扑。

使用 Docker 的 MySQL

另一种自托管选项是使用 Docker 将 MySQL 作为容器运行。Docker 允许你在本地或远程机器上的隔离环境中运行 MySQL。

托管选项Docker 容器
项目阶段开发、暂存、生产
成本可变的。购买或租用额外的服务器加上额外的管理成本。
server plus additional management costs.
性能中-高
可扩展性
管理复杂性中-高
附加说明容器化基础设施在复杂性方面可能差异很大。虽然容器使
in terms of complexity. While containers make
许多事情变得更容易,尤其是在开发
many things easier, especially during development
和暂存期间,但它们也需要经验和
and staging, they also require experience and
复杂的编排才能在生产环境中良好运行。
complex orchestration to run well in production.

对于生产工作负载,如果你已经投入到

  • For production workloads, containers are likely
  • Kubernetes 等容器编排中,那么容器可能只是
  • only a good choice if you are already invested in
  • 一个不错的选择。

container orchestration like Kubernetes.

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

  • Some of the benefits of using Docker over a traditional local installation include
  • 与安装 MySQL 相比,使用官方 MySQL Docker 镜像运行 MySQL 需要更少的精力。

Running MySQL with the official MySQL Docker image requires less effort compared to installing MySQL.

Docker 允许你在多个环境中重现完全相同的数据库配置,这对于在需要相同 MySQL 配置的项目上协作的团队很有用。

Docker allows you to reproduce the exact same database configuration across multiple environment which is useful for teams collaborating on a project requiring the same MySQL configuration.

你可以使用 Docker 来控制分配给 MySQL 的 CPU、内存和存储资源。

You can use Docker to control the CPU, memory, and storage resources allocated to MySQL.

Docker 减少了 MySQL 与在你的机器上运行的其他软件之间不兼容的可能性。

Docker reduces the potential for incompatibilities between MySQL and other software running on your machine.

托管选项在本地或远程机器上使用 Docker 安装 MySQL 是相似的,尽管根据你是否将 MySQL 用于生产工作负载,还有一些额外的考虑因素。
项目阶段开发、暂存、生产
成本Installing MySQL with Docker locally or on a remote machine is similar, though there are some additional considerations depending on whether you use MySQL for production workloads.
虽然 Docker 简化了运行 MySQL 的某些方面,但有一些权衡需要注意
性能While Docker simplifies certain aspects of running MySQL, there are a few trade-offs to be aware of
可扩展性
管理复杂性
附加说明根据你的配置,使用 Docker 运行可能会增加你的网络配置的复杂性。
Depending on your configuration, running with Docker can increase the complexity of your network configuration.
Docker 添加了一个额外的抽象层,这需要额外的安全考虑,并且有可能使故障排除不太直接。
Docker adds an additional layer of abstraction, which requires additional security considerations and has the potential to make troubleshooting less direct.
容器和 Kubernetes

With Kubernetes, you can run Docker containers on a cluster consisting of multiple servers. If one server in the cluster needs to be taken down for maintenance, Kubernetes will move the MySQL container to another server as long as the underlying data partition is accessible. You can also run your application that uses MySQL on Kubernetes, which can reduce network latency between the application and MySQL.

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

托管服务

也许最熟悉的托管 MySQL 托管类型是云或托管提供商提供的类型。这些示例包括亚马逊网络服务的 RDS(关系数据库服务)、谷歌云平台的 Cloud SQL 和 Azure Database。

Cloud provider-managed

云提供商托管

Highly variable, depending on your selections

高度可变的,取决于你的选择

and usage.

和使用情况。

Highly variable

高度可变的

A highly scalable solution often offered by

一种高度可扩展的解决方案,通常由

第三方托管数据库

作为直接从云服务商购买数据库的替代方案,您可以选择通过第三方提供商来管理您的数据库。在大多数情况下,此选项将在您选择的云平台上部署和管理数据库,从而将数据库管理与底层资源提供商分离。

托管选项第三方托管
项目阶段开发、暂存、生产
成本差异很大,取决于您的选择
虽然 Docker 简化了运行 MySQL 的某些方面,但有一些权衡需要注意
性能While Docker simplifies certain aspects of running MySQL, there are a few trade-offs to be aware of
可扩展性
管理复杂性
附加说明第三方托管数据库具有许多
与云服务商提供的数据库相同的好处。
然而,通过第三方管理您的数据库,
您可以将数据库管理与底层的云服务商
解耦。
这可以使将来迁移到不同的
主机变得更容易,有时还可以提供
更强大的管理选项。

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

第三方产品

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

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

成本

在成本方面,第三方解决方案通常也差异很大。作为用户,您将需要为您部署到的云平台中的计算资源以及数据库管理服务收取的管理成本付费。由于您向云服务商支付的是更基础的资源费用,而不是托管数据库的费用,因此这方面的成本可能会更低。但是,与管理服务相关的成本可能会使累积成本在某些价格点上更高。您需要弄清楚每一方在不同级别如何扩展,以确定您的总成本。

性能

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

另一方面,他们可能无法访问虚拟化和硬件组件的底层,而这些底层对于充分调整是必要的。强烈建议您针对云服务商提供的原生数据库测试您的性能。

可扩展性

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

管理复杂性

用于管理数据库的第三方服务具有一系列复杂性。由于此选项需要在两个不同的提供商(托管计算实例的云平台和数据库管理服务)之间进行协调,因此与使用云服务商提供的原生数据库服务相比,复杂性固有地增加。

一些管理服务将自己定位为简化的选项,以与共享 Web 托管非常相似的方式隐藏复杂性。其他解决方案则利用操作系统可访问的事实,向用户公开各种配置选项。许多服务都提供这两种体验,以允许用户找到自己喜欢的复杂程度。

补充说明

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

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

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

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

总结

以下概述了此处讨论的各种选项之间的比较

托管选项本地开发机器单独的服务器在本地或远程机器上使用 Docker 安装 MySQL 是相似的,尽管根据你是否将 MySQL 用于生产工作负载,还有一些额外的考虑因素。第三方托管应用平台托管
项目阶段开发开发、暂存、生产开发、暂存、生产开发、暂存、生产开发、暂存、生产
成本无额外成本可变的。购买或租用额外的服务器加上额外的管理成本。
server plus additional management costs.
Installing MySQL with Docker locally or on a remote machine is similar, though there are some additional considerations depending on whether you use MySQL for production workloads.
虽然 Docker 简化了运行 MySQL 的某些方面,但有一些权衡需要注意
差异很大,取决于您的选择
虽然 Docker 简化了运行 MySQL 的某些方面,但有一些权衡需要注意
While Docker simplifies certain aspects of running MySQL, there are a few trade-offs to be aware of
性能高潜力While Docker simplifies certain aspects of running MySQL, there are a few trade-offs to be aware ofWhile Docker simplifies certain aspects of running MySQL, there are a few trade-offs to be aware ofWhile Docker simplifies certain aspects of running MySQL, there are a few trade-offs to be aware of
可扩展性高潜力
管理复杂性
附加说明不需要网络配置。适用于本地开发。
for local development.
最灵活的选项。也需要最多的手动管理。如果你有内部硬件或数据库专业知识可以投入到管理中,这是一个不错的选择。
amount of hands-on management. A good choice if
you have hardware or database expertise in-house
that you can devote to management.
根据你的配置,使用 Docker 运行可能会增加你的网络配置的复杂性。
Depending on your configuration, running with Docker can increase the complexity of your network configuration.
Docker 添加了一个额外的抽象层,这需要额外的安全考虑,并且有可能使故障排除不太直接。
Docker adds an additional layer of abstraction, which requires additional security considerations and has the potential to make troubleshooting less direct.
容器和 Kubernetes
第三方托管数据库具有许多
与云服务商提供的数据库相同的好处。
然而,通过第三方管理您的数据库,
您可以将数据库管理与底层的云服务商
解耦。
这可以使将来迁移到不同的
主机变得更容易,有时还可以提供
更强大的管理选项。
应用平台提供的数据库服务
通常侧重于简单的
管理和访问,高于大多数其他
因素。成本可能会有很大差异
取决于您的使用情况,因此重要的是
密切关注扩展和使用情况
如何影响您的付款。

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

关于作者
Justin Ellingwood

Justin Ellingwood

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