文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用flink1.17 实时同步数据(mysql到sqlserver 或 sqlserver 到sqlserver)

2023-10-21 21:59

关注


介绍两种数据库用 flink1.17 做数据实时同步的操作。

第一种:mysql 同步到 sqlserver
第二种:sqlserver 同步到 sqlserver

步骤一,环境的准备

准备一台有 java 环境的centos系统的主机或虚拟机

下载 flink:

https://flink.apache.org/downloads/
在这里插入图片描述

下载 mysql、sqlserver 相关 jar 包
# flink cdc 读取源数据的jar包flink-sql-connector-mysql-cdc-2.4.0.jarflink-sql-connector-sqlserver-cdc-2.4.0.jar# flink jdbc 写数据的jar包,与 mssql 的驱动包flink-connector-jdbc-3.1.1-1.17.jarmssql-jdbc-9.4.1.jre8.jar 

以上jar下载地址:

# flink cdchttps://repo1.maven.org/maven2/com/ververica/# flink connectorhttps://repo1.maven.org/maven2/org/apache/flink/flink-connector-jdbc/# mssql jdbc 驱动https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/

将这些jar包放在 flink 的 lib 目录下在这里插入图片描述

启动 flink
# 转到 flink 的 bin目录下,执行 start-cluster.sh 启动 flink./start-cluster.sh

在这里插入图片描述
flink启动成功!

步骤二,数据库开启CDC(只需要对源数据库开启cdc)

1,mysql 的 cdc,需要开启 row 模式
以自建的 testcdc 数据库为例
在这里插入图片描述
创建test表,必须要有主键,如下图
在这里插入图片描述

开启数据库row模式,配置文件中修改,并重启数据库,如下图。
在这里插入图片描述
建议你安装 宝塔 面板对mysql数据库进行操作。

mysql配置完成!


2,sqlserver 的 cdc 需要代理支持

以 自建的 flinkcdc 数据库为例
在这里插入图片描述

-- 对当前数据库启用 CDCUSE [flinkcdc]  EXECUTE sys.sp_cdc_enable_db; -- 查看数据库是否启用cdcSELECT name,is_cdc_enabled FROM sys.databases WHERE is_cdc_enabled = 1;

在这里插入图片描述
创建需要cdc的表testcdc
在这里插入图片描述
表 testcdc 启用cdc

-- 启用cdcEXEC sys.sp_cdc_enable_table  @source_schema = 'dbo',  @source_name   = 'testcdc',  @role_name     = 'testRole',  -- 角色要赋予权限 @supports_net_changes = 0  -- 查看当前数据库表是否启用cdcSELECT name,is_tracked_by_cdc FROM sys.tables WHERE is_tracked_by_cdc = 1;EXEC sys.sp_cdc_help_change_data_capture

特别注意的时角色需要赋予权限,这里为了方便直接使用的是db_owner,并且要开启代理。
在这里插入图片描述
代理会自动部署相关作业,如下图。
在这里插入图片描述

sqlserver数据库的cdc完成!

步骤三,建立 flink 与 数据库 的连接

# 启动 flink 的 sql-client.sh./sql-client.sh

在这里插入图片描述
启动成功!如下图
在这里插入图片描述
建议cdc源映射关系

CREATE TABLE source ( id INT, name varchar(100), create_time date, PRIMARY KEY(id) NOT ENFORCED) WITH ( 'connector' = 'mysql-cdc', 'hostname' = '192.168.6.130', 'port' = '3306', 'username' = 'root', 'password' = 'root', 'database-name' = 'testcdc', 'table-name' = 'test' );

在这里插入图片描述

查看数据

select * from source;

在这里插入图片描述
建立目标映射,jdbc写数据

CREATE TABLE test ( id INT, name varchar(100), create_time date, PRIMARY KEY(id) NOT ENFORCED) WITH ('connector' = 'jdbc','url' = 'jdbc:sqlserver://192.168.6.1:1433;DatabaseName=flinkcdc','driver' = 'com.microsoft.sqlserver.jdbc.SQLServerDriver','username' = 'sa', 'password' = '你的数据库密码',  'table-name' = 'dbo.test');

在这里插入图片描述

步骤四,同步数据
insert into test(id,name,create_time)select id,name,create_time from source;

在这里插入图片描述
数据就从mysql源表 写入到 sqlserver 目标表中了(这里的目标表是在sqlserver中创建了一张名为test的表)。
在这里插入图片描述
同理,sqlserver 同步 到sqlserver 跟上面mysql 同步到 sqlserver是一样的。
只是 源 映射需要使用,如下:

 CREATE TABLE source( id INT, name varchar(100), create_time date, PRIMARY KEY(id) NOT ENFORCED) WITH ('connector' = 'sqlserver-cdc','hostname' = '192.168.6.1','port' = '1433','username' = 'sa', 'password' = '你的密码', 'database-name' = 'flinkcdc', 'table-name' = 'dbo.testcdc');

你也可以在flink的web页面查看同步job
在这里插入图片描述

Job ID: 881f141de6b8631395571a9d879e3e32

来源地址:https://blog.csdn.net/FrankHsiang/article/details/131848530

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯