MySQL Binary Log

支持的管道类型:

  •  Data Collector

MySQL Binary Log源处理由MySQL服务器在二进制日志中提供的变更数据捕获(CDC)信息。

MySQL Binary Log源充当MySQL复制从属。MySQL复制允许您通过将数据从主服务器复制到从服务器来维护MySQL数据的多个副本。源端使用复制过程从MySQL主数据库捕获变更,然后将变更数据传递到Data Collector 管道。

源端可以处理来自启用或禁用全局事务标识符(GTID)的MySQL服务器的二进制日志。GTID是分配给MySQL服务器数据库中发生的每个事务的唯一事务ID。

MySQL Binary Log仅处理变更捕获数据。源端为INSERT,UPDATE和DELETE操作创建记录。源端为二进制日志中记录的每个变更生成一个记录。

生成的记录包括CDC信息字段的映射。它还在记录头属性中包括CRUD操作类型,因此生成的记录可以由启用CRUD的目标端轻松处理。有关Data Collector变更数据处理的概述以及启用CRUD的目标端的列表,请参阅处理变更数据。

在需要时,可以在单独的管道中使用JDBC Query Consumer或JDBC Multitable Consumer,以从MySQL Binary Log源启动管道之前,从MySQL数据库读取现有数据。必要时,还应该配置MySQL Binary Log管道来修改生成的记录。在启用CRUD的目标中,只有Kudu和JDBC Producer目标包括“Change Log Format”属性,该属性允许处理生成的MySQL二进制日志记录。

在配置源端之前,您必须完成几个先决条件,包括配置MySQL服务器以进行基于行的日志记录和安装JDBC驱动程序。

当配置MySQL Binary Log时,您配置从中读取日志文件的数据库服务器。您可以配置源端以从头开始读取二进制日志文件,也可以指定一个偏移量以确定源端从何处开始读取数据。

您指定用于连接到MySQL服务器的凭据。您还可以配置高级属性,例如SSL启用,保持活动线程属性,以及源端在处理过程中包含或忽略的其他表。

先决条件

在读取MySQL二进制日志以生成变更数据捕获记录之前,必须完成以下先决条件:

  • 配置MySQL服务器以使用基于行的日志记录。
  • 安装MySQL JDBC驱动程序。

配置MySQL Server使用基于行的日志记录

MySQL Binary Log源可以处理来自配置为使用基于行的日志记录的MySQL服务器的二进制日志。

使用源端之前,请确认MySQL服务器的二进制日志格式已设置为ROW。有关说明,请参见MySQL文档中的设置二进制日志格式。

安装JDBC驱动程序

在使用MySQL Binary Log源之前,请安装MySQL JDBC驱动程序。您必须安装所需的驱动程序才能访问数据库。

注意: StreamSets已使用以下数据库版本和JDBC驱动程序测试了源:

  • 带有MySQL Connector/J 8.0.12驱动程序的MySQL 5.7
  • 带有MySQL Connector/J 8.0.12驱动程序的MySQL 8.0

MySQL JDBC驱动程序必须位于外部目录的MySQL Binary Log子目录中,以获取其他驱动程序。例如: /opt/sdc-extras/streamsets-datacollector-mysql-binlog-lib/lib/

有关安装其他驱动程序的信息,请参阅“安装外部库”。

初始偏移量

您可以将源端配置为从文件开头或文件中的初始偏移量开始读取二进制日志文件。

初始偏移量是二进制日志文件中要开始处理的点。启动管道时,MySQL Binary Log源从初始偏移开始处理,并一直持续到停止管道为止。

用于配置初始偏移量的格式取决于是否为全局事务标识符(GTID)启用了MySQL服务器:

启用GTID

当为GTID启用数据库时,MySQL Binary Log源期望初始偏移包含使用以下格式的GTID:

<source_id>:<transaction_id>

例如,要开始读取GTID处的二进制日志文件 8720bebf-bb38-11e6-97b1-0242ac110004:7066,只需输入该GTID作为偏移量即可。

GTID已停用
当为GTID禁用数据库时,MySQL Binary Log源希望初始偏移量同时包含二进制日志文件名和文件中的位置。使用以下格式来配置偏移量:

<binary log file name>:<position>

例如,以下偏移量将源端配置为开始读取位置587处的mysql-bin.000004二进制日志文件:

mysql-bin.000004:587
注意:如果在使用MySQL Binary Log源运行管道之后更改数据库服务器上的GTID模式,则必须重置源端并更改初始偏移值的格式。否则,源端无法正确读取偏移量。

当管道停止时,MySQL Binary Log源会在停止读取的地方记录偏移量。当管线再次启动时,源端将从上次保存的偏移量开始继续处理。您可以重置源端以处理所有请求的对象。

生成的记录

MySQL Binary Log源为二进制日志中记录的每个事务生成一个记录。记录包括字段和记录头属性,这些字段和字段包含操作类型,更改数据捕获信息和更改的数据。

注意:如果二进制日志中记录的事务在MySQL数据库中回滚,则MySQL将在日志中保留原始事务,然后记录回滚的事务。结果,MySQL Binary Log源可以处理记录在原始事务和回滚事务中的变更。

每个生成的记录包括以下信息:

CRUD操作类型
CRUD操作类型存储在“Type”记录字段中,也存储在 sdc.operation.type记录头属性中。
“Type”字段包含以下字符串值之一:INSERT,DELETE或UPDATE。
sdc.operation.type记录头属性包含下列数值之一:

  • 1为插入数据
  • 2为删除数据
  • 3为更新数据
您可以使用“Type”记录字段或sdc.operation.type记录头属性来将记录写入目标系统。启用了CRUD的目标端(例如JDBC Producer和Kudu)使用sdc.operation.type头属性。有关Data Collector CDC 的概述和启用CRUD的目标端的列表,请参阅处理变更数据。
变更数据捕获信息
变更数据捕获信息存储在以下记录字段中:

  • BinLogFilename-禁用GTID时
  • BinLogPosition-禁用GTID时
  • SeqNo-启用GTID时
  • GTID-启用GTID时
  • Table
  • ServerId
  • Database
  • Timestamp
  • Offset
新数据

包含要插入或更新的新数据的字段将显示在“Data”map字段中。

变更数据
包含要更新的旧数据的字段,或删除记录中的字段显示在“OldData”映射字段中。

例如,当源端从启用了GTID的MySQL服务器的二进制日志文件中读取时,它会生成以下记录:

处理生成的记录

由于MySQL二进制日志记录的结​​构,您可能希望使用处理器来重组记录并删除任何不必要的字段。在启用CRUD的目标中,只有Kudu和JDBC Producer目标包括“Change Log Format”属性,该属性允许处理生成的MySQL二进制日志记录。

例如,MySQL二进制日志记录在记录字段中包含CDC数据。如果您使用的是Kudu以外的目标端,而您所需要的只是记录数据,则可以使用Field Remover删除不需要的字段。

同样,更新记录包括OldData map字段中的先前数据,以及Data map字段中的更新数据。如果只需要更新的数据,则可以使用Field Remover从记录中删除OldData字段。您可以使用Field Flattener处理器来展平Data字段中的字段。

要包含或忽略的表

二进制日志文件捕获对MySQL数据库所做的所有更改。如果要让MySQL Binary Log源捕获表子集的更改,则可以配置源端以包括特定表的更改或忽略特定表的更改。

在“Advanced”选项卡上,将表配置为包含或忽略。输入由逗号分隔的数据库和表名称的列表。您可以将百分号(%)用作通配符以匹配任意数量的字符。使用以下格式输入表名称:

<database name>.<table name>

例如,如果为“Include Tables 属性输入以下内容,则源端仅捕获sales数据库中的orders和customers表中的更改:

sales.orders,sales.customers

如果在“Ignore Tables属性中输入相同的值,则源端将从日志文件中的所有表中捕获更改,但sales数据库中的orders和customers表除外。

忽略表格属性优先。如果在两个属性中都包含一个表,则源端将忽略该表。

配置MySQL Binary Log源

配置MySQL Binary Log源,以处理MySQL二进制日志提供的变更数据捕获(CDC)信息。 在配置源之前,请确保完成必要的先决条件。

  1. 在“Properties”面板的“General选项卡上,配置以下属性:
    一般属性 描述
    Name 艺名。
    Description 可选说明。
    On Record Error 该阶段的错误记录处理:

    • Discard-放弃记录。
    • To Error-将记录发送到管道以进行错误处理。
    • Stop Pipeline-停止管道。
  2. 在“MySQL Binary Log选项卡上,配置以下属性:
    MySQL Binary Log属性 描述
    Hostname MySQL服务器主机名。
    Port MySQL服务器端口。
    Server ID 源端用于连接到主MySQL服务器的复制服务器ID。在复制主节点和所有其他复制从节点的服务器ID中,必须是唯一的。

    为MySQL服务器数据库启用GTID后,服务器ID是可选的。

    Start from Beginning 指定是否从二进制日志的开头开始读取事件。未选择时,源端将从上次保存的偏移开始读取事件。
    Initial Offset 从二进制日志中的此偏移处读取事件。

    如果配置初始偏移值并将源端配置为从头开始,则源端将从初始偏移开始读取。

  3. 在“Credentials选项卡上,配置以下属性:
    凭据属性 描述
    Username MySQL用户名。

    用户必须具有以下MySQL权限:

    • REPLICATION CLIENT
    • REPLICATION SLAVE
    Password MySQL密码。

    提示: 要保护敏感信息(例如用户名和密码),可以使用 运行时资源或凭据存储。
  4. 在“Advanced选项卡上,配置以下属性:
    高级属性 描述
    Batch Wait Time (ms) 发送部分或空批次之前要等待的毫秒数。
    Max Batch Size (records) 一次处理的最大记录数。接受的值最高为Data Collector的最大批处理大小。

    默认值是1000。

    Connection Timeout (ms) 等待连接到MySQL服务器的最长时间(以毫秒为单位)。
    Enable KeepAlive Thread 启用使用Keep Alive线程来维护与MySQL服务器的连接。
    KeepAlive Interval 保持空闲状态的最大毫秒数。在关闭线程之前,请保持活动线程处于活动状态。
    Use SSL 指定是否使用SSL/TLS连接到MySQL服务器。
    Include Tables 读取二进制日志文件中的更改事件时要包括的表的列表。
    Ignore Tables 读取二进制日志文件中的更改事件时要忽略的表的列表。