为RDI准备MySQL/MariaDB
准备MySQL和MariaDB数据库以与RDI一起工作
按照以下部分的步骤设置用于Debezium的MySQL或MariaDB数据库以进行CDC。
1. 创建一个CDC用户
Debezium 连接器需要一个用户账户来连接到 MySQL/MariaDB。该用户必须在你希望 Debezium 捕获更改的所有数据库上拥有适当的权限。
运行 MySQL CLI 客户端 然后运行以下命令:
-
创建CDC用户:
mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
-
授予用户所需的权限:
# 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';
-
完成用户的权限设置:
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-bin
是 OFF
,那么请将以下属性添加到您的服务器配置文件中:
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
。
3. 启用GTIDs
全局事务标识符(GTIDs) 唯一标识集群中服务器上发生的事务。您不一定需要将它们与Debezium MySQL连接器一起使用,但您可能会发现启用它们很有帮助。使用GTIDs可以简化复制并确认主服务器和副本服务器是一致的。
GTIDs 在 MySQL 5.6.5 及更高版本中可用。有关更多信息,请参阅 MySQL 关于 GTIDs 的文档。
按照以下步骤启用GTIDs。您需要访问MySQL配置文件来完成此操作。
-
启用
gtid_mode
:mysql> gtid_mode=ON
-
启用
enforce_gtid_consistency
:mysql> enforce_gtid_consistency=ON
-
确认更改:
mysql> show global variables like '%GTID%'; >>> Result: +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | enforce_gtid_consistency | ON | | gtid_mode | ON | +--------------------------+-------+
4. 配置会话超时
RDI在开始CDC过程时捕获源数据库的初始快照(有关更多信息,请参阅架构概述)。如果您的数据库很大,那么在RDI读取快照数据时,连接可能会超时。您可以通过在MySQL配置文件中使用interactive_timeout
和wait_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 使用。