本部分包含有关以下内容的信息:
- Datastream 如何处理从来源 MySQL 数据库中拉取的数据的行为
- Datastream 支持的 MySQL 数据库版本
- 将 MySQL 数据库用作来源的已知限制
- 如何设置来源 MySQL 数据库以便将数据从该数据库流式传输到目标位置的概述
行为
本部分介绍了使用 Datastream 复制数据时 MySQL 源的行为。从 MySQL 数据库注入数据时,您可以使用基于 binlog 的复制或基于全局事务标识符 (GTID) 的复制。您可以在创建流时选择 CDC 方法。
基于二进制日志的复制
Datastream 可以使用二进制日志文件来记录 MySQL 数据库中的数据更改。然后,这些日志文件中包含的信息会被复制到目标位置,以重现源上所做的更改。
Datastream 中基于 binlog 的复制的主要特征包括:
- 可以选择给定 MySQL 来源中的所有数据库或特定数据库,以及数据库或特定表中的所有表。
- 复制所有历史数据。
- 复制所有数据操纵语言 (DML) 变更,例如从指定数据库和表插入、更新和删除。
- 仅复制已提交的更改。
基于全局事务标识符 (GTID) 的复制
Datastream 还支持基于全局标识符 (GTID) 的复制。
全局事务标识符 (GTID) 是一个唯一标识符,用于创建并与 MySQL 源上提交的每项事务相关联。此标识符不仅对于其来源是唯一的,而且对于给定复制拓扑中的所有服务器也是唯一的,这与基于二进制日志的复制不同,在基于二进制日志的复制中,数据库集群中的每个节点都维护自己的二进制日志文件,并具有自己的编号。如果发生故障或计划内停机,维护单独的二进制日志文件和编号可能会成为问题,因为二进制日志连续性中断,并且基于二进制日志的复制会失败。
基于 GTID 的复制支持故障切换和自托管式数据库集群,并且无论数据库集群发生什么变化,都能继续正常运行。
Datastream 中基于 GTID 的复制的主要特征包括:
- 可以选择给定 MySQL 来源中的所有数据库或特定数据库,以及数据库或特定表中的所有表。
- 复制所有历史数据。
- 复制所有数据操纵语言 (DML) 变更,例如从指定数据库和表插入、更新和删除。
- 仅复制已提交的更改。
- 无缝支持故障转移。
从基于二进制日志的复制切换到基于 GTID 的复制
如果您想更新数据流并从基于 binlog 的复制切换到基于 GTID 的复制,而无需执行回填,请执行以下步骤:
- 确保满足基于 GTID 的复制的所有要求。如需了解详情,请参阅配置源 MySQL 数据库。
- 您可以选择创建并运行基于 GTID 的测试数据流。如需了解详情,请参阅创建数据流。
- 创建基于 GTID 的数据流。先不要开始。
- 停止应用流量流向源数据库。
- 暂停基于现有 binlog 的数据流。如需了解详情,请参阅暂停直播。
- 等待几分钟,确保 Datastream 已捕获数据库中的所有数据。您可以在直播的直播详情页面上,通过监控标签页中的指标来检查这一点。数据新鲜度和吞吐量的值需要为
0
。 - 启动基于 GTID 的数据流。如需了解详情,请参阅开始直播。
- 恢复向源数据库发送的流量。
如果您不介意执行回填,可以在 BigQuery 中截断表,删除旧数据流,然后启动新的数据流并进行回填。如需详细了解如何管理回填,请参阅管理数据流对象的回填。
版本
Datastream 支持以下版本的 MySQL 数据库:
- MySQL 5.6
- MySQL 5.7
- MySQL 8.0
MySQL 8.4(仅支持基于 GTID 的复制)
Datastream 支持以下类型的 MySQL 数据库:
- 自行托管的 MySQL
- Cloud SQL for MySQL
- Amazon RDS for MySQL
- Amazon Aurora MySQL
- MariaDB
- Alibaba Cloud PolarDB
- Percona Server for MySQL
已知限制
将 MySQL 数据库用作来源的已知限制包括:
- 数据流限 10,000 个表。
- 主键定义为
INVISIBLE
的表无法回填。 - 如果表中的行数超过 5 亿,则无法回填,除非满足以下条件:
- 该表具有唯一索引。
- 索引的任何列都不可为 null。
- 索引不是降序。
- 索引的所有列都包含在流中。
- Datastream 在处理事件时定期从来源提取最新的架构。如果架构发生变化,Datastream 会检测到该变化并触发架构提取。不过,在架构提取之间,某些事件可能会被错误处理或被舍弃,从而导致数据差异。
- 并非所有对源架构的更改都可以自动检测到,在这种情况下可能会发生数据损坏。以下架构更改可能会导致数据损坏或无法处理下游事件:
- 删除列
- 在表中间添加列
- 更改列的数据类型
- 对列重新排序
- 删除表(如果同一表被重新创建并添加了新的数据,则与此相关)
- 截断表
- Datastream 不支持复制视图。
- Datastream 不支持空间数据类型的列。这些列中的值将替换为
NULL
值。 - Datastream 不支持数据类型为
DATETIME
、DATE
或TIMESTAMP
的列中的零值 (0000-00-00 00:00:00
)。零值将替换为NULL
值。 - Datastream 不支持复制
JSON
列中包含以下值的行:DECIMAL
、NEWDECIMAL
、TIME
、TIME2
、DATETIME
、DATETIME2
、DATE
、TIMESTAMP
或TIMESTAMP2
。包含此类值的事件会被舍弃。 - Datastream 不支持二进制日志事务压缩。
- Datastream 不支持来源 MySQL 连接配置文件中的 SSL 证书链。仅支持单个 x509 PEM 编码证书。
- Datastream 不支持级联删除。此类事件不会写入到二进制日志,因此不会传播到目标位置。
- Datastream 不支持
DROP PARTITION
操作。此类操作仅针对元数据,不会进行复制。其他活动不受影响,并且直播成功运行。 - 由于 Datastream 在使用基于二进制日志的复制时不支持故障切换到副本,因此我们建议 Cloud SQL for MySQL 企业 Plus 版源使用基于 GTID 的复制。Cloud SQL 企业 Plus 版实例会进行近乎零停机时间的维护,并在维护期间故障切换到副本。
基于 GTID 的复制的其他限制
- 仅在使用 Datastream API 时,才能恢复使用基于 GTID 的复制的数据流。
- 不支持使用
CREATE TABLE ... SELECT
语句从其他表创建表。 - Datastream 不支持带标记的 GTID。
- 如需了解适用于基于 GTID 的复制的 MySQL 限制,请参阅 MySQL 文档。
后续步骤
- 了解如何配置 MySQL 源以搭配 Datastream 使用。