Flink CDC(SQL Client)连接 MySQL 数据库教程

这篇文章将指导如何使用 Flink CDC 连接到 MySQL 数据库,并捕获数据变更。我们将逐步完成以下操作:

1. 检查 Binlog 是否启用

首先,您需要确保 MySQL 的 Binlog 功能已经启用,因为 Flink CDC 依赖于 Binlog 来捕获数据变更。

复制代码
-- 检查 Binlog 是否启用
SHOW VARIABLES LIKE 'log_bin';

如果 log_bin 返回的不是 ON 或者一个文件名,那么 Binlog 没有启用。

2. 检查 Binlog 格式

复制代码
-- 检查 Binlog 格式
SHOW VARIABLES LIKE 'binlog_format';

确保 binlog_formatROW。如果不是,您需要修改配置以启用 Binlog 并设置正确的格式。

3. 开启 Binlog 并配置相关参数

如果 log_bin 的值为 OFF,这意味着 MySQL 的二进制日志(Binlog)功能没有开启。以下是开启 Binlog 并配置相关参数的步骤:

3.1 编辑 MySQL 配置文件

找到 MySQL 的配置文件 /etc/my.cn/

[mysqld] 部分添加或修改以下配置:

复制代码
[mysqld]
log_bin = mysql-bin
binlog_format = ROW
server_id = 1
  • log_bin 设置 Binlog 的日志文件名前缀。
  • binlog_format 设置为 ROW,这是 Flink CDC 所需的格式。
  • server_id 设置为一个唯一的整数,用于标识 MySQL 服务器。

3.2 重启 MySQL 服务

保存配置文件后,重启 MySQL 服务以使更改生效。重启命令取决于您的操作系统:

  • 对于 Linux/Unix:

    复制代码
    sudo systemctl restart mysql

    或者

    复制代码
    sudo service mysql restart

4. 创建 CDC 用户

创建一个具有适当权限的 MySQL 用户,以便 Flink CDC 可以连接到 MySQL 数据库并监控数据变化:

复制代码
CREATE USER 'flinkcdc'@'%' IDENTIFIED BY 'FlinkCDC_123456';
GRANT SELECT, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'flinkcdc' IDENTIFIED BY 'FlinkCDC_123456';
FLUSH PRIVILEGES;

5. 创建 MySQL 表和插入示例数据

以下是一个名为 users 的表,包含 id(主键)、name(姓名)和 age(年龄)三个字段的创建语句:

复制代码
-- 创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS cdc;
USE cdc;

-- 创建表
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  age INT NOT NULL
) ENGINE=InnoDB;

-- 插入示例数据
INSERT INTO users (name, age) VALUES ('Alice', 30);
INSERT INTO users (name, age) VALUES ('Bob', 25);
INSERT INTO users (name, age) VALUES ('Charlie', 35);
INSERT INTO users (name, age) VALUES ('David', 40);
INSERT INTO users (name, age) VALUES ('Eve', 22);

下载 Flink CDC JAR 包并放到 Flink 安装目录下的 lib 目录中。您可以从 Maven 中央仓库下载 flink-sql-connector-mysql-cdc 2.3.0 版本:

Flink SQL Connector for MySQL CDC

请注意,官网提示下载的那个包缺少一些依赖在执行时会报错,需要下载 20M 以上的 JAR 包。

复制代码
[ERROR] Could not execute SQL statement. Reason:
java.lang.ClassNotFoundException: com.ververica.cdc.debezium.utils.ResolvedSchemaUtils

需要先启动 Flink 集群,否则后面会提示无法连接:[ERROR] Could not execute SQL statement. Reason:java.net.ConnectException: 拒绝连接

复制代码
start-cluster.sh

打开 sql-client.sh 执行以下命令:

复制代码
CREATE TABLE mysql_source (
  id INT NOT NULL,
  name STRING,
  age INT,
  PRIMARY KEY (id) NOT ENFORCED
) WITH (
    'connector' = 'mysql-cdc',
    'hostname' = '192.168.56.152',
    'port' = '3306',
    'username' = 'flinkcdc',
    'password' = 'FlinkCDC_123456',
    'database-name' = 'cdc',
    'table-name' = 'users'
);

SELECT * FROM mysql_source;

通过以上步骤,您应该能够成功使用 Flink CDC 连接到 MySQL 数据库并捕获数据变更。如果在执行过程中遇到任何问题,请检查配置和网络设置,确保所有服务正常运行。

相关推荐
有味道的男人6 分钟前
抖音关键词搜索,视频详情api
linux·数据库·音视频
丁丁点灯o6 分钟前
Oracle中金额数字转换为大写汉字
数据库·oracle
fly spider7 分钟前
MySQL之Buffer Pool
数据库·mysql
程序员老邢10 分钟前
【技术底稿 13】内网 Milvus 2.3.0 向量数据库全流程部署(商助慧 AI 底座,Attu 可视化)
java·数据库·人工智能·ai·语言模型·milvus
XDHCOM13 分钟前
ORA-38456: 属性集状态不一致,Oracle报错修复对比,远程处理方案选择
数据库·oracle
羊小蜜.15 分钟前
Mysql 14: 存储引擎——架构、引擎对比与锁机制
数据库·mysql·架构
爱学习的小囧17 分钟前
VM硬件版本20与17核心区别(ESXi 8.0适配+实操指南)
运维·服务器·网络·数据库·esxi·vmware·虚拟化
heimeiyingwang18 分钟前
【架构实战】Redis性能调优与内存优化策略
数据库·redis·架构
Flying pigs~~26 分钟前
检索增强生成RAG项目tools_04:flask➕fastapi➕高并发
数据库·python·flask·大模型·fastapi·异步
minebmw727 分钟前
Oracle 19.29 中 ORA-12751 错误完全解析:从通用问题到 minact-scn 场景
数据库·oracle