Canal(基于Docker同步mysql数据到elasticsearch)

Canal(基于Docker同步mysql数据到elasticsearch)

  • 一、版本环境
  • 二、docker安装mysql,并配置binlog
    • 2.1 安装mysql
    • 2.2 修改mysql配置
    • 2.3 验证mysql binlog配置
    • 2.4 查看日志文件
  • 三、docker安装elasticsearch,并建立索引
    • 3.1 安装elasticsearch
    • 3.2 配置elasticsearch.yml
    • 3.3 elasticsearch操作
    • 3.4 安装ik中文分词器
    • 3.5 验证是否加载成功
  • 四、docker安装canal-server
    • 4.1 docker安装canal-server,作为mysql从库,模拟发送同步数据请求
    • 4.2 修改server配置
    • 4.3 验证服务是否启动成功
  • 五、docker安装canal-adapter
    • 5.1 安装canal-adapter镜像,非官方镜像,此为他人上传的版本
    • 5.2 修改配置文件(application.yml、mytest_user.yml)
    • 5.3 修改表映射索引文件elastics_user.yml
  • 六、开始测试
    • 6.1 开启各个服务
    • 6.2 更新数据、查看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中不能与此相同

Canal(基于Docker同步mysql数据到elasticsearch)_第1张图片

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;  // 重置日志

Canal(基于Docker同步mysql数据到elasticsearch)_第2张图片
Canal(基于Docker同步mysql数据到elasticsearch)_第3张图片
在这里插入图片描述

2.4 查看日志文件

cd /var/lib/mysql  // 进入日志文件目录
mysqlbinlog -vv mysql-bin.000001  // row格式查看日志

Canal(基于Docker同步mysql数据到elasticsearch)_第4张图片

三、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

Canal(基于Docker同步mysql数据到elasticsearch)_第5张图片

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]  // 查看容器运行日志

Canal(基于Docker同步mysql数据到elasticsearch)_第6张图片

四、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  // 修改配置

Canal(基于Docker同步mysql数据到elasticsearch)_第7张图片

4.3 验证服务是否启动成功

docker exec -it [c_id]/bin/bash
cd canal-server/bin/
./start.sh  // 启动服务
cd canal-server/logs/example/
tail -100f example.log  // 查看日志

Canal(基于Docker同步mysql数据到elasticsearch)_第8张图片

五、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  // 编辑配置文件

Canal(基于Docker同步mysql数据到elasticsearch)_第9张图片
Canal(基于Docker同步mysql数据到elasticsearch)_第10张图片

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

Canal(基于Docker同步mysql数据到elasticsearch)_第11张图片

六、开始测试

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 

Canal(基于Docker同步mysql数据到elasticsearch)_第12张图片
Canal(基于Docker同步mysql数据到elasticsearch)_第13张图片
Canal(基于Docker同步mysql数据到elasticsearch)_第14张图片

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)

Canal(基于Docker同步mysql数据到elasticsearch)_第15张图片
在这里插入图片描述
Canal(基于Docker同步mysql数据到elasticsearch)_第16张图片
Canal(基于Docker同步mysql数据到elasticsearch)_第17张图片

七、可能出现的问题

# 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镜像仓库.

你可能感兴趣的:(mysql,elasticsearch,mysql主从备份,java,mysql,elasticsearch)