事务处理日志设置和要求

了解如何为 Oracle GoldenGate 准备 MySQL 数据库和支持的变量,包括所需的二进制日志记录设置和数据库服务器变量。

配置日志记录属性

Oracle GoldenGate 依靠 MySQL 二进制日志来存储复制源事务处理所需的数据。必须先正确配置源系统上的二进制日志,然后才能启动 Oracle GoldenGate 处理。

本节介绍适用于 Oracle GoldenGate for MySQL 的以下二进制日志启动选项和系统变量。

事件记录选项 值 它的作用 需求
binlog_annotate_row_events ON, OFF 系统变量,指示主服务器将这些事件写入二进制日志。 MariaDB 和 Oracle GoldenGate 23.8 及之前版本需要。OFF
binlog_expire_logs_seconds 0 - 4294967295 如果支持,此系统变量将设置二进制日志失效期(秒)。 建议值为:>=86400
binlog_format ROW, STATEMENT, MIXED 用于设置二进制日志记录格式的系统变量。

将 MySQL 用作源数据库时是必需的。如果设置为 MIXED 或 STATEMENT,将仅捕获 ROW 级别的事务处理。

ROW

binlog retention hours 1 - 168 如果支持,此系统变量将设置二进制日志失效期(小时)。 建议值为:>=24
binlog_row_image FULL, MINIMAL, NOBLOB 在二进制日志中设置不同级别列级日志记录的系统变量。

将 MySQL 用作源数据库时是必需的。

FULL

binlog_row_metadata FULL, MINIMAL 用于配置添加到二进制日志的元数据量以进行基于行的日志记录的系统变量。

当 MySQL 8.0 或更高版本用作 DDL 支持的源数据库时需要。

FULL

event_scheduler ON, OFF 允许创建心跳更新和清除作业的系统变量。

实施 Oracle GoldenGate 心跳功能时必需。

ON

log_bin ON, OFF 显示二进制日志记录状态的系统变量。 将 MySQL 用作源数据库时是必需的。如果尚未 ON,则通过指定名称(如 log-bin=binlog.)进行设置
log_replica_updates ON, OFF 从主服务器接收更新时将更新记录到辅助服务器自己的二进制日志的系统变量。

当 MySQL 用作源数据库并配置为从副本服务器捕获时需要。

ON

server_id 0 - 4294967295 启用二进制日志记录时需要指定系统变量。对于复制主副本和每个复制副本,请确保值 >0 且是唯一的。

将 MySQL 用作源数据库时是必需的。

>=1

验证数据库级日志记录

要验证支持 Oracle GoldenGate Capture for the MySQL 数据库所需的数据库当前二进制日志记录设置,请执行以下查询。如果需要更改设置,请按照 Enable Database-level Logging 下的说明操作

  1. 以 root 或分配的数据库服务管理员帐户身份登录到 MySQL。

    [root@srcdbserver ~]$ mysql -uroot -p
  2. 发出以下命令以确定是否已为二进制日志记录启用数据库。如果结果为 ON,则会启用数据库二进制日志。

    show variables like 'log_bin';
  3. 发出以下命令以确定是否已使用正确的二进制日志设置和 server_id 启用数据库。确保 binlog_format 值设置为 ROW、binlog_row_image 和 binlog_row_metadata 设置为 FULL,并且 server_id 变量设置为 >=1,并且对于主副本和任何副本都是唯一的。

    show variables like 'binlog_%';
    show variables like 'server_id';
  4. 根据您的要求(例如 DDL 支持和 MariaDB 支持),重复此过程以查询配置日志记录属性中列出的其他选项的变量。

启用数据库级日志记录

如有必要,请执行以下步骤,为 MySQL 数据库启用支持 Oracle GoldenGate Capture 所需的数据库二进制日志记录设置。仅根据验证数据库级日志记录的结果修改需要启用或更改的设置。

  1. 编辑 MySQL 配置文件、my.cnf for Linux 或 my.ini for Windows,以启用支持 MySQL 的 Oracle GoldenGate 捕获所需的系统变量。

    [root@srcdbserver ~]$ vi /etc/my.cnf
  2. 要启用二进制日志,请使用首选项的登录框值将条目添加到配置文件,如下所示。

    log-bin=*binlog*
  3. 要设置正确的二进制日志记录格式和 server_id 变量,请设置以下内容:

    binlog-format=ROW
    binlog-row-image=FULL
    
    #For MySQL 8.0 and above, for DDL support
    binlog-row-metadata=FULL
    
    #Set to value > 0 and <= 4294967295
    server-id=1
  4. 根据您的要求(例如 DDL 支持和 MariaDB 支持),为 Configuring Logging Properties 中列出的其他选项添加其他变量。

  5. 保存并关闭该文件。

  6. 重新启动数据库以使设置生效。

    [root@srcdbserver ~]$ service mysqld restart
  7. 使用以下命令检查数据库服务的状态:

    [root@srcdbserver ~]$ service mysqld status

修改 Amazon 和 Azure MySQL Database 服务的系统变量

要为 Oracle GoldenGate 提取和心跳功能配置 Amazon 和 Azure MySQL 数据库,必须使用参数组、数据库创建或修改或服务器参数设置(如果尚未设置为所需值)进行所需的更改。使用以下准则修改这些系统变量:

  1. 要在 Amazon 中启用二进制日志记录,必须启用数据库的备份,否则 log_bin 变量将报告为 OFF,提取将异常终止,报告它无法检索 binlog 文件的列表。

    在创建数据库时启用备份,或者通过修改现有数据库来包含备份团。

  2. 对于 Amazon MySQL 数据库,如果实施 Oracle GoldenGate 心跳功能,则将 binglog_format 变量设置为 ROW,将 binlog_row_image 变量设置为 FULL,将 event_scheduler 设置为 ON,如果启用 DDL 捕获支持,则将 binlog_row_metadata 变量设置为 FULL。

    按照 Amazon 提供的说明创建或编辑现有参数组,以便进行这些更改。

    https://aws.amazon.com/premiumsupport/knowledge-center/enable-binary-logging-aurora/

  3. 对于 Azure MySQL 数据库,将 binlog_format 变量设置为 ROW,将 binlog_row_image 变量设置为 FULL。按照 Microsoft 提供的说明修改数据库实例的服务器参数设置。

    https://docs.microsoft.com/en-us/azure/mysql/howto-server-parameters

确保数据可用性

保留足够的二进制日志数据,以便在停止提取或存在计划外停机时,提取可以从其检查点重新开始。提取必须有权访问包含最早未提交工作单元的开始时间的二进制日志,以及此后的所有二进制日志。建议的保留期至少为 24 小时的事务处理数据,包括活动信息和归档信息。根据数据量和业务需求,您可能需要进行一些测试来确定最佳保留时间。

如果在活动日志或备份日志中未保留提取处理期间需要的数据,则可能需要以下更正操作之一:

可以根据 MySQL 数据库或变体使用不同的度量来增加二进制日志数据保留。

针对 MySQL 复制副本捕获

您可以将 Oracle GoldenGate 配置为从 MySQL 复制副本中捕获。

通常,在副本上应用的事务会记录到中继日志中,而不是记录到副本的 binlog 中。要使副本将从主数据库接收的事务写入到其 binlog 中,必须结合 Oracle GoldenGate 的其他二进制日志记录参数,使用 my.cnf 中的 log_replica_updates 选项作为 1 启动复制副本。在主数据库的事务位于副本的 binlog 中之后,您可以在副本上设置常规的 Oracle GoldenGate 提取以开始捕获。