Debezium日常分享系列之:设置MySQL数据库以支持数据实时采集

时间:2024-03-21 13:42:22

Debezium日常分享系列之:设置MySQL数据库以支持数据实时采集

  • 一、创建用户
  • 二、启用二进制日志
  • 三、启用 GTID
  • 四、配置会话超时
  • 五、启用查询日志事件
  • 六、验证二进制日志行值选项
  • 七、Debezium技术总结

在安装和运行 Debezium 连接器之前,需要执行一些 MySQL 设置任务。

一、创建用户

Debezium MySQL 连接器需要 MySQL 用户帐户。此 MySQL 用户必须对 Debezium MySQL 连接器捕获更改的所有数据库拥有适当的权限。

先决条件

  • MySQL 服务器。
  • SQL 命令的基本知识。

程序

  1. 创建MySQL用户:
mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';

2.向用户授予所需的权限:

mysql> GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user' IDENTIFIED BY 'password';

下表描述了权限。

重要的:

  • 如果使用不允许全局读锁的托管选项(例如 Amazon RDS 或 Amazon Aurora),则使用表级锁来创建一致快照。在这种情况下,您还需要向您创建的用户授予 LOCK TABLES 权限。

3.最终确定用户的权限:

mysql> FLUSH PRIVILEGES;

表 20. 用户权限说明

字段 描述
SELECT 使连接器能够从数据库的表中选择行。仅在执行快照时使用。
RELOAD 允许连接器使用 FLUSH 语句来清除或重新加载内部缓存、刷新表或获取锁。仅在执行快照时使用。
SHOW DATABASES 使连接器能够通过发出 SHOW DATABASE 语句来查看数据库名称。仅在执行快照时使用。
REPLICATION SLAVE 使连接器能够连接并读取 MySQL 服务器二进制日志。
REPLICATION CLIENT 允许连接器使用以下语句:SHOW MASTER STATUS、SHOW SLAVE STATUS、SHOW BINARY LOGS 连接器总是需要这个。
ON 标识权限应用到的数据库。
TO ‘user’ 指定要授予权限的用户。
IDENTIFIED BY ‘password’ 指定用户的 MySQL 密码。

二、启用二进制日志

您必须为 MySQL 复制启用二进制日志记录。二进制日志记录复制工具的事务更新以传播更改。

先决条件

  • MySQL 服务器。
  • 适当的 MySQL 用户权限。

程序

  • 1.检查log-bin选项是否已经打开:
// 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';

  • 2.如果为 OFF,请使用以下属性配置 MySQL 服务器配置文件,如下表所述:
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
  • 3.通过再次检查 binlog 状态来确认您的更改:
// 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';
  • 4.如果您在 Amazon RDS 上运行 MySQL,则必须为数据库实例启用自动备份才能进行二进制日志记录。如果数据库实例未配置为执行自动备份,则即使您应用前面步骤中描述的设置,二进制日志也会被禁用。

表 21. MySQL binlog 配置属性的描述

属性 描述
server-id 对于 MySQL 集群中的每个服务器和复制客户端,server-id 的值必须是唯一的。在 MySQL 连接器设置期间,Debezium 会为连接器分配一个唯一的服务器 ID。
log_bin log_bin 的值是 binlog 文件序列的基本名称。
binlog_format binlog-format 必须设置为 ROW 或 row。
binlog_row_image binlog_row_image 必须设置为 FULL 或 full。
binlog_expire_logs_seconds binlog_expire_logs_seconds 对应于已弃用的系统变量expire_logs_days。这是自动删除 binlog 文件的秒数。默认值为 2592000,等于 30 天。设置该值以匹配您的环境的需求。

三、启用 GTID

全局事务标识符 (GTID) 唯一标识集群内服务器上发生的事务。虽然 Debezium MySQL 连接器不需要,但使用 GTID 可以简化复制,并使您能够更轻松地确认主服务器和副本服务器是否一致。

GTID 在 MySQL 5.6.5 及更高版本中可用。

先决条件

  • MySQL 服务器。
  • SQL 命令的基本知识。
  • 访问 MySQL 配置文件。

程序

  • 1.启用gtid_模式:
mysql> gtid_mode=ON
  • 2.启用enforce_gtid_consistency:
mysql> enforce_gtid_consistency=ON
  • 3.确认更改:
mysql> show global variables like '%GTID%';

结果

+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| enforce_gtid_consistency | ON    |
| gtid_mode                | ON    |
+--------------------------+-------+

表 22. GTID 选项说明

属性 描述
gtid_mode 布尔值,指定是否启用 MySQL 服务器的 GTID 模式。ON = enabled,OFF = disabled
enforce_gtid_consistency 布尔值,指定服务器是否通过允许执行可以事务安全方式记录的语句来强制 GTID 一致性。使用 GTID 时必需。ON = enabled,OFF = disabled

四、配置会话超时

当为大型数据库创建初始一致快照时,您建立的连接可能会在读取表时超时。您可以通过在 MySQL 配置文件中配置 Interactive_timeout 和 wait_timeout 来防止此行为。

先决条件

  • MySQL 服务器。
  • SQL 命令的基本知识。
  • 访问 MySQL 配置文件。

程序

  • 1.配置interactive_timeout:
mysql> interactive_timeout=<duration-in-seconds>
  • 2.配置wait_timeout:
mysql> wait_timeout=<duration-in-seconds>

表 23. MySQL 会话超时选项说明

属性 描述
interactive_timeout 服务器在关闭交互连接之前等待交互连接上的活动的秒数。
wait_timeout 服务器在关闭非交互式连接之前等待该连接上的活动的秒数。

五、启用查询日志事件

您可能希望查看每个二进制日志事件的原始 SQL 语句。在 MySQL 配置中启用 binlog_rows_query_log_events 选项或在 MariaDB 配置文件中启用 binlog_annotate_row_events 可以让您执行此操作。

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

先决条件

  • MySQL 服务器。
  • SQL 命令的基本知识。
  • 访问 MySQL 配置文件。

程序

  • 在 MySQL 中启用 binlog_rows_query_log_events 或在 MariaDB 中启用 binlog_annotate_row_events:
mysql> binlog_rows_query_log_events=ON
mariadb> binlog_annotate_row_events=ON

binlog_rows_query_log_events 或 binlog_annotate_row_events 设置为启用/禁用对在 binlog 条目中包含原始 SQL 语句的支持的值。

  • ON = enabled
  • OFF = disabled

六、验证二进制日志行值选项

MySQL的binlog_row_value_options参数是用于配置二进制日志(binlog)记录的行事件(row-based events)的选项。这些选项决定了binlog中记录的行事件的详细程度。

具体来说,binlog_row_value_options参数有以下取值:

  • minimal:只记录被修改的列的值,以及主键列的值(如果有主键)。

  • no_image:只记录被修改的列的值,不记录主键列的值。

  • full:记录所有列的值,包括未被修改的列的值。

这些选项的不同取值会影响binlog的大小和性能。通常情况下,使用minimal选项就可以满足大部分的需求,因为它可以记录被修改的列的值,同时又不会产生过多的日志记录。但是,在某些情况下,需要使用full选项来记录所有列的值,以便进行数据恢复或者审计操作。

检查 binlog_row_value_options 变量,并确保该值未设置为 PARTIAL_JSON,因为在这种情况下连接器可能无法使用 UPDATE 事件。

先决条件

  • MySQL 服务器。
  • SQL 命令的基本知识。
  • 访问 MySQL 配置文件。

程序

  • 1.检查当前变量值
mysql> show global variables where variable_name = 'binlog_row_value_options';
  • 2.结果
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| binlog_row_value_options |       |
+--------------------------+-------+
  • 3.如果值为 PARTIAL_JSON,请通过以下方式取消设置此变量:
mysql> set @@global.binlog_row_value_options="" ;

七、Debezium技术总结

更多Debezium技术请参考:

  • Debezium技术专栏