当前位置: 首页 > article >正文

使用canal.deployer-1.1.7和canal.adapter-1.1.7实现mysql数据同步

1、下载地址 


 

--查看是否开启bin_log日志,value = on表示开启
SHOW VARIABLES LIKE 'log_bin';
-- 查看bin_log日志文件
SHOW BINARY LOGS;
--查看bin_log写入状态
SHOW MASTER STATUS;
--查看bin_log存储格式 = row
SHOW VARIABLES LIKE 'binlog_format';
--查看数据库服务id
SHOW VARIABLES LIKE 'server_id';


 

下载下面两个即可

2、解压下载好的文件

 3、修改 canal.deployer的配置文件 canal.deployer-1.1.7\conf\example\instance.properties,并进入到 canal.deployer-1.1.7\bin 目录下启动程序,instance.properties配置文件修改如下内容

# position info   #这里修改为数据源库的地址 账号密码 以及同步的表
canal.instance.master.address=127.0.0.1:3306
canal.instance.dbUsername=root
canal.instance.dbPassword=zsj381599113QQ
canal.instance.filter.regex=mytest.prj_bridge,mytest.prj_health_rule

然后执行启动命令

4、使用 canal.adapter 将 数据源数据同步至 目标数据库

修改 canal.adapter-1.1.7\conf\application.yml 配置文件 

server:
  port: 8081
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    default-property-inclusion: non_null

canal.conf:
  mode: tcp #tcp kafka rocketMQ rabbitMQ
  flatMessage: true
  zookeeperHosts:
  syncBatchSize: 1000
  retries: -1
  timeout:
  accessKey:
  secretKey:
  consumerProperties:
    #  canal.deployer的地址和端口
    canal.tcp.server.host: 127.0.0.1:11111
    canal.tcp.batch.size: 500
  srcDataSources:
    defaultDS: # 对应canal.adapter-1.1.7\conf\rdb下的配置文件中的dataSourceKey的value值
      #数据源
      url: jdbc:mysql://127.0.0.1:3306/mytest?useUnicode=true
      username: root
      password: zsj381599113QQ
  canalAdapters:
  - instance: example # example对应路径canal.deployer-1.1.7\conf\example 和canal.adapter-1.1.7\conf\rdb下的配置文件中的 destination的value值
    groups:
    - groupId: g1    # g1对应canal.adapter-1.1.7\conf\rdb下的配置文件中的 groupId的value值   
      outerAdapters:
      - name: rdb  #rdb对应路径canal.adapter-1.1.7\conf\rdb
        key: mysql1  # mysql1 对应 canal.adapter-1.1.7\conf\rdb下的配置文件中的outerAdapterKey的value值 
        properties:
          #目标数据库信息
          jdbc.driverClassName: com.mysql.jdbc.Driver
          jdbc.url: jdbc:mysql://127.0.0.1:3306/mytest2?useUnicode=true
          jdbc.username: root
          jdbc.password: zsj381599113QQ
          druid.stat.enable: false
          druid.stat.slowSqlMillis: 1000

4、修改 canal.adapter-1.1.7\conf\rdb下的mysql1.yml的配置内容

dataSourceKey: defaultDS
destination: example
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:
  #源数据库 
  database: mytest
  #源数据库表
  table: prj_bridge
  #目标数据库表
  targetTable: prj_bridge
  targetPk:
    id: id
  #表字段一样全部映射  
  mapAll: true
  commitBatch: 100 # 批量提交的大小

5、win下面canal.adapter-1.1.7\bin的startup.bat文件改成如下,不然会报错

@echo off
@if not "%ECHO%" == ""  echo %ECHO%
@if "%OS%" == "Windows_NT"  setlocal

set ENV_PATH=.\
if "%OS%" == "Windows_NT" set ENV_PATH=%~dp0%

set conf_dir=%ENV_PATH%\..\conf

set CLASSPATH=%conf_dir%
set CLASSPATH=%CLASSPATH%;%conf_dir%\..\lib\*

set JAVA_MEM_OPTS= -Xms128m -Xmx512m -XX:PermSize=128m
set JAVA_OPTS_EXT= -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dapplication.codeset=UTF-8 -Dfile.encoding=UTF-8
set ADAPTER_OPTS= -DappName=canal-adapter

set JAVA_OPTS= %JAVA_MEM_OPTS% %JAVA_OPTS_EXT% %ADAPTER_OPTS%

set CMD_STR= java %JAVA_OPTS% -classpath "%CLASSPATH%" com.alibaba.otter.canal.adapter.launcher.CanalAdapterApplication
echo start cmd : %CMD_STR%

java %JAVA_OPTS% -classpath "%CLASSPATH%" com.alibaba.otter.canal.adapter.launcher.CanalAdapterApplication

然后启动canal.adapter 即可实现数据同步

如果需要同步多张表 canal.adapter-1.1.7\conf\application.yml配置如下 

server:
  port: 8081
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    default-property-inclusion: non_null

canal.conf:
  mode: tcp #tcp kafka rocketMQ rabbitMQ
  flatMessage: true
  zookeeperHosts:
  syncBatchSize: 1000
  retries: -1
  timeout:
  accessKey:
  secretKey:
  consumerProperties:
    #  canal.deployer的地址和端口
    canal.tcp.server.host: 127.0.0.1:11111
    canal.tcp.batch.size: 500
  srcDataSources:
    defaultDS: # 对应canal.adapter-1.1.7\conf\rdb下的配置文件中的dataSourceKey的value值
      #数据源
      url: jdbc:mysql://127.0.0.1:3306/mytest?useUnicode=true
      username: root
      password: zsj381599113QQ
  canalAdapters:
  - instance: example # example对应路径canal.deployer-1.1.7\conf\example 和canal.adapter-1.1.7\conf\rdb下的配置文件中的 destination的value值
    groups:
    - groupId: g1    # g1对应canal.adapter-1.1.7\conf\rdb下的配置文件中的 groupId的value值   
      outerAdapters:
      - name: rdb  #rdb对应路径canal.adapter-1.1.7\conf\rdb
        key: mysql1  # mysql1 对应 canal.adapter-1.1.7\conf\rdb下的配置文件中的outerAdapterKey的value值 
        properties:
          #目标数据库信息
          jdbc.driverClassName: com.mysql.jdbc.Driver
          jdbc.url: jdbc:mysql://127.0.0.1:3306/mytest2?useUnicode=true
          jdbc.username: root
          jdbc.password: zsj381599113QQ
          druid.stat.enable: false
          druid.stat.slowSqlMillis: 1000
      - name: rdb  #rdb对应路径canal.adapter-1.1.7\conf\rdb
        key: mysql2  # mysql1 对应 canal.adapter-1.1.7\conf\rdb下的配置文件中的outerAdapterKey的value值 
        properties:
          #目标数据库信息
          jdbc.driverClassName: com.mysql.jdbc.Driver
          jdbc.url: jdbc:mysql://127.0.0.1:3306/mytest2?useUnicode=true
          jdbc.username: root
          jdbc.password: zsj381599113QQ
          druid.stat.enable: false
          druid.stat.slowSqlMillis: 1000

canal.adapter-1.1.7\conf\rdb目录下需要同步几张表的数据就有几个yml配置文件,此次实验同步两张表,两个配置文件如下  mysql1.yml

dataSourceKey: defaultDS
destination: example
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:
  #源数据库 
  database: mytest
  #源数据库表
  table: prj_bridge
  #目标数据库表
  targetTable: prj_bridge
  targetPk:
    id: id
  #表字段一样全部映射  
  mapAll: true
  commitBatch: 100 # 批量提交的大小

mysql2.yml

dataSourceKey: defaultDS
destination: example
groupId: g1
outerAdapterKey: mysql2
concurrent: true
dbMapping:
  #源数据库 
  database: mytest
  #源数据库表
  table: prj_health_rule
  #目标数据库表
  targetTable: prj_health_rule
  targetPk:
    id: id
  #表字段一样全部映射  
  mapAll: true
  commitBatch: 100 # 批量提交的大小


http://www.kler.cn/news/308311.html

相关文章:

  • 探索轻量级语言模型 GPT-4O-mini 的无限可能
  • 面试常见题之PG数据库
  • 【工作流集成】springboot+vue工作流审批系统(实际源码)
  • 大数据之spark算子简介
  • SSM 框架 个人使用习惯 详细
  • vue3 + vite2 vue 打包后router-view空白
  • 用最新方案为数据密集型AI供能:将服务器农场沉入旧金山湾
  • 【YashanDB知识库】数据库获取时间和服务器时间不一致
  • Facebook的虚拟现实功能简介:社交网络的新前沿
  • 腾讯地图SDK Android版开发 11 覆盖物示例 4 线
  • 什么是蜘蛛池?有什么作用
  • 【原创】java+swing+mysql长途客车售票管理系统设计与实现
  • CACTI 0.8.7 迁移并升级到 1.2.7记录
  • 【零散技术】详解Odoo17邮件发送(一)
  • Unity 编辑器设置中文
  • 对称密码中的密钥是如何实现安全配送的?
  • 【数据结构】快速排序详解(递归版本)
  • 初始爬虫7
  • 时间安全精细化管理平台存在未授权访问漏洞
  • 项目管理 | 一文读懂什么是敏捷开发管理
  • Zotero使用(一)PDF文件导入不会自动识别
  • 3C认证---GB 4706.1-2005
  • 【Java EE】冯·诺依曼体系结构及其在 JavaEE 中的应用
  • systemctl控制服务和守护进程
  • Redis——常用数据类型set
  • nginx服务器安装和部署代理
  • [论文笔记] CSFCN
  • SpringSecurity原理解析(六):SecurityConfigurer 解析
  • 拖拽排序的实现示例demo
  • Mysql调优之性能监控(一)