Elastic实战:通过canal1.1.5实现mysql8.0数据增量全量同步到elas。。。
1. 简介
canal是阿⾥开源的数据同步⼯具,基于bin log可以将数据库同步到其他各类数据库中,⽬标数据库⽀持
mysql,postgresql,oracle,redis,MQ,ES等
如果在安装过程中出现报错,可先到这⾥查⼀下是否有相同报错,将会为你节约⼤量排错时间:
2. 下载
2.1 下载canal
因为我们环境是mysql8.0,es7.13.0。⽽canal1.1.4默认不⽀持es7.x,所以我这⾥选择下载1.1.5版本
直接到 下载
下载
# 服务端
canal.deployer-1.1.
# 客户端
canal.adapter-1.1.
# 管理端
canal.admin-1.1.
2.1.1 wget下载
也可以直接在服务器中通过wget指令下载
wget github/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.
wget github/alibaba/canal/releases/download/canal-1.1.5/canal.admin-1.1.
wget github/alibaba/canal/releases/download/canal-1.1.5/canal.adapter-1.1.
2.2 下载jdk
这⾥我选择的是jdk1.8
3. 配置mysql以及创建es索引
因为canal是基于bin log来实现的,所以要开启binlog,并且设置binlog模式为⾏模式。
3.1 开启bin log
这⾥因为我是mac系统,所以以mac为例,其他系统类似
修改myf
sudo vim /etc/myf
如果你是mac系统,这⾥⽤管理员打开该⽂件输⼊密码如果出现密码正确也⽆法进⼊的话,执⾏下述指令,给⽂件赋权sudo  chmod 755 /etc/myf
修改内容
log-bin=mysql-bin
binlog_format=ROW
重启mysql服务
# 我这⾥是brew安装的mysql,且没有配置环境变量,所以需要到安装路径下执⾏重启指令
cd /usr/local/Cellar/mysql/8.0.25_1
./bin/mysql.server restart
登录mysql查看是否开启成功
show variables like '%log_bin%';
3.2 创建canal⽤户
我们创建⼀个canal⽤户,专门⽤于canal同步数据库使⽤
登录mysql,执⾏
# 注意⼤⼩写
mysql下载jar包
CREATE USER canal IDENTIFIED BY 'canaL@123';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
如果创建时出现报错:Your password does not satisfy the current policy requirements
这是因为密码太过简单导致,⽤上特殊字符、数字、字母将密码设置得复杂⼀些即可。
或者你也可以将密码等级设置为LOW
# 查看密码等级
SHOW VARIABLES LIKE 'validate_password%';
set global validate_password.policy=LOW;
3.3 创建es索引
PUT user
{
"mappings": {
"properties": {
"code": {
"type": "keyword"
},
"email": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"realName": {
"type": "text",
"analyzer": "ik_smart",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"roleId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"postId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"deptId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
},
"settings": {
"number_of_replicas": 0,  # 我的是单节点,所以副本分⽚设置为0,根据你⾃⼰的集
"number_of_shards": 1
}
}
4. 安装
canal官⽅提供了⼀些配置指导,包括mysql同步mysql、mq、es的配置,要擅⽤4.1 安装服务端 canal-deployer
1、新建⽂件夹,并将压缩包发送到⽂件夹内,或者直接使⽤上述的wget来下载到指定⽂件夹
mkdir canal
mkdir canal/deployer
# 顺便把另外两个⽂件夹也创建了
mkdir canal/adapter
mkdir canal/admin
# 上传压缩包,这⾥选择scp指令上传
scp canal.adapter-1.1. root@172.16.188.2:/var/local/canal/adapter
scp canal.deployer-1.1. root@172.16.188.2:/var/local/canal/deployer
scp canal.admin-1.1. root@172.16.188.2:/var/local/canal/admin
2、解压
cd /var/local/canal/deployer
tar -zxvf canal.deployer-1.1.
3、修改配置⽂件
vi conf/example/instance.properties
修改内容:
设置数据库地址,账号和密码设置为上述创建的专⽤账号canal
# 如果是mysql集,则这⾥最好设置⼀个值,随便填,与my.conf中的server-id不同即可;不填也⾏,启动时会⾃动⽣成⼀个随机id,可能会与server-id相同,但概率极低
# sql.slaveId=0
# enable gtid use true/false
idon=false
# position info
canal.instance.master.address=172.16.188.1:3306  # canal_manager数据库地址(改这⾥)
# 如果要配置全量同步的话需要配置这⾥的journal,position,timestamp,后续单独讲解全量同步
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.id=
# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=
# table meta tsdb info
canal.able=true
# username/password
canal.instance.dbUsername=canal  # 数据库账号,上述创建的canal账号(改这⾥)
canal.instance.dbPassword=canaL@123  # 数据库密码(改这⾥)
tionCharset = UTF-8
# enable druid Decrypt database password
ableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6L eHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==
# table regex
canal.=.*\\..*
# table black regex
canal.instance.=
# mq config
pic=example
canal.mq.partition=0
4、将mysql驱动器替换成8.0版本。因为我的数据库是mysql8.0版本。如果是mysql5.7可跳过这步(1)将lib中的驱动器替换成mysql-connector-java-8.0.22.jar
(2)修改驱动器权限
chmod 777 lib/mysql-connector-java-8.0.22.jar
chmod +st lib/mysql-connector-java-8.0.22.jar
(3)修改后权限如图所⽰
ll lib
# 删除原来的5.x 版本的驱动器
rm -rf lib/mysql-connecter-java-5.1.48.jar
5、启动服务
./bin/startup.sh
6、deployer是后台启动的,通过查看⽇志检查是否正常启动
cat logs/canal/canal.log