基于Canal实现MySQL 8.0 数据库数据同步-当前快讯
2023-04-23 22:24:38 来源:博客园 小 中
主机名称 | 操作系统 | 说明 |
---|---|---|
192.168.11.82 | Ubuntu 22.04 | 主库所在服务器 |
192.168.11.28 | Oracle 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-deployercd /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-adaptercd /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 数据库数据同步-当前快讯
- 即时看!Node工程的依赖包管理方式
- 中南建设为子公司文昌中南、芜湖荣众合计担保7952万元 天天速看
- 广东统计局:一季度广东实现地区生产总值突破3万亿,工业生产增速转正|世界快报
- 全球微头条丨我国已有20个省份、40余条线路开展车路协同智慧高速公路建设
- 生态环境部:今年一季度全国地表水水质提升
- 第九章 无眠之夜
- 【速看料】东吴证券给予信德新材买入评级 2022年年报及2023年一季报点评:Q1单位盈利承压 业绩略低于市场预期
- 新华三与UNICON.UZ签署战略合作协议 焦点短讯
- 2022年年报&23年一季报交流记录
- 每日讯息!“中特估”的重大投资方向!
- 简讯:总算也反超了
- 短线自选池(2)4.24—4.28-环球观察
- 网传女基金经理豪购翠湖1.7亿元豪宅! 李蓓澄清:现在买翠湖跟2000块以上买贵州茅台没什么区别
- 伊朗官员:有关部门将尽一切努力在伊朗和沙特之间开设航班 全球热资讯
- 办实事 暖人心——中信银行晚报大厦支行为特殊客户开启绿色通道服务_全球微动态
- 曝!宝马说谎了!两女孩没有辞职,只是戴了个口罩又出来了
- 环球快报:春光乍现!宾利女销售不穿内裤,下蹲时全走光,网友:真没节操?
- 嫌中国麻将不好看,美国人设计“白人麻将”,满满的美国文化|微动态
- 央行召开2023年会计财务工作电视会议-快播报
- 敏感肌肤护肤品排行榜_敏感肌肤_环球观察
- 惠伦晶体4月24日起停牌 控股股东拟变更为国企_天天关注
- 快看:人民海军开展多项主题活动纪念成立74周年
- 当前时讯:过去一年,你读了几本书?——第20次全国国民阅读调查结果发布
- 新华三与UNICON.UZ签署战略合作协议 看点
- 博彦科技:接受东方证券等机构调研-环球最新
- 俄罗斯与联合国将磋商黑海港口农产品外运协议前景
- 最新消息:多家A股上市公司谋划布局6G
- 宋育仁的主要活动_宋育仁简介 天天快播
- 看热讯:雅诗阁提前实现全球16万套的管理目标