兩個windows服務(wù)器使用canal實現(xiàn)mysql實時同步
canal是什么?
canal是阿里基于java寫的一個組件,他的作用是canal.deployer讀取mysql數(shù)據(jù)的binlog日志,然后canal.adapter將其轉(zhuǎn)換為對應(yīng)的數(shù)據(jù)(數(shù)據(jù)的變化或者變化后的數(shù)據(jù),跟配置有關(guān)),并且同步到相關(guān)中間件。本文實現(xiàn)兩個windows服務(wù)器使用canal實現(xiàn)mysql主從復(fù)制實時同步。
MySQL主備復(fù)制原理
MySQL master將數(shù)據(jù)變更寫入二進制日志(binarylog,其中記錄叫做二進制日志事件binary log events,可以通過show binlog events進行查看)
MySQL slave 將master的 binary log events拷貝到它的中繼日志(relay log)
MySQL slave 重放relay log中事件,將數(shù)據(jù)變更反映它自己的數(shù)據(jù)
canal 工作原理
canal 模擬 MySQL slave的交互協(xié)議,偽裝自己為MySQL slave,向MySQL master發(fā)送dump協(xié)議
MySQL master 收到dump請求,開始推送binary log給slave (即canal )
canal 解析 binary log 對象(原始為 byte 流)
開啟mysql的binlog
canal的原理是基于mysql binlog技術(shù),所以這里一定需要開啟mysql的binlog寫入功能。
檢查binlog功能是否有開啟
-- OFF 表示功能未開啟 show variables like 'log_bin';
binlog格式
binlog記錄格式有兩種,statement/row,其中statment記錄SQL格式,row格式記錄每行的變更內(nèi)容,控制格式的參數(shù)有三種,statement/mix/row,其中mix表示兩者的混合
show variables like '%binlog_format%';
如何開啟binlog功能
配置my.ini,在[mysqld] 下添加:
log-bin=mysql-bin binlog_format=ROW server-id=1
注意:mysql實例id,不能和canal的slaveId重復(fù)
binlog命令行參數(shù)詳解:
- log-bin [=file_name] 此參數(shù)表示啟用binlog日志功能,并可以定制文件名稱,默認為mysql-bin。存放目錄是mysql安裝目錄的data文件夾下。
- binlog_format 此參數(shù)配置binlog的日志格式,默認為mixed。
- max_binlog_size此參數(shù)配置binlog的日志最大值,最大和默認值是1GB。
- max_binlog_cache_size此參數(shù)表示binlog使用最大內(nèi)存的數(shù)。
- binlog-do-db=db_name 此參數(shù)表示只記錄指定數(shù)據(jù)庫的二進制日志。
- binlog-ignore-db=db_name此參數(shù)表示不記錄指定的數(shù)據(jù)庫的二進制日志。
- expire_logs_days 此參數(shù)表示binlog日志保留的時間,默認單位是天。
重啟mysql
-- 關(guān)閉服務(wù) net stop mysql -- 開啟服務(wù) net start mysql
重啟后在D:\softinstall\mysql\mysql-5.7.38-winx64\data\目錄下會產(chǎn)生mysql-bin.000001 和 mysql-bin.index 兩個文件。
查看二進制文件
在dos命令行中,進入到mysql的安裝目錄下,即D:\softinstall\mysql\mysql-5.7.38-winx64,再進到bin/目錄下,執(zhí)行mysqlbinlog命令查看日志:
mysqlbinlog ../data/mysql-bin.000001
為了方便查看日志內(nèi)容 可以導(dǎo)出到.sql文件
mysqlbinlog ../data/mysql-bin.000001 ->a.sql
可以通過show master status來查看當(dāng)前寫入的binlog的位點,其中:
- File表示下一個binlog的bytes內(nèi)容即將寫入的文件名
- position表示下一個binlog的bytes內(nèi)容寫入到file中的位點的起點(byte字節(jié)數(shù))
- Binlog_Do_DB表示需要記錄binlog的庫名列表,也就是白名單
- Binlog_Ignore_DB表示需要忽略的binlog的庫名列表,也就是黑名單
- Executed_Gtid_Set表示本庫中已經(jīng)執(zhí)行完的全局事務(wù)的id集合
可以通過show binary logs來查看binlog列表,表示本地保存的binlog及其大小(byte字節(jié)數(shù))
在mysql里面添加以下的相關(guān)用戶和權(quán)限
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal'; -- 注意權(quán)限問題,否則在后續(xù)的一些操作中會提示沒有權(quán)限 GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES;
下載安裝Canal服務(wù)
推薦canal1.1.5,只需要使用jdk1.8。canal1.1.6,該版本需要使用jdk11+
1)canal角色
- canal-admin:canal控制臺,可以統(tǒng)一管理canal服務(wù)
- canal-deployer:也是canal-server:canal的一個節(jié)點服務(wù)
- canal-instance:canal-server中的一個處理實例,可以處理不同的業(yè)務(wù)邏輯
- canal-adaper:canal適配器,canal 1.1.1之后,提供了適配器功能,可將canal server的數(shù)據(jù)直接輸出到目的地,不需要用戶編寫客戶端(個性化需求還需要用戶編寫客戶端實現(xiàn))
2)下載地址
https://github.com/alibaba/canal/releases
從canal官網(wǎng)下載canal.deployer和canal.deployer,在兩臺服務(wù)器上準(zhǔn)備兩個MySQL數(shù)據(jù)庫,其中一個作為源庫,另一個為目標(biāo)庫,我準(zhǔn)備的MySQL源庫服務(wù)器IP為:172.17.0.2,MySQL服務(wù)端口為3306,目標(biāo)庫的服務(wù)器IP為172.17.0.4,MySQL服務(wù)端口為3307。
canal.deployer
修改conf/example/instance.properties文件,如下部分:
即將canal.instance.master.address參數(shù)值改為172.17.0.2:3306
canal.adapter
修改conf/application.yml文件,如下部分:
即注釋掉srcDataSources部分,修改driverClassName為com.mysql.cj.jdbc.Driver,然后修改對應(yīng)url,用戶名和密碼。
修改conf/rdb/mytest_user.yml文件,如下部分:
啟動canal server和canal adapter
啟動canal server,如下:bin/startup.bat
啟動canal adapter,如下:bin/startup.bat
在172.17.0.2的數(shù)據(jù)庫上執(zhí)行插入語句,在172.17.0.4進行查詢數(shù)據(jù)是否成功同步。
總結(jié)
到此這篇關(guān)于兩個windows服務(wù)器使用canal實現(xiàn)mysql實時同步的文章就介紹到這了,更多相關(guān)canal實現(xiàn)mysql主從復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql-connector-java與Mysql、Java的對應(yīng)版本問題
這篇文章主要介紹了mysql-connector-java與Mysql、Java的對應(yīng)版本問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11MySql總彈出mySqlInstallerConsole窗口的解決方法
這篇文章主要介紹了MySql總彈出mySqlInstallerConsole窗口的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09