Debezium日常分享系列之:设置MySQL数据库以支持数据实时采集
- 一、创建用户
- 二、启用二进制日志
- 三、启用 GTID
- 四、配置会话超时
- 五、启用查询日志事件
- 六、验证二进制日志行值选项
- 七、Debezium技术总结
在安装和运行 Debezium 连接器之前,需要执行一些 MySQL 设置任务。
一、创建用户
Debezium MySQL 连接器需要 MySQL 用户帐户。此 MySQL 用户必须对 Debezium MySQL 连接器捕获更改的所有数据库拥有适当的权限。
先决条件
- MySQL 服务器。
- SQL 命令的基本知识。
程序
- 创建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技术专栏