基于Canal实现MySQL 8.0 数据库数据同步-当前快讯

2023-04-23 22:24:38 来源:博客园
前言服务器说明
主机名称操作系统说明
192.168.11.82Ubuntu 22.04主库所在服务器
192.168.11.28Oracle Linux Server 8.7从库所在服务器
版本说明
MySQL版本:MySQL_8.0.32Canal版本:Canal_1.1.7           //我的canal安装部署在192.168.11.82上,当然你也可以部署在其它的服务器上Java版本:1.8.0.362
配置MySQL8.0数据库修改MySQL配置文件1、Ubuntu系统下MySQL配置文件位置
cd /etc/mysql/mysql.conf.dvi mysqld.cnf
2、CentOS系统下MySQL配置文件位置
vi /etc/my.cnf
3、添加如下配置,开启MySQL binlog功能
# 服务编号, 与其它节点不冲突即可server_id=1log_bin=binlogbinlog_format=ROW
Canal简介

关于canal简介,这里就不再阐述,具体可以参看官方文档介绍,地址如下:


【资料图】

https://github.com/alibaba/canal/wiki/简介

主库服务器操作启动MySQL8.0数据库
systemctl start mysql  或者systemctl start mysqld.serviceUbuntu 使用前者
创建账号密码
mysql> CREATE USER canal IDENTIFIED BY "canal";  mysql> GRANT SELECT, SHOW VIEW, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO "canal"@"%";mysql> FLUSH PRIVILEGES;
canal数据同步服务器操作创建canal文件夹
cd /usr/localmkdir canalcd canalmkdir canal-package canal-adapter canal-deployer
安装canal deployer和canal adapter官网下载地址
https://github.com/alibaba/canal/releases/tag/canal-1.1.7-alpha-2

只需要下载标红框的两个文件即可。复制到canal-package文件夹下。解压

tar -zxvf canal.adapter-1.1.7-SNAPSHOT.tar.gz -C /usr/local/canal/canal-adaptertar -zxvf canal.deployer-1.1.7-SNAPSHOT.tar.gz -C /usr/local/canal/canal-deployer
配置和启动canal-deployer配置canal-deployer

由于此次同步为MySQL数据库间的数据同步,所以只需修改 instance.properties 即可。

cd /usr/local/canal/canal-deployer/conf/examplevi instance.properties

修改内容如下:

# 修改说明第一个框:主库所在服务器IP第二个框:主库数据库账号密码第三个框:规则如下:instance.properties中同步数据表默认为同步数据库下所有的表信息,具体配置如图第三个框:# 若需要同步某几张表,可以参考如下配置:# 同步某数据库test1下的user表,test2数据库下的所有表,所有库下所有表数据canal.instance.filter.regex=test1.user,test2\\..*,.*\\..*
启动canal-deployer
cd /usr/local/canal/canal-deployer/bin./startup.sh

查看日志确定是否启动成功

cd /usr/local/canal/canal-deployer/logs/examplecat example.log

我遇到的几个错误情况,仅供参考:canal-deployer启动之后,如果在 logs 文件夹下没有 example 文件,参考如下情况说明:1、查看 /usr/local/canal/canal-deployer/bin 文件夹下,是否存在.pid的文件。2、查看logs文件夹下的canal文件夹下的canal_stdout.log文件,命令如下:

cat /usr/local/canal/canal-deployer/logs/canal/canal_stdout.log

若出现如下信息:解决方案:(在此强烈建议系统中只安装jdk8或者jdk11,切不可采用jenv管理jdk,安装多个版本)

cd /usr/local/canal/canal-deployer/bin./stop.shvi startup.sh# 删除报错信息包含的参数(该错误信息可能会出现多次,出现哪个删除哪个即可)./startup.sh

重新启动:

cd /usr/local/canal/canal-deployer/bin./startup.sh

直到出现以下信息:

# 打开日志文件cat /usr/local/canal/canal-deployer/logs/example/example.log# 出现以下信息说明canal-deployer启动成功 [destination = example , address = /192.168.11.82:3306 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=binlog.000040,position=65224673,serverId=1,gtid=,timestamp=1682062760000] cost : 1331ms , the next step is binlog dump
配置canal-adapter修改配置文件
cd /usr/local/canal/canal-adapter/confvi application.yml
server:  port: 8081spring:  jackson:    date-format: yyyy-MM-dd HH:mm:ss    time-zone: GMT+8    default-property-inclusion: non_nullcanal.conf:  mode: tcp #tcp kafka rocketMQ rabbitMQ  flatMessage: true  zookeeperHosts:  syncBatchSize: 1000  retries: -1  timeout:  accessKey:  secretKey:  consumerProperties:    # canal tcp consumer    # 修改位置1:Canal-deployer所在主机IP    canal.tcp.server.host: 127.0.0.1:11111    canal.tcp.zookeeper.hosts:    canal.tcp.batch.size: 500    canal.tcp.username:    canal.tcp.password:    # kafka consumer    kafka.bootstrap.servers: 127.0.0.1:9092    kafka.enable.auto.commit: false    kafka.auto.commit.interval.ms: 1000    kafka.auto.offset.reset: latest    kafka.request.timeout.ms: 40000    kafka.session.timeout.ms: 30000    kafka.isolation.level: read_committed    kafka.max.poll.records: 1000    # rocketMQ consumer    rocketmq.namespace:    rocketmq.namesrv.addr: 127.0.0.1:9876    rocketmq.batch.size: 1000    rocketmq.enable.message.trace: false    rocketmq.customized.trace.topic:    rocketmq.access.channel:    rocketmq.subscribe.filter:    # rabbitMQ consumer    rabbitmq.host:    rabbitmq.virtual.host:    rabbitmq.username:    rabbitmq.password:    rabbitmq.resource.ownerId:# 修改位置:添加源库配置信息,此处为同步同库下所有表信息  srcDataSources:    defaultDS:      url: jdbc:mysql://192.168.11.82:3306/mynet?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false      username: ymliu      password: ymliu2023  canalAdapters:  - instance: example # canal instance Name or mq topic name    groups:    - groupId: g1      outerAdapters:      - name: logger      - name: rdb        key: mysql1        properties:          jdbc.driverClassName: com.mysql.jdbc.Driver          jdbc.url: jdbc:mysql://192.168.11.28:3306/mynet?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false          jdbc.username: ymliu          jdbc.password: ymliu2023          druid.stat.enable: false          druid.stat.slowSqlMillis: 1000#      - name: rdb#        key: oracle1#        properties:#          jdbc.driverClassName: oracle.jdbc.OracleDriver#          jdbc.url: jdbc:oracle:thin:@localhost:49161:XE#          jdbc.username: mytest#          jdbc.password: m121212#      - name: rdb#        key: postgres1#        properties:#          jdbc.driverClassName: org.postgresql.Driver#          jdbc.url: jdbc:postgresql://localhost:5432/postgres#          jdbc.username: postgres#          jdbc.password: 121212#          threads: 1#          commitSize: 3000#      - name: hbase#        properties:#          hbase.zookeeper.quorum: 127.0.0.1#          hbase.zookeeper.property.clientPort: 2181#          zookeeper.znode.parent: /hbase#      - name: es#        hosts: 127.0.0.1:9300 # 127.0.0.1:9200 for rest mode#        properties:#          mode: transport # or rest#          # security.auth: test:123456 #  only used for rest mode#          cluster.name: elasticsearch#      - name: kudu#        key: kudu#        properties:#          kudu.master.address: 127.0.0.1 # "," split multi address#      - name: phoenix#        key: phoenix#        properties:#          jdbc.driverClassName: org.apache.phoenix.jdbc.PhoenixDriver#          jdbc.url: jdbc:phoenix:127.0.0.1:2181:/hbase/db#          jdbc.username:#          jdbc.password:
修改canal-adapter/conf/rdb文件夹下的yml文件
cd /usr/local/canal/canal-adapter/conf/rdbvi mytest_user.yml
同步数据库下的某张表,例如同步mytest数据库下的user表,操作如下:
dataSourceKey: defaultDS        # 源数据源的key, 对应上面配置的srcDataSources中的值destination: example            # cannal的instance或者MQ的topicgroupId: g1                     # 对应MQ模式下的groupId, 只会同步对应groupId的数据outerAdapterKey: mysql1         # adapter key, 对应上面配置outAdapters中的keyconcurrent: true                # 是否按主键hash并行同步, 并行同步的表必须保证主键不会更改及主键不能为其他同步表的外键!dbMapping:  database: test                # 源数据源的database/schema  table: user                   # 源数据源表名  targetTable: test.user        # 目标数据源的库名.表名  targetPk:                     # 主键映射    id: id                      # 如果是复合主键可以换行映射多个  mapAll: true                  # 是否整表映射, 要求源表和目标表字段名一模一样 (如果targetColumns也配置了映射, 则以targetColumns配置为准)  #targetColumns:               # 字段映射, 格式: 目标表字段: 源表字段, 如果字段名一样源表字段名可不填  #  id:  #  name:  #  role_id:  #  c_time:  #  test1: 
同步数据库下所有表数据,例如:同步mytest数据库下所有表数据,操作如下:
dataSourceKey: defaultDSdestination: examplegroupId: g1outerAdapterKey: mysql1concurrent: truedbMapping:  mirrorDb: true  database: test          # 该数据库名称修改为你的数据库名称
启动canal-adapter
cd /usr/local/canal/canal-adapter/bin./startup.sh

出现错误,排查方式同canal-deployer查看日志信息

cd /usr/local/canal/canal-adapter/logs/adaptercat adapter.log
补充说明:

1、只有canal-adapter成功启动并正确连接canal-deployer后,canal-deployer才会读取binlog信息。/usr/local/canal/canal-deployer/conf/example 文件夹下才会出现meta.dat文件。2、canal-adapter启动以后会出现127.0.0.1:3306/canal_manage连接失败信息,该信息是因为我们没有安装启动前端页面所致,可以忽略,不影响数据同步。3、以上所有内容均为自己实操结果。

关键词:

相关文章

热文推荐

基于Canal实现MySQL 8.0 数据库数据同步-当前快讯
基于Canal实现MySQL 8.0 数据库数据同步-当前快讯

前言服务器说明|主机名称|操作系统|说明||--|--|||192......更多>

即时看!Node工程的依赖包管理方式
即时看!Node工程的依赖包管理方式

在前端工程化中,JavaScript依赖包管理是非常重要的一......更多>

中南建设为子公司文昌中南、芜湖荣众合计担保7952万元 天天速看
中南建设为子公司文昌中南、芜湖荣众合计担保7952万元 天天速看

截至公告日,中南建设及控股子公司对外担保余额为427......更多>

广东统计局:一季度广东实现地区生产总值突破3万亿,工业生产增速转正|世界快报
广东统计局:一季度广东实现地区生产总值突破3万亿,工业生产增速转正|世界快报

上证报中国证券网讯4月23日,广东统计局发布2023年一......更多>

排行推荐

全球微头条丨我国已有20个省份、40余条线路开展车路协同智慧高速公路建设
全球微头条丨我国已有20个省份、40余条线路开展车路协同智慧高速公路建设
新华社北京4月23日电(记者叶昊鸣)智慧高速公路是交... 更多>
生态环境部:今年一季度全国地表水水质提升
生态环境部:今年一季度全国地表水水质提升
上证报中国证券网讯据生态环境部4月23日消息,生态环... 更多>
第九章 无眠之夜
第九章 无眠之夜
【在这个被堕渊的侵蚀的世界,死亡,变得不再是一切的... 更多>
【速看料】东吴证券给予信德新材买入评级 2022年年报及2023年一季报点评:Q1单位盈利承压 业绩略低于市场预期
【速看料】东吴证券给予信德新材买入评级 2022年年报及2023年一季报点评:Q1单位盈利承压 业绩略低于市场预期
东吴证券04月23日发布研报称,给予信德新材(301349 ... 更多>
热资讯!国资委召开国有企业创建世界一流示范企业推进会
据国资委网站,国资委副主任翁杰明指出,示范企业下一... 更多>
海关总署副署长王令浚会见克罗地亚外交部国务秘书马图斯奇 当前焦点
据海关发布微信公众号,海关总署副署长王令浚21日上午... 更多>
证监会核发首批企业债券注册批文 短讯
据证监会官网,证监会对国家发展改革委移交的34个企业... 更多>
宁静的快乐 每日快报
前几天和朋友去看盆景。朋友随口说了一句,这么小的一... 更多>
香港特首李家超访问比亚迪深圳总部|头条焦点
4月22日,香港特首李家超参观了比亚迪深圳总部,乘坐... 更多>
热消息:当AI已成往事,系统会自动再平衡:(第1023篇周策略)2023.04.23
$银华天玑-悄悄盈(TIA05031)$$银华天玑-年年红(TIAA04... 更多>
人工智能和Ai产业链是一场财富的再分配
1:创业板左侧第一个蓝色圈处是2022年4 22-4 30号,... 更多>
财报季最后一周!海天味业、迈瑞医疗、五粮液业绩将揭晓,你更期待哪一家?|一周财报前瞻|每日速讯
四月末,A股上市公司年报披露接近尾声。同花顺数据显... 更多>
2023广东省博物馆五一展览活动有哪些?
2023广东省博物馆五一展览活动有哪些?一眼千万年——... 更多>
捷达VS7什么平台_捷达vs7是什么平台打造的 焦点快看
1、捷达vs7是基于大众的mqb平台打造的。捷达vs7是捷达... 更多>

【快播报】后背毛囊炎怎么治好_后背

热推荐:一年级家长会心得简短100字

维生素e可以擦脸吗有什么效果_维生

环球速递!福建白水洋图片_白水洋在

天天关注:暁_对于暁简单介绍

当前热点-晾鹰台集蒙古诸部落慰劳遣

晾马台村_对于晾马台村简单介绍

【安委办动态】石湖荡镇恬润新苑开

每日速读!宇环数控:签订1.07亿元日

世界播报:深圳一季度末人民币贷款余