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