将 MySQL 数据库 CDC 源添加到事件流

注意

本文包含对术语 SLAVE 的引用,Microsoft 不再使用该术语。 在从软件中删除该术语后,我们会将其从本文中删除。

本文介绍如何将 MySQL 更改数据捕获源添加到事件流。 目前,以下服务支持 MySQL 数据库 CDC,可在其中公开访问数据库:

  • Azure Database for MySQL
  • Amazon RDS for MySQL
  • Amazon Aurora MySQL
  • Google Cloud SQL for MySQL (GCP).

本指南以 Azure Database for MySQL CDC 为例。

将 MySQL 数据库 CDC 源添加到事件流后,它会捕获对指定表的行级更改。 然后,可以实时处理这些更改,并发送到不同的目标,以便进一步分析。

注意

工作区容量的以下区域不支持此源:美国西部 3瑞士西部

先决条件

  • 使用参与者或更高权限在 Fabric 容量许可证模式(或)试用许可证模式下访问工作区。
  • 访问 MySQL 数据库的实例,例如:Azure Database for MySQL 灵活服务器中的数据库。
  • MySQL 数据库必须可供公开访问,并且不能位于防火墙后面或在虚拟网络中受到保护。
  • 如果没有事件流,请创建一个事件流

设置 MySQL DB

连接器使用 Debezium MySQL 连接器捕获 MySQL 数据库中的更改。 必须在消息传递连接器可以从中捕获更改的所有数据库上定义一个具有适当权限的 MySQL 用户。 可以直接使用 管理员用户 连接到通常具有适当权限的数据库,也可以按照以下步骤创建新用户:

注意

新的用户或管理员帐户以及相应的密码将用于稍后在 Eventstream 中连接到数据库。

  1. mysql 命令提示符下,创建 MySQL 用户:

    mysql> CREATE USER 'user'@'%' IDENTIFIED BY 'password';
    
  2. 向用户授予所需的权限:

    mysql> GRANT SELECT, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user'@'%';
    

    注意

    当全局读取锁不可用时,与 Amazon RDS 或 Aurora 等托管选项中一样,表级锁用于创建一致的快照。 在这种情况下,需要向用户授予 LOCK TABLES 权限。 此外,若要在快照期间支持 FLUSH 操作,可能还需要授予 RELOADFLUSH_TABLES 权限。

  3. 完成用户的权限:

    mysql> FLUSH PRIVILEGES;
    

若要确认用户或管理员是否授予了所需的权限,请运行以下命令,然后应显示步骤 2 中所需的权限:

SHOW GRANTS FOR user;

有关向用户授予所需权限的详细信息,请参阅适用于 MySQL 的 Debezium 连接器:Debezium 文档

启用 binlog

必须为 MySQL 复制启用二进制日志记录。 二进制日志将记录复制工具的事务更新,以传播更改。 本部分使用 Azure Database for MySQL CDC 作为示例来显示配置步骤。

  1. 在 Azure Database for MySQL 帐户的“Azure 门户”页上,在左侧导航中的“设置”选择“服务器参数”

  2. 在“服务器参数”页面上,配置以下属性,然后选择“保存”

    • 对于 binlog_row_image,请选择“已满”

    • 对于 binlog_expire_logs_seconds,请设置服务在清除二进制日志文件之前等待的秒数。 设置值以匹配环境的需求,例如 86400

    服务器参数下复制的 binlog 设置的屏幕截图。

将 MySQL DB (CDC) 添加为源

如果尚未向事件流添加任何源,请选择“使用外部源”磁贴

显示选择“使用外部源”磁贴的屏幕截图。

如果要向已发布的事件流添加源,请切换到“编辑”模式,在功能区中选择“添加源”,然后选择“外部源”

显示选择“添加源”然后选择“外部源”菜单的屏幕截图。

在“选择数据源”页面上,搜索并选择“MySQL DB (CDC)”磁贴上的“连接”

显示在“获取事件”向导中选择 MySQL DB (CDC) 作为源类型的屏幕截图。

配置并连接到 MySQL 数据库(CDC)

  1. 在“连接”屏幕上的“连接”下,选择“新建连接”以创建云连接。

    显示“连接”页面的屏幕截图。

  2. 输入以下 连接设置连接凭据 用于您的 MySQL 数据库,然后选择 连接

    • 服务器: MySQL 数据库的服务器地址,例如 my-mysql-server.mysql.database.azure.com

    • 数据库:数据库名称,例如 my_database

    • 连接名称:自动生成,你也可以为此连接输入新名称。

    • “用户名”和“密码”:输入 MySQL 数据库的凭据。 确保输入服务器管理员帐户使用授予的所需权限创建的用户帐户

      Azure MySQL DB (CDC) 的连接设置的屏幕截图。

  3. 输入以下信息以配置 MySQL DB CDC 数据源,然后选择 “下一步”

    • :输入用逗号分隔的表名列表。 每个表名必须遵循格式 <database name>.<table name>,例如 my_database.users

    • 服务器 ID:为 MySQL 群集中的每个服务器和复制客户端输入唯一值。 默认值为 1000。

    • 端口:保留默认值不变。

      选择 Azure MySQL DB (CDC) 连接的表、服务器 ID 和端口的屏幕截图。

    还可以通过在右侧的“流详细信息”部分选择“源名称”的铅笔按钮来编辑源名称

    注意

    为每个读取器设置不同的服务器 ID。 用于读取 binlog 的每个 MySQL 数据库客户端都应具有唯一的 ID,称为服务器 ID。 MySQL 服务器使用此 ID 来维护网络连接和 binlog 位置。 共享同一服务器 ID 的不同作业可能会导致从错误的 binlog 位置进行读取。 因此,建议为每个读取器设置不同的服务器 ID。

  4. 在“查看 + 连接”页上,查看 MySQL DB CDC 源的摘要后,选择“添加”以完成配置

    显示“查看 + 连接”页的屏幕截图,其中选择了“添加”按钮。

注意

一个事件流的源和目标的最大数量为 11

查看更新的事件流

  1. 可以在编辑模式下看到添加到事件流中的 MySQL DB (CDC) 源

    “编辑”模式下添加的 Azure MySQL DB CDC 源的屏幕截图,其中高亮显示了“发布”按钮。

  2. 选择“发布”提交更改并开始将 MySQL DB CDC 数据流式传输到事件流

    实时模式下添加的 Azure MySQL DB CDC 源的屏幕截图。

其他连接器: