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 数据库并捕获数据变更。如果在执行过程中遇到任何问题,请检查配置和网络设置,确保所有服务正常运行。

相关推荐
寒山李白14 小时前
IDEA连接MySQL服务器数据库指南
java·数据库·mysql·intellij-idea·idea·database
亿坊电商17 小时前
PHP后端项目中多环境配置管理:开发、测试、生产的优雅解决方案!
服务器·数据库·php
韩立学长17 小时前
基于Springboot的影视评论网站的设计与实现58py6238(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
未来之窗软件服务17 小时前
未来之窗昭和仙君(四十七)开发商品进销存——东方仙盟筑基期
数据库·进销存·仙盟创梦ide·东方仙盟·昭和仙君·东方仙盟架构
IDOlaoluo19 小时前
TinyRDM 1.2.3 Windows版安装教程(附Redis客户端下载及详细步骤)
数据库·redis·缓存
小光学长19 小时前
基于微信小程序的背单词系统x1o5sz72(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·微信小程序·小程序
我命由我1234520 小时前
Derby - Derby 服务器(Derby 概述、Derby 服务器下载与启动、Derby 连接数据库与创建数据表、Derby 数据库操作)
java·运维·服务器·数据库·后端·java-ee·后端框架
RestCloud1 天前
达梦数据库到Greenplum:用ETL工具实现数据仓库迁移
数据库·数据仓库·etl·达梦数据库·数据传输·greenplum
Boilermaker19921 天前
【Redis】集群与分布式缓存
java·数据库·redis·1024程序员节
武子康1 天前
Java-163 MongoDB 生产安全加固实战:10 分钟完成认证、最小权限、角色详解
java·数据库·分布式·mongodb·性能优化·系统架构·nosql