日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

es 全量同步mysql_使用canal将mysql同步到es中

發(fā)布時間:2023/12/10 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 es 全量同步mysql_使用canal将mysql同步到es中 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

因為自己項目中需要用到mysql數(shù)據(jù)同步到es中,查找了相關(guān)資料最后決定用canal來做,所以便有了本文,下面一起來看如何使用canal吧

canal教程

根據(jù) https://github.com/alibaba/canal 上的原理解釋,我們知道 canal 會模擬 mysql slave 的交互協(xié)議,偽裝自己為 mysql slave,然后向 mysql master 發(fā)送 dump 協(xié)議。

mysql master 收到 dump 請求,開始推送 binary log 給 slave(也就是 canal),然后 canal 解析 binary log 對象(原始為 byte流)。

經(jīng) canal 解析過的對象,我們使用起來就非常的方便了。

再根據(jù) https://github.com/alibaba/canal/releases 提供的版本信息,你會發(fā)現(xiàn) canal 其實相當(dāng)于一個中間件,專門用來解析 MySQL 的 binlog 日志。canal 解析好了之后,會封裝成一個數(shù)據(jù)對象,通過 protobuf3.0 協(xié)議進行交互,讓 canal 客戶端進行消費。

根據(jù)上面的解釋,以及 canal 提供的版本信息,我們在使用 canal 的時候,首選要安裝一個 canal.deployer-1.1.4.tar.gz 進行解析 MySQL 的 binlog 日志。

下載后,復(fù)制 canal.deployer-1.1.4.tar.gz 到 MySQL 主機上,比如放在 /usr/local/soft/目錄下。然后依次執(zhí)行下面的命令:

mkdir canalcd canaltar -zxvf ../canal.deployer-1.1.4-SNAPSHOT.tar.gz

然后修改 canal 的配置文件 vim conf/example/instance.properties

這三項改成你自己的,比如我的配置如下:

canal.instance.dbUsername=canalcanal.instance.dbPassword=canalcanal.instance.connectionCharset = UTF-8canal.instance.defaultDatabaseName =canal_test

然后保存并退出。(VI 模式下,按 Esc 輸入 :wq 回車退出。)

接著,我們檢查一下 MySQL 的配置。確定版本和是否開啟了 binlog 日志,以及日志格式。

show variables like 'binlog_format';show variables like 'log_bin';select version();

canal 支持 binlog 格式為 ROW 的模式。如果你沒開啟 binlog,并且格式是非 row 的,建議修改一下 mysql 的配置文件。

執(zhí)行 mysql –help | grep my.cnf 找到 mysql 的 my.cnf 文件。

執(zhí)行 vim /etc/my.cnf 命令。添加下面 3 個配置。

log-bin=mysql-bin #添加這一行就okbinlog-format=ROW #選擇row模式server_id=1 #配置mysql replaction需要定義,不能和canal的slaveId重復(fù)

然后保存并退出。

接著執(zhí)行 sudo service mysqld restart 重啟 MySQL。

需要注意的是你的 mysql 用戶,必須要有 REPLICATION SLAVE 權(quán)限。該權(quán)限授予 slave 服務(wù)器以該賬戶連接 master 后可以執(zhí)行 replicate 操作的權(quán)利。

如果沒有權(quán)限,則使用 root 賬戶登錄進 MySQL,執(zhí)行下面的語句,創(chuàng)建用戶,分配權(quán)限。

CREATE USER canal IDENTIFIED BY ‘canal’;GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘‘canal’’@’%’;FLUSH PRIVILEGES;

MySQL 啟動后,就可以開啟 canal 服務(wù)了。

/usr/local/soft/canal/bin/startup.sh

開啟后,觀察 canal 服務(wù)的日志,確保服務(wù)正常。

tail 300f /usr/local/soft/canal/logs/canal/canal.log

查看 canal 的日志

確定沒有問題后,開始編寫我們的測試程序。

pom.xml 中導(dǎo)入下面的依賴。

com.alibaba.otter canal.client 1.1.4

使用JAVA進行測試

import java.net.InetSocketAddress;import java.util.List;import com.alibaba.otter.canal.client.CanalConnectors;import com.alibaba.otter.canal.client.CanalConnector;import com.alibaba.otter.canal.common.utils.AddressUtils;import com.alibaba.otter.canal.protocol.Message;import com.alibaba.otter.canal.protocol.CanalEntry.Column;import com.alibaba.otter.canal.protocol.CanalEntry.Entry;import com.alibaba.otter.canal.protocol.CanalEntry.EntryType;import com.alibaba.otter.canal.protocol.CanalEntry.EventType;import com.alibaba.otter.canal.protocol.CanalEntry.RowChange;import com.alibaba.otter.canal.protocol.CanalEntry.RowData;public class SimpleCanalClientExample {public static void main(String args[]) { // 創(chuàng)建鏈接 CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(AddressUtils.getHostIp(), 11111), "example

總結(jié)

以上是生活随笔為你收集整理的es 全量同步mysql_使用canal将mysql同步到es中的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。