MySQL
托管 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 需要您购买或租用您将使用的服务器空间。实际服务器可能位于您的组织内部,托管在数据中心,或作为由云提供商托管的虚拟机(也称为虚拟专用服务器或 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 容器移动到另一台服务器。您还可以在 Kubernetes 上运行使用 MySQL 的应用程序,这可以减少应用程序与 MySQL 之间的网络延迟。
托管服务
另一种不自行运行 MySQL 的方法是从提供商那里租用或购买 MySQL 数据库。托管服务允许您轻松地将数据库作为服务或 API 使用,而无需担心 MySQL 软件或底层服务器的幕后管理。
存在不同类型的托管服务以满足不同的需求。本节将涵盖由托管或云提供商提供的服务、第三方托管数据库以及应用程序平台提供的数据库。
云提供商管理的数据库
最熟悉的托管 MySQL 托管类型可能就是云或托管提供商提供的类型。其中一些示例包括亚马逊网络服务 (AWS) 的 RDS(关系数据库服务)、谷歌云平台 (GCP) 的 Cloud SQL 和 Azure Database。
| 托管选项 | 云提供商管理 |
|---|---|
| 项目阶段 | 开发、暂存、生产 |
| 成本 | 高度可变,取决于您的选择 和使用情况。 |
| 性能 | 高度可变 |
| 可伸缩性 | 高 |
| 管理复杂性 | 低 |
| 附加说明 | 一种高度可扩展的解决方案,通常由 可以运行您的应用程序的同一云提供商提供。 这允许对网络和性能进行额外控制, 而无需自行运行服务器的繁重工作。 。 |
云提供商提供各种 MySQL 数据库,这些数据库经过精心调整,可在其数据中心运行并与其其他服务无缝协作。
云提供商
以下云提供商提供托管 MySQL 数据库,您可以根据需要购买、配置和扩展这些数据库
服务器和大部分 MySQL 将由托管提供商管理,而您将能够设置扩展选项、调整设置和管理访问。您可以将数据库配置为可从互联网连接,或将它们直接连接到由同一提供商管理的应用程序。
成本
由云提供商管理的 MySQL 数据库成本范围很广。在低端,一些提供商提供免费层,性能和正常运行时间最低。在高端,如果流量意外激增,自动扩展以满足任何需求可能会让您在一夜之间花费数千美元。与大多数云服务一样,您的实际使用情况将影响您每月的账单。许多云提供商提供成本警报,甚至在使用量/成本超过某个点时自动关闭。监控您的使用情况并配置截止点以管理数据库系统的运营成本非常重要。
可扩展性
尽管成本有时难以预测,但好消息是云中的扩展非常容易。分配给数据库的资源可以即时配置。这意味着您只需更改帐户设置,即可增加存储容量、内存和计算能力,或管理数据的副本数量。一个强大的功能,如果配置不当,可能会导致高成本,那就是根据当前需求动态扩展数据库资源的能力。这使您始终拥有满足需求的容量,前提是您可以支付成本。
性能
与可扩展性相关,性能是云中另一个极其灵活的领域。您通常可以根据您的使用模式微调对数据库性能影响最大的设置。如果当前配置能力不足,您还可以分配额外的资源。将数据库与使用它们的应用程序 colocating 也可以帮助您在数据库和应用程序之间获得良好的网络性能。
管理复杂性
就管理复杂性而言,云托管数据库相当简单。您正在付费让提供商为您承担大部分管理负担。虽然您仍然需要控制您的帐户和影响数据库的设置,但硬件、操作系统和大部分 MySQL 配置将由提供商处理。这对于减少使用数据库的管理开销具有巨大影响,但在某些特殊情况下,您可能无法获得所需的调优级别。
补充说明
总的来说,为云提供商管理的 MySQL 数据库付费通常是一个有吸引力的选择。它在扩展性和性能方面提供了极大的灵活性,同时减少了管理工作量。使用云提供商的数据库服务的缺点是,在某些级别上,您最终支付的费用可能会比其他方式高。此外,如果您的工具开始过于依赖提供商特定的功能,您可能会面临被当前提供商束缚的风险。
第三方托管数据库
除了直接从云提供商购买数据库之外,您还可以选择通过第三方提供商管理数据库。在大多数情况下,此选项会将数据库部署和管理到您选择的云或多个云上,从而将数据库管理与底层资源提供商解耦。
| 托管选项 | 第三方管理 |
|---|---|
| 项目阶段 | 开发、暂存、生产 |
| 成本 | 高度可变,取决于您的选择 和使用情况。 |
| 性能 | 高度可变 |
| 可伸缩性 | 高 |
| 管理复杂性 | 低 |
| 附加说明 | 第三方托管数据库具有许多 与云提供商数据库相同的优点。 然而,通过第三方管理数据库, 您可以将数据库管理与底层云提供商 解耦。这可以使将来迁移到不同的 主机更容易,并且有时可以提供 更强大的管理选项。 。 |
由第三方提供商管理的数据库通常使用与云提供商本身提供的数据库相同的基本组件。但是,第三方提供商通常与多个云协作,在您的帐户中启动资源,并且如果您愿意,通常会为您提供更低级别的访问权限。该服务不是使用云提供商提供的数据库,而是在提供商上启动虚拟服务器并使用这些服务器安装和配置 MySQL。他们可以调整操作系统上的设置,并为您提供对托管实例的服务器的访问权限。第三方 MySQL 提供商的一个例子是 ScaleGrid,它目前可以管理四个不同云中的实例。
第三方产品
以下第三方提供商提供托管 MySQL 数据库,您可以根据需要购买、配置和扩展这些数据库
服务器和大部分 MySQL 将由提供商管理,而您将能够设置数据库运行在哪个云平台、扩展选项、调整设置和管理访问。您可以配置数据库以从互联网连接,或将它们直接连接到由同一提供商管理的应用程序。
成本
就成本而言,第三方解决方案通常也高度可变。作为用户,您需要支付您部署到的云中的计算资源费用,以及数据库管理服务收取的管理费用。由于您向云提供商支付的是更基础的资源费用,而不是托管数据库,因此这方面的成本可能会更低。然而,与管理服务相关的成本可能会使它在某些价格点上累计更昂贵。您需要弄清楚每个方面在不同级别上的扩展方式,以确定您的总成本。
性能
您的数据库的性能特征也可能显著不同。由于您的管理服务安装在云中的计算实例上,您的提供商除了 MySQL 设置外,还能够调整服务器配置。这意味着他们可能能够调整一些设置以更合理地匹配您的需求。
另一方面,他们可能无法访问虚拟化和硬件组件的低级层,无法进行充分调优。强烈建议针对云提供商提供的原生数据库测试您的性能。
可扩展性
第三方托管数据库的可扩展性通常非常好。因为这些提供商可以部署到任何具有足够资源的计算实例上,所以他们有时可以为您提供比云提供商公开的更广泛的扩展选项。如果您的扩展原因之一是提高可用性,许多第三方服务能够跨多个可用区甚至提供商。
管理复杂性
用于管理数据库的第三方服务具有一系列复杂性。由于此选项需要两个不同提供商(托管计算实例的云和数据库管理服务)之间的协调,因此与使用云提供商提供的原生数据库服务相比,复杂性会固有地增加。
一些管理服务将自己定位为简化的选项,以与共享 Web 托管类似的方式隐藏复杂性。其他解决方案则利用操作系统可访问的事实,向用户公开广泛的配置选项。许多服务都提供两种体验,以允许用户找到自己偏好的复杂性级别。
补充说明
将数据库管理与底层资源提供商解耦既有优点也有缺点。
如果您的数据库管理服务抽象了底层,您在迁移到不同的云提供商时可能会有更大的灵活性。这种抽象还使您能够选择您觉得舒适的复杂程度。您可以使用数据库管理服务提供的完整抽象和接口,但由于您也可以访问为您预置的数据库服务器,因此您可以登录并根据需要修改数据库服务器。数据库管理服务还可能提供一个简单的界面来管理这些操作系统级别的调整。
此设置的缺点在于,您将依赖多个方来正确操作您的数据库。这可能会增加服务中断的可能性。您还可能会错过云提供商提供的数据库服务可用的任何底层优化。您的数据库管理服务将只能访问您的云提供商向其公开的内容,并且他们将无法优化底层虚拟化或硬件层。
总的来说,使用第三方管理服务是关于偏好和测试的。您需要测试性能并了解定价结构在不同使用级别上可能如何影响您。
总结
以下是此处讨论的各种选项之间的比较概述
| 托管选项 | 本地开发机器 | 独立服务器 | 云提供商管理 | 第三方管理 | 应用平台管理 |
|---|---|---|---|---|---|
| 项目阶段 | 开发 | 开发、暂存、生产 | 开发、暂存、生产 | 开发、暂存、生产 | 开发、暂存、生产 |
| 成本 | 无额外费用 | 可变。购买或租赁一台额外 服务器,外加额外的管理成本。 | 高度可变,取决于您的选择 和使用情况。 | 高度可变,取决于您的选择 和使用情况。 | 高度可变 |
| 性能 | 低 | 高潜力 | 高度可变 | 高度可变 | 高度可变 |
| 可伸缩性 | 无 | 高潜力 | 高 | 高 | 高 |
| 管理复杂性 | 低 | 高 | 低 | 低 | 低 |
| 附加说明 | 不需要网络配置。适用于 本地开发。 | 最灵活的选项。也需要最多 的人工管理。如果您 拥有内部硬件或数据库专业知识 并能将其用于管理,这是一个不错的选择。 | 一种高度可扩展的解决方案,通常由 可以运行您的应用程序的同一云提供商提供。 这允许对网络和性能进行额外控制, 而无需自行运行服务器的繁重工作。 。 | 第三方托管数据库具有许多 与云提供商数据库相同的优点。 然而,通过第三方管理数据库, 您可以将数据库管理与底层云提供商 解耦。这可以使将来迁移到不同的 主机更容易,并且有时可以提供 更强大的管理选项。 。 | 应用程序平台提供的数据库服务 通常侧重于简单的管理和访问, 而很少考虑其他因素。 成本可能会因您的使用情况而 差异很大,因此密切关注扩展和 使用情况如何影响您的付款至关重要。 。 |
选择哪种数据库托管方式很大程度上取决于您的应用程序需求、您的开发阶段以及您自行管理 MySQL 的能力。不同的选择在这些因素之间存在权衡,这使得它们在特定时间或对特定组织更合适。
