前言
服務(wù)器說明
主機(jī)名稱 | 操作系統(tǒng) | 說明 |
---|---|---|
192.168.11.82 | Ubuntu 22.04 | 主庫所在服務(wù)器 |
192.168.11.28 | Oracle Linux Server 8.7 | 從庫所在服務(wù)器 |
版本說明
MySQL版本:MySQL_8.0.32
Canal版本:Canal_1.1.7
//我的canal安裝部署在192.168.11.82上,當(dāng)然你也可以部署在其它的服務(wù)器上
Java版本:1.8.0.362
配置MySQL8.0數(shù)據(jù)庫
修改MySQL配置文件
1、Ubuntu系統(tǒng)下MySQL配置文件位置
cd /etc/mysql/mysql.conf.d
vi mysqld.cnf
2、CentOS系統(tǒng)下MySQL配置文件位置
vi /etc/my.cnf
3、添加如下配置,開啟MySQL binlog功能
# 服務(wù)編號, 與其它節(jié)點(diǎn)不沖突即可
server_id=1
log_bin=binlog
binlog_format=ROW
Canal簡介
關(guān)于canal簡介,這里就不再闡述,具體可以參看官方文檔介紹,地址如下:
https://github.com/alibaba/canal/wiki/簡介
主庫服務(wù)器操作
啟動MySQL8.0數(shù)據(jù)庫
systemctl start mysql 或者
systemctl start mysqld.service
Ubuntu 使用前者
創(chuàng)建賬號密碼
mysql> CREATE USER canal IDENTIFIED BY 'canal';
mysql> GRANT SELECT, SHOW VIEW, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
mysql> FLUSH PRIVILEGES;
canal數(shù)據(jù)同步服務(wù)器操作
創(chuàng)建canal文件夾
cd /usr/local
mkdir canal
cd canal
mkdir canal-package canal-adapter canal-deployer
安裝canal deployer和canal adapter
官網(wǎng)下載地址
https://github.com/alibaba/canal/releases/tag/canal-1.1.7-alpha-2
只需要下載標(biāo)紅框的兩個(gè)文件即可。復(fù)制到canal-package文件夾下。
解壓
tar -zxvf canal.adapter-1.1.7-SNAPSHOT.tar.gz -C /usr/local/canal/canal-adapter
tar -zxvf canal.deployer-1.1.7-SNAPSHOT.tar.gz -C /usr/local/canal/canal-deployer
配置和啟動canal-deployer
配置canal-deployer
由于此次同步為MySQL數(shù)據(jù)庫間的數(shù)據(jù)同步,所以只需修改 instance.properties 即可。
cd /usr/local/canal/canal-deployer/conf/example
vi instance.properties
修改內(nèi)容如下:
# 修改說明
第一個(gè)框:主庫所在服務(wù)器IP
第二個(gè)框:主庫數(shù)據(jù)庫賬號密碼
第三個(gè)框:規(guī)則如下:
instance.properties中同步數(shù)據(jù)表默認(rèn)為同步數(shù)據(jù)庫下所有的表信息,具體配置如圖第三個(gè)框:
# 若需要同步某幾張表,可以參考如下配置:
# 同步某數(shù)據(jù)庫test1下的user表,test2數(shù)據(jù)庫下的所有表,所有庫下所有表數(shù)據(jù)
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/example
cat example.log
我遇到的幾個(gè)錯(cuò)誤情況,僅供參考:
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
若出現(xiàn)如下信息:
解決方案:(在此強(qiáng)烈建議系統(tǒng)中只安裝jdk8或者jdk11,切不可采用jenv管理jdk,安裝多個(gè)版本)
cd /usr/local/canal/canal-deployer/bin
./stop.sh
vi startup.sh
# 刪除報(bào)錯(cuò)信息包含的參數(shù)(該錯(cuò)誤信息可能會出現(xiàn)多次,出現(xiàn)哪個(gè)刪除哪個(gè)即可)
./startup.sh
重新啟動:
cd /usr/local/canal/canal-deployer/bin
./startup.sh
直到出現(xiàn)以下信息:
# 打開日志文件
cat /usr/local/canal/canal-deployer/logs/example/example.log
# 出現(xiàn)以下信息說明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/conf
vi 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 tcp consumer
# 修改位置1:Canal-deployer所在主機(jī)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/rdb
vi mytest_user.yml
同步數(shù)據(jù)庫下的某張表,例如同步mytest數(shù)據(jù)庫下的user表,操作如下:
dataSourceKey: defaultDS # 源數(shù)據(jù)源的key, 對應(yīng)上面配置的srcDataSources中的值
destination: example # cannal的instance或者M(jìn)Q的topic
groupId: g1 # 對應(yīng)MQ模式下的groupId, 只會同步對應(yīng)groupId的數(shù)據(jù)
outerAdapterKey: mysql1 # adapter key, 對應(yīng)上面配置outAdapters中的key
concurrent: true # 是否按主鍵hash并行同步, 并行同步的表必須保證主鍵不會更改及主鍵不能為其他同步表的外鍵!
dbMapping:
database: test # 源數(shù)據(jù)源的database/schema
table: user # 源數(shù)據(jù)源表名
targetTable: test.user # 目標(biāo)數(shù)據(jù)源的庫名.表名
targetPk: # 主鍵映射
id: id # 如果是復(fù)合主鍵可以換行映射多個(gè)
mapAll: true # 是否整表映射, 要求源表和目標(biāo)表字段名一模一樣 (如果targetColumns也配置了映射, 則以targetColumns配置為準(zhǔn))
#targetColumns: # 字段映射, 格式: 目標(biāo)表字段: 源表字段, 如果字段名一樣源表字段名可不填
# id:
# name:
# role_id:
# c_time:
# test1:
同步數(shù)據(jù)庫下所有表數(shù)據(jù),例如:同步mytest數(shù)據(jù)庫下所有表數(shù)據(jù),操作如下:
dataSourceKey: defaultDS
destination: example
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:
mirrorDb: true
database: test # 該數(shù)據(jù)庫名稱修改為你的數(shù)據(jù)庫名稱
啟動canal-adapter
cd /usr/local/canal/canal-adapter/bin
./startup.sh
出現(xiàn)錯(cuò)誤,排查方式同canal-deployer
查看日志信息文章來源:http://www.zghlxwxcb.cn/news/detail-422650.html
cd /usr/local/canal/canal-adapter/logs/adapter
cat adapter.log
補(bǔ)充說明:
1、只有canal-adapter成功啟動并正確連接canal-deployer后,canal-deployer才會讀取binlog信息。/usr/local/canal/canal-deployer/conf/example 文件夾下才會出現(xiàn)meta.dat文件。
2、canal-adapter啟動以后會出現(xiàn)127.0.0.1:3306/canal_manage連接失敗信息,該信息是因?yàn)槲覀儧]有安裝啟動前端頁面所致,可以忽略,不影響數(shù)據(jù)同步。
3、以上所有內(nèi)容均為自己實(shí)操結(jié)果。文章來源地址http://www.zghlxwxcb.cn/news/detail-422650.html
到了這里,關(guān)于基于Canal實(shí)現(xiàn)MySQL 8.0 數(shù)據(jù)庫數(shù)據(jù)同步的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!