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

推薦閱讀