Mysql通过Canal同步Elasticsearch

目录

  • 版本管理
  • Mysql 设置
    • 在MySQL配置文件my.cnf设置:
    • 检查是否开启
    • 增加新用户:
  • 安装 Elasticsearch
    • es 跨域问题
    • 目录挂载
  • 安装 Elasticsearch-Head
    • 解决 es 跨域连接问题
    • 启动 es-head
    • 解决 es-head 无法创建索引
  • 安装 Canal
    • 安装镜像
    • 编写配置文件
    • 问题:
  • 安装 Canal-Adapter
    • 安装镜像
    • 配置canal-adapter 文件'
  • 测试
    • 同步全量数据
    • 创建表
    • 创建 es 索引
版本管理mysql:8.0Elasticsearch 7.9.2Canal v1.1.5Canal-Adapter v1.1.5Canal 参考官网: https://github.com/alibaba/canal
Mysql 设置在MySQL配置文件my.cnf设置:
  • 应该是 vi 或者 vim 无法使用,使用 docker copy 来解决
docker exec -it [id] /bin/bash// 进入容器# 本地创建vim mysqld.cnf// 修改mysql配置# 打开binloglog-bin=mysql-bin# 选择ROW(行)模式binlog-format=ROW# 配置MySQL replaction需要定义,不要和canal的slaveId重复server_id=1docker copy /root/mysqld.cnf容器id/etc/mysql/
Mysql通过Canal同步Elasticsearch

文章插图
检查是否开启# 查看是否开启binlog模式show variables like 'log_bin%';# 查看binlog日志文件列表show variables like 'binlog_format%';# 查看当前正在写入的binlog文件:SHOW master STATUS;# 重置reset master;增加新用户:CODE# 添加用户并设置密码CREATE USER canal IDENTIFIED BY 'canal';# 授权GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;#重新加载权限FLUSH PRIVILEGES;安装 Elasticsearch# 下载elasticsearch镜像docker pull elasticsearch:7.9.2 # //启动elasticsearchdocker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx1g" elasticsearch:7.9.2 # //进入elasticsearch容器docker exec -it elasticsearch /bin/bash# 安装ik分词器(服务器下载失败可能是内存炸了)./bin/elasticsearch-plugininstall https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.2/elasticsearch-analysis-ik-7.9.2.zipes 跨域问题【Mysql通过Canal同步Elasticsearch】docker exec -it elasticsearch /bin/shvi config/elasticsearch.ymlcluster.name: "docker-cluster"network.hosts:0.0.0.0# 跨域http.cors.allow-origin: "*"http.cors.enabled: true目录挂载# 授予权限,不然启动失败chmod 777 /home/haha/mydata/elasticsearch/datadocker run -d --name elasticsearch --restart=always -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx1g" -v/home/haha/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins -v /home/haha/mydata/elasticsearch/data:/usr/share/elasticsearch/data elasticsearch:7.9.2
Mysql通过Canal同步Elasticsearch

文章插图
安装 Elasticsearch-Head解决 es 跨域连接问题docker exec -it elasticsearch /bin/shvi config/elasticsearch.ymlcluster.name: "docker-cluster"network.hosts:0.0.0.0# 跨域http.cors.allow-origin: "*"http.cors.enabled: true启动 es-headdocker run -d \--name=elasticsearch-head \-p 9100:9100 \mobz/elasticsearch-head:5-alpine解决 es-head 无法创建索引进入elasticsearch-head容器内
docker exec -it elasticsearch-head /bin/shvi _site/vendor.js将第6886行contentType: "application/x-www-form-urlencoded",改为contentType: "application/json;charset=UTF-8",将第7574行var inspectData = https://www.huyubaike.com/biancheng/s.contentType ==="application/x-www-form-urlencoded" &&改为var inspectData = https://www.huyubaike.com/biancheng/s.contentType ==="application/json;charset=UTF-8" &&
Mysql通过Canal同步Elasticsearch

文章插图

Mysql通过Canal同步Elasticsearch

文章插图
重启,可以清一下浏览器缓存
exitdocker restart elasticsearch-head安装 Canal可以参考:
https://blog.csdn.net/qq_32836247/article/details/116561732
  • 2 G的服务器搞不来
安装镜像# 拉取镜像$ docker pull canal/canal-server:v1.1.5# 随便启动一个,用于拉取配置文件$ docker run --name canal -p 11111:11111-d canal/canal-server:v1.1.5# 挂载配置文件$ docker cp canal:/home/admin /home/haha/docker-canal# 删除容器$ docker stop canal$ docker rm canal# 启动新的容器$ docker run --name canal -p 11111:11111 -v /home/haha/docker-canal:/home/admin -d canal/canal-server:v1.1.5

推荐阅读