Canal(基于Docker同步mysql数据到elasticsearch)
一、版本环境
# enviroment
mysql:5.7.18
elasticsearch:6.4.0
elasticsearch-head-master // elaticsearch Web端监控
elasticsearch-analysis-ik:6.4.0 // elastics-ik 中文分词器(插件)
canal.server:1.1.4 // canal数据同步server端
canal.adapter:1.1.4 // canal数据同步适配器
# 注意
最好版本保持一致进行测试、版本不一致可能出现一系列问题,后续看升级mysql8.X
可能出现的问题在最后面有列举
二、docker安装mysql,并配置binlog
2.1 安装mysql
docker pull mysql:5.7.18 // 拉取镜像
docker images // 查看镜像
docker run --name mysql-5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456
-d mysql:5.7.18 // 运行容器
docker update --restart=always [id] // 修改容器配置
2.2 修改mysql配置
docker exec -it [id] /bin/bash // 进入容器
apt-get update
apt-get install vim // 安装vim编辑器
cd /etc/mysql/mysql.conf.d
vim mysqld.cnf // 修改mysql配置
[mysqld]
#binlog setting
log-bin=mysql-bin // 开启logbin
binlog-format=ROW // binlog日志格式
server-id=1 // mysql主从备份serverId,canal中不能与此相同
2.3 验证mysql binlog配置
mysql -u root -p // mysql登录
>show databases;
>use elastics; // 开启数据库
>show variables like 'log_%';
>show variables like 'binlog_format';
>show master status; // binlog日志文件 mysql-bin.000001
>reset master; // 重置日志
2.4 查看日志文件
cd /var/lib/mysql // 进入日志文件目录
mysqlbinlog -vv mysql-bin.000001 // row格式查看日志
三、docker安装elasticsearch,并建立索引
3.1 安装elasticsearch
docker pull elasticsearch:6.4.0
docker run --restart=always -p 9200:9200 -p 9300:9300
-e "discovery.type=single-node" --name='elasticsearch' -d elasticsearch:6.4.0
3.2 配置elasticsearch.yml
docker exec -it 29a8c503480b /bin/bash
cd config
vi elasticsearch.yml
3.3 elasticsearch操作
GET http://192.168.80.131:9200/_mapping?pretty=true // 查询所有mapping
PUT http://192.168.80.131:9200/student?pretty=true // 创建索引student
GET http://192.168.80.131:9200/elastics_user/_search // 查询该索引的数据
PUT http://192.168.80.131:9200/elastics_user // 创建索引,使用了分词器
{
"mappings": {
"_doc": {
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"desc": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"age": {
"type": "integer"
}
}
}
}
}
DELETE http://192.168.80.131:9200/student // 删除索引
POST http://192.168.80.131:9200/elastics_user/_doc/1 // 添加数据
GET http://192.168.80.131:9200/elastics_user/_doc/_search
GET http://192.168.80.131:9200/elastics_user/_doc/_search // 查询数据
{
"query": {
"match": {
"desc": "工程" // 这里用到分词
}
},
"size": 10
}
DELETE http://192.168.80.131:9200/elastics_user/_doc/1 // 删除数据
3.4 安装ik中文分词器
# a.在线安装
docker exec -it [c_id] /bin/bash // 进入容器
cd /bin/
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.0/elasticsearch-analysis-ik-6.4.0.zip
cd /plugins/ // 进入插件目录,可以看到已安装 analysis-ik
# b.离线安装(离线下载ik-6.4.0.zip)
docker cp elasticsearch-analysis-ik-6.4.0.zip elasticsearch-6.4:/usr/share/elasticsearch/plugins
mkir ik/ // 创建目录
unzip elasticsearch-analysis-ik-6.4.0.zip -d ik/ // 解压zip到目录中
rm -rf elasticsearch-analysis-ik-6.4.0.zip // plugins目录里不能有其他格式文件
3.5 验证是否加载成功
exit // 退出容器
docker restart [c_id] // 重启容器
docker logs [c_id] // 查看容器运行日志
四、docker安装canal-server
4.1 docker安装canal-server,作为mysql从库,模拟发送同步数据请求
docker pull canal/canal-server:v1.1.4
docker run --name canal-server-1.1.4 -p 11111:11111 -id canal/canal-server:v1.1.4
4.2 修改server配置
docker exec -it [c_id]/bin/bash
cd canal-server/conf/example/
vi instance.properties // 修改配置
4.3 验证服务是否启动成功
docker exec -it [c_id]/bin/bash
cd canal-server/bin/
./start.sh // 启动服务
cd canal-server/logs/example/
tail -100f example.log // 查看日志
五、docker安装canal-adapter
5.1 安装canal-adapter镜像,非官方镜像,此为他人上传的版本
# https://hub.docker.com/r/slpcat/canal-adapter
docker pull slpcat/canal-adapter:v1.1.4
docker run --name canal-adapter-v1.1.4 -p 8081:8081 -d slpcat/canal-adapter:v1.1.4
5.2 修改配置文件(application.yml、mytest_user.yml)
docker exec -it 44f0c02a7707 /bin/bash // 进入容器
cd conf
vi application.yml // 编辑配置文件
5.3 修改表映射索引文件elastics_user.yml
cd /conf/es
rm -r biz_order.yml customer.yml // 删除多余的表映射文件
mv mytest_user.yml elastics_user.yml // 重命名文件(数据库_索引.yml)
vi elastics_user.yml
六、开始测试
6.1 开启各个服务
# 1.打开mysql
# 2.打开elasticsearch(需要提前创建好表的索引elastics_user)
# 3.打开canal-server
docker exec -it 7d1f7ac86892 /bin/bash
cd /canal-server/logs/example
tail -100f example.log // 查看日志
# 4.打开canal-adapter
docker exec -it 44f0c02a7707 /bin/bash
cd /logs/adapter
tail -100f adapter.log
6.2 更新数据、查看elasticsearch索引
# 向mysql中添加一条数据
# canal-adapter DML日志
# 查询elasticsearch数据(http://192.168.80.131:9200/elastics_user/_search)
# 全量同步(http://192.168.80.131:8081/etl/es/elastics_user.yml)
七、可能出现的问题
# 1.es failed,es index not found
该问题为elasticsearch7.X时出现,更换6.X版本即可
# 2.unknown setting [mode] please check that any required plugins are installed, or check the breaking changes documentation for removed settings
更改canal-adapter application.yml配置
hosts=127.0.0.1:9200
mode=rest
# 还有些其他问题请自行踩坑,测试的话先保持我的版本,然后再去升级这样最好
参考的文章:
canal.
elasticsearch安装部署.
alibaba canal数据同步.
docker镜像仓库.