跳转到

自行管理的 MySQL 与 Cloud SQL for MySQL

MySQL 是全球最受欢迎的开源关系型数据库之一。它之所以流行,其中一个原因是它能够以多种方式托管和管理数据库,从而满足用户的工作负载要求。用户可以选择将数据库设置为本地自行管理、在云虚拟机中自行管理,或使用云服务提供商的全代管式产品。本文重点介绍自行管理的 MySQL 选项和全代管式解决方案,即 Google Cloud 提供的 Cloud SQL for MySQL。 本文还将介绍每个选项的优缺点。

自行管理的 MySQL

自行管理的 MySQL 选项意味着用户(大多数情况下是数据库管理员)负责数据库、操作系统 (OS)、网络、存储、虚拟机 (VM) 实例以及托管数据库实例和服务器的硬件的大部分设置、安装、配置和维护活动。通过利用云服务提供商(如 Google Cloud),您可以更轻松地完成其中一些任务,例如硬件、虚拟机实例、存储、网络和操作系统任务。无论用户是自行管理本地数据库还是在云端自行管理,都需要负责一些重要数据库管理任务,以确保系统顺畅运行。下面列出了这些任务。

  • 可用性:硬件和软件组件不可避免地会发生故障。不过,在设计系统时应使其能够承受硬件和软件故障,并确保数据库、服务器和应用的持续可用性。 
  • 数据库维护:在自行管理的 MySQL 选项中,用户需要使用最新版本的软件更新应用堆栈的各个层,决定支持生命周期结束、不受支持或旧版本的硬件、操作系统和其他软件。此外,用户需要定期安装软件、操作系统和 MySQL 补丁,同时确保数据库正常运行,而不会出现重大中断。
  • 可伸缩性:随着应用使用量的增加,对改善数据库性能的需求也会增加。 类似地,为了支持大量工作负载或客户群,硬件资源也需要进行纵向扩容或横向扩容。 对于自行管理的 MySQL,用户需承担此责任。在本地环境中扩缩硬件资源是一项非常耗时且复杂的活动,有时会导致系统停机。
  • 安全性:近来,安全性已经成为最重要的一个方面,横跨数据库系统的多层,从物理上确保硬件安全配置网络防火墙、保护数据库连接等。这些是复杂的活动,在自行管理设置方面需要大量的工作和专业知识。
  • 监控:除了设置、安装和配置 MySQL 之外,用户还需要关注监控所有堆栈层的各个组件,例如在硬件级别、操作系统和 MySQL 中进行监控,以及在发生故障时采取纠正措施。

下图显示了用户在选择自行管理设置时的责任。虽然 Google Cloud 上的自行管理减少了与硬件、计算、网络和存储相关的一些任务,但堆栈剩余层的管理仍由用户负责。数据库管理员和应用开发者仍必须花费足够的时间、精力和资源来管理 MySQL。

显示数据库管理员的所有责任在于自行管理的数据库托管的图片

Cloud SQL for MySQL 是什么?

Cloud SQL 是一项全代管式数据库服务,可让您轻松地在 Google Cloud 上设置配置、维护、管理和控制 MySQL、PostgreSQL 和 SQL Server 数据库。Cloud SQL 可管理硬件、网络、操作系统、安全、监控、维护、可用性和扩缩 MySQL 数据库的所有方面。用户可以不必关注所有这些责任,而专注于应用开发并为客户带来价值。

下图与上图类似,显示了管理 MySQL 数据库各个层所涉及的任务,唯一的区别在于 Cloud SQL 代表用户管理的所有任务以蓝色表示。

全代管式数据库托管图片

除了管理如上所示的许多任务之外,Cloud SQL 还提供自行管理环境中不提供的各种功能和解决方案。下面列出了 Cloud SQL 提供的一些主要功能。

可靠性:备份和恢复是数据库管理中最重要的活动。Cloud SQL 提供自动备份按需备份功能,您可以使用它们在数据库损坏、发生灾难或意外修改数据时将数据库恢复到某个时间点

可用性:Cloud SQL 通过实例化跨多个可用区托管数据库的多台服务器来提供高可用性,并具有自动故障切换功能,以在虚拟机或数据中心出现故障时提供高可用性。Cloud SQL 保证在全球任何地方的可用性都超过 99.95%。

除了高可用性功能之外,Cloud SQL 还提供全天候站点可靠性工程 (SRE) 团队,负责确保 Cloud SQL for MySQL 数据库实例在 Google Cloud 上的可靠性。

跨区域读取副本是另一种功能,可在发生任何故障时用作灾难恢复机制。借助该功能,用户可以在其他网站(区域)中快速启动受影响的数据库,同时尽量减少对业务的影响。

可伸缩性:Cloud SQL 支持创建 MySQL 读取副本(例如位于同一区域或远程区域的其他 MySQL 只读实例),这些实例允许处理来自副本以及主实例的请求,从而提供更好的读取性能。读取副本还可用于报告用途,可在满足业务需求后销毁。

Cloud SQL 支持在 MySQL 实例上对资源(CPU、内存和存储空间)进行纵向扩容和纵向缩容,停机时间非常短。然而,对于自行管理的设置,这些复杂的活动需要大量的工作、专业知识和规划。

安全性:Cloud SQL for MySQL 数据库服务器位于 Google Cloud 安全的数据中心内,可确保较高级别的安全性。此外,Google Cloud 还提供与 Virtual Private Cloud 的专用连接,以及受防火墙保护并由用户控制的网络访问机制,这可以确保用户数据库服务器不受恶意操作者的影响。

安全的另一个方面是遵守安全法规。Cloud SQL 符合许多公认的法规,例如 SSAE 16、ISO 27001、PCI DSS 和 HIPAA。

借助 Cloud SQL,您可以通过 IAM 集成管理用户及其对数据库的访问权限。 此集成可为 Google Cloud 用户管理授权和身份验证,并提供对特定 Google Cloud 资源的精细访问权限,从而防止对数据库的未经授权的访问。此外,Cloud SQL 还提供用于控制 Cloud SQL 资源访问权限的预定义角色,使身份和访问权限控制变得简单易行

Cloud SQL 的另一个安全功能是对静态数据和传输中的数据进行加密,确保未经授权的用户无法访问用户数据。

Cloud SQL 为数据库用户提供了密码验证功能,可让客户针对密码复杂度、最短密码长度、密码更改间隔以及在实例级别的密码中使用用户名来定义密码政策。客户还可以在个人用户级别为密码失效天数、失败的尝试次数和旧的密码更改要求定义政策。Cloud SQL 的这些功能提供了安全性合规性最佳实践,并降低了未经授权访问关键数据的风险。

Cloud SQL 还提供了使用审核日志插件审核 MySQL 数据库上的操作的方式。 通过审核日志,您可以深入了解谁执行了什么操作、对哪个对象执行了什么操作以及何时执行了操作。借助数据库审核,您可以跟踪数据库中的特定用户操作,例如表更新、读取查询、用户特权授予等。

可观测性:Cloud SQL 提供了各种监控解决方案,其开箱即用指标列表也在不断增加,可帮助您深入了解数据库的状态。用户可以使用指标来创建提醒,让管理员了解数据库的健康状况。 

Cloud SQL 还提供了 Query InsightsRecommender 等功能,让用户能够排查和识别查询或工作负载的性能瓶颈。这些功能很难在自行管理的 MySQL 环境中实现。

集成:Cloud SQL 可让您轻松连接到网络并与 Google Cloud 中的其他服务集成,例如 Google Kubernetes EngineCompute EngineCloud Run,从而轻松开发深度集成的解决方案。 Cloud SQL 还提供与 BigQueryLooker 的原生集成,可用于 Cloud SQL 中的数据分析处理。

修补:作为一项代管式服务,Cloud SQL 会自动更新实例以确保底层硬件和操作系统可靠、性能出色、安全、保持最新状态。其中大部分更新都在 Cloud SQL 实例启动和运行期间执行。但是,某些系统更新可能需要短暂中断服务,用户可以针对升级活动定义维护窗口

版本升级Cloud SQL 还提供自动升级数据库 (MySQL) 版本。用户还可以通过将数据迁移到更高版本的实例来升级主要版本。  

如何在 Cloud SQL for MySQL 中创建 MySQL 数据库实例?

自行管理的 MySQL 的优缺点

优点

  1. 能够使用 MySQL 生态系统中的任何 MySQL 分支(如 MariaDB 或 Percona)设置 MySQL。
  2. 可灵活配置 MySQL 并对其进行设置,因为用户可以完全控制实例、资源和操作系统。此外,用户可以使用自己选择的操作系统,根据需要配置操作系统,并根据需要配置 MySQL(没有任何限制)。
  3. 用户不受 Cloud SQL 限制(例如存储空间上限 64 TB)的约束。用户可能会超出 64 TB 存储空间上限,并使用高得多的计算基础架构来托管 MySQL。
  4. 用户拥有对 MySQL 实例的完整访问权限(包括 SUPER 特权),并且拥有操作系统的完整权限(包括 sudo 权限)。
  5. 即使不受 Cloud SQL 支持,用户也可以根据其要求设置高可用性和复制拓扑。  

缺点

  1. 用户负责在本地环境中管理复杂的硬件基础架构、网络和数据中心运营。即使在云端自行管理 MySQL,用户也需要应对设置复杂性、永久性磁盘和实例的配置问题,同时需要设计和管理高可用性集群、安全性、灾难恢复和可伸缩性。
  2. 及时更新数据库版本、操作系统版本和硬件系统,使其包含最新的补丁,以避免 bug 和安全漏洞,这样可能需要大量费用、资源、复杂性和停机时间。
  3. 在设置数据库时,用户必须在所有层(而不仅仅是数据库本身)中配置和管理安全性。例如,确保使用 SSL 对传输中的连接进行加密,使证书保持最新状态,对静态数据进行加密,以及管理用户和服务帐号对数据库的登录访问权限。
  4. 为确保实例的可用性,必须监控数据库系统的各个层是否存在故障。用户需要花费额外的资源来设置和配置监控工具。必须定义提醒,以便在发生错误时获得通知,并且需要采取纠正措施来解决所有故障。
  5. 用户需要花费大量的时间、资源和精力来设置和管理数据库,而不是关注应用开发。

Cloud SQL for MySQL 的优缺点

优点

  1. Cloud SQL for MySQL 提供方便用户使用的界面,可供您为开发者和工程师创建、管理、访问和监控 MySQL 数据库,即使是对于不具备数据库专业知识的人士也能轻松上手。为了快速上手,Cloud SQL 还提供了一种将现有 MySQL 数据库从本地或其他云迁移到 Google Cloud 的 Cloud SQL for MySQL 的简单方法。
  2. Cloud SQL for MySQL 提供了托管 MySQL 数据库所需的一组丰富功能,适用于从微型网站数据库到高度关键和庞大的企业应用、游戏应用以及分析用例数据的各种应用。用户可以利用这些丰富的功能构建高度可靠且可伸缩的应用。
  3. Cloud SQL 与用户共同承担安全责任。Cloud SQL 可确保较低级别的基础架构和网络的安全性,使用户能够专注于配置和开发更高级别的应用。
  4. Cloud SQL 提供了多种安全功能,例如密码验证插件审核日志记录,它们在社区版本中不易使用,并且在自行管理的环境中很难实现。 Cloud SQL 可简化这些功能,并让用户随时可使用这些功能。
  5. Cloud SQL 提供了多种与数据库交互的方法。用户可以使用 GUI、CLI 和 API 根据自己的需求自定义操作,只需极少的工作量。
  6. Cloud SQL 可让您轻松地与 BigQuery 等其他解决方案和产品集成,因此可以轻松开发分析解决方案。
  7. Cloud SQL 通过其高可用性基础架构、自我修复解决方案以及全天候 SRE 团队,负责数据库实例的可靠性。
  8. 这样,用户就可以将更少的时间和精力放在数据库的运营任务上,从而可以专注于应用开发,以便更高效地提供满足其业务需求的解决方案。
  9. 除了帮助管理数据库之外,Cloud SQL 还会提供提示和建议,帮助您使用 Query Insights建议等功能提高数据库性能。这些功能可让您在云端安全而经济高效地托管和管理数据库。
  10. Cloud SQL 提供客户服务,以简化与数据库相关的任何问题或请求所需的支持。

缺点

  1. Cloud SQL 不支持 MySQL 生态系统中的 MySQL 分支(例如 MariaDB 和 Percona)。
  2. 部分 MySQL 功能不受支持。详细了解不受支持的功能
  3. Cloud SQL 支持具有高达 624 GB RAM 和 96 个 CPU 的机器类型。最多支持 64 TB 的存储空间。 如果数据库需要更高的容量,自行管理选项将是目前唯一方案。

Google Cloud 提供旨在满足您业务需求的代管式 MySQL 数据库,可以完成包括弃用本地数据中心、运行 SaaS 应用和迁移核心业务系统在内的各种任务。