从 MySQL 迁移到 Spanner

本页面简要介绍了如何将联机事务处理 (OLTP) 数据库从 MySQL 迁移到 Spanner。迁移到 Spanner 的过程可能有所不同,具体取决于数据大小、停机时间要求、应用代码复杂性、分片架构、自定义函数、故障切换和复制策略等因素。

Spanner 迁移分为以下步骤:

  1. 评估迁移。
  2. 迁移架构,并转换任何 SQL 查询。
  3. 迁移您的应用,使其可同时使用 MySQL 和 Spanner。
  4. 加载示例数据并优化性能。
  5. 迁移数据。
  6. 验证迁移。
  7. 配置割接和回退机制。

评估迁移

评估从源 MySQL 数据库到 Spanner 的迁移需要评估您的业务、技术、运营和财务需求。如需了解详情,请参阅评估迁移

迁移架构

您可以使用 Spanner 迁移工具将现有架构转换为 Spanner 架构

如需了解详情,请参阅从 MySQL 迁移架构概览

迁移应用以使用 Spanner

Spanner 提供了各种语言版本的一组客户端库,并且支持使用 Spanner 专有的 API 调用以及使用 SQL 查询数据修改语言 (DML) 语句来读取和写入数据。对于某些查询(例如按键直接读取行),使用 API 调用时的执行速度可能更快,因为不需要转换 SQL 语句。

Spanner 为 Java 应用提供了一个 JDBC 驱动程序

在迁移过程中,对于前文所述的 Spanner 中不提供的功能,您必须在应用中实现它们。例如,如需实现用于验证数据值和更新一个相关表的触发器,您需要在应用中使用读取或写入事务来读取现有行,验证限制条件,然后将更新后的行写入两个表。

Spanner 提供读取或写入事务和只读事务,用于确保数据的外部一致性。另外,如果您需要读取一致的数据版本(如下所示),可以通过读取事务来应用时间戳边界

  • 过去某一确切时间(最多 1 小时前)的数据。
  • 未来数据(在该时间到来之前,无法执行读取操作)。
  • 与可接受的有界限过期设置对应的数据(在这种情况下,在截至过去某个时间点之前,系统将返回一致的视图,无需检查其他副本上提供的后续数据)。这可以带来性能优势,但同时也可能会读取过时的数据。

将示例数据加载到 Spanner

您可以在执行完整的数据迁移之前将示例数据加载到 Spanner 中,以测试架构、查询和应用。

您可以使用 BigQuery 反向 ETL 工作流和 Google Cloud CLI 将少量 CSV 文件格式的数据加载到 Spanner 中。

如需了解详情,请参阅加载示例数据

如需将数据从 MySQL 转移到 Spanner,您还可以将 MySQL 数据库导出为一种可移植的文件格式(例如 XML),然后使用 Dataflow 将该数据导入 Spanner。

将数据迁移到 Spanner

优化 Spanner 架构并加载示例数据后,您可以将数据移至一个空的生产规模 Spanner 数据库中。

如需了解详情,请参阅从 MySQL 实时迁移数据

验证数据迁移

随着数据不断流入 Spanner 数据库,您可以定期对 Spanner 数据和 MySQL 数据运行比较,以确保二者保持一致。要验证一致性,您可以对两个数据源执行查询并比较查询结果。

借助 Dataflow,您可以使用联接转换对大型数据集执行详细比较。此转换采用 2 个键控数据集,并按键匹配值。然后可以比较匹配值是否相等。您可以定期运行此验证,直到一致性程度符合您的业务要求。

如需了解详情,请参阅验证数据迁移

配置割接和回退机制

您可以使用反向复制为 MySQL 设置割接和回退。割接和回退意味着,您可以制定应急计划以便在遇到 Spanner 相关问题时还原到源 MySQL 数据库。

在遇到不可预见的 Spanner 相关问题并需要以尽可能少地中断服务的方式回退到原始 MySQL 数据库时,反向复制非常有用。反向复制通过将写入 Spanner 的数据复制回源 MySQL 数据库来实现回退。

反向复制流程涉及以下步骤(这些步骤由 Spanner to SourceDB Dataflow 模板执行):

  1. 使用 Spanner 变更数据流从 Spanner 读取更改。

  2. 过滤前向迁移的更改。

  3. 转换 Spanner 数据,使其与源数据库架构兼容。

  4. 验证源数据库是否已包含指定主键的最新数据。

  5. 将数据写入源数据库。

后续步骤