为RDI准备MySQL/MariaDB

准备MySQL和MariaDB数据库以与RDI一起工作

按照以下部分的步骤设置用于Debezium的MySQL或MariaDB数据库以进行CDC。

1. 创建一个CDC用户

Debezium 连接器需要一个用户账户来连接到 MySQL/MariaDB。该用户必须在你希望 Debezium 捕获更改的所有数据库上拥有适当的权限。

运行 MySQL CLI 客户端 然后运行以下命令:

  1. 创建CDC用户:

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

    # MySQL <v8.0
    mysql> GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user' IDENTIFIED BY 'password';
    
    # MySQL v8.0 and above
    mysql> GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user'@'localhost';
    
  3. 完成用户的权限设置:

    mysql> FLUSH PRIVILEGES;
    

2. 启用binlog

您必须为MySQL复制启用二进制日志记录。二进制日志记录事务更新,以便复制工具可以传播更改。您需要管理员权限才能执行此操作。

首先,您应该检查log-bin选项是否已经设置为ON,使用以下查询:

// for MySql 5.x
mysql> SELECT variable_value as "BINARY LOGGING STATUS (log-bin) ::"
FROM information_schema.global_variables WHERE variable_name='log_bin';
// for MySql 8.x
mysql> SELECT variable_value as "BINARY LOGGING STATUS (log-bin) ::"
FROM performance_schema.global_variables WHERE variable_name='log_bin';

如果 log-binOFF,那么请将以下属性添加到您的服务器配置文件中:

server-id         = 223344 # Querying variable is called server_id, e.g. SELECT variable_value FROM information_schema.global_variables WHERE variable_name='server_id';
log_bin                     = mysql-bin
binlog_format               = ROW
binlog_row_image            = FULL
binlog_expire_logs_seconds  = 864000

你可以再次运行上面的查询来检查log-bin现在是否为ON

注意:
如果您正在使用Amazon RDS for MySQL,那么 您必须为您的数据库启用自动备份,然后才能使用二进制日志记录。 如果您不先启用自动备份,则上述设置将不会 生效。

3. 启用GTIDs

全局事务标识符(GTIDs) 唯一标识集群中服务器上发生的事务。您不一定需要将它们与Debezium MySQL连接器一起使用,但您可能会发现启用它们很有帮助。使用GTIDs可以简化复制并确认主服务器和副本服务器是一致的。

GTIDs 在 MySQL 5.6.5 及更高版本中可用。有关更多信息,请参阅 MySQL 关于 GTIDs 的文档

按照以下步骤启用GTIDs。您需要访问MySQL配置文件来完成此操作。

  1. 启用 gtid_mode:

    mysql> gtid_mode=ON
    
  2. 启用 enforce_gtid_consistency:

    mysql> enforce_gtid_consistency=ON
    
  3. 确认更改:

    mysql> show global variables like '%GTID%';
    
    >>> Result:
    
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | enforce_gtid_consistency | ON    |
    | gtid_mode                | ON    |
    +--------------------------+-------+
    

4. 配置会话超时

RDI在开始CDC过程时捕获源数据库的初始快照(有关更多信息,请参阅架构概述)。如果您的数据库很大,那么在RDI读取快照数据时,连接可能会超时。您可以通过在MySQL配置文件中使用interactive_timeoutwait_timeout设置来防止这种情况发生:

mysql> interactive_timeout=<duration-in-seconds>
mysql> wait_timeout=<duration-in-seconds>

5. 启用查询日志事件

如果你想查看每个binlog事件的原始SQL语句,那么你应该启用binlog_rows_query_log_events(MySQL配置)或binlog_annotate_row_events(MariaDB配置):

mysql> binlog_rows_query_log_events=ON

mariadb> binlog_annotate_row_events=ON

此选项在 MySQL 5.6 及更高版本中可用。

6. 检查 binlog_row_value_options

您应该检查binlog_row_value_options变量的值,以确保它没有设置为PARTIAL_JSON。如果它设置为PARTIAL_JSON,那么Debezium可能无法看到UPDATE事件。

使用以下命令检查变量的当前值:

mysql> show global variables where variable_name = 'binlog_row_value_options';

>>> Result:

+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| binlog_row_value_options |       |
+--------------------------+-------+

如果值是PARTIAL_JSON,那么你应该取消设置变量:

mysql> set @@global.binlog_row_value_options="" ;

7. 配置完成

按照上述步骤操作后,您的 MySQL/MariaDB 数据库已准备好供 Debezium 使用。

RATE THIS PAGE
Back to top ↑