Maxwell+RabbitMq實現(xiàn)數(shù)據(jù)同步
一、概述
Maxwell是由美國Zendesk開源,用Java編寫的MySQL等關(guān)系型數(shù)據(jù)庫的實時抓取軟件,能夠?qū)崟r抓取MySQL二進制日志binlog,并生成JSON格式的消息,作為生產(chǎn)者發(fā)送給kafaka、RabbitMQ、Redis等系統(tǒng)的應(yīng)用程序。常用的場景有:ETL、維護緩存、收集表級別的DML指標、增量數(shù)據(jù)同步到搜索引擎、切庫binlog回滾方案等。
Maxwell的特點包括:
- **實時數(shù)據(jù)捕獲:**Maxwell可以實時的捕獲數(shù)據(jù)庫中的更改,包括插入、刪除、更新等操作
- **支持多種數(shù)據(jù)庫:**它可以與多種關(guān)系型數(shù)據(jù)庫系統(tǒng)(如 MySQL、PostgreSQL)集成
- **JSON格式輸出:**Maxwell通常以JSON格式輸出變更的數(shù)據(jù),易于處理和解析
- 可配置性: 用戶可以根據(jù)自己的需求配置Maxwell,包括選擇要捕獲的數(shù)據(jù)表,輸出目標等
Maxwell主要提供了以下功能:
- 支持 select * from table 的方式,進行全量數(shù)據(jù)初始化
- 支持在主庫發(fā)生failover(宕機)后,自動恢復(fù)binlog位置
- 支持斷點續(xù)傳,Maxwell會記錄上一次讀取binlog的位點信息,下一次繼續(xù)從該位點讀取數(shù)據(jù)
- 工作方式為:偽裝Salve,接收binlog events,然后根據(jù)schemas信息拼裝,可接收DDL、DML等各種事件
二、背景
由于我們所開發(fā)的物流系統(tǒng)A所使用的數(shù)據(jù)庫是MySQL,另一個系統(tǒng)B 使用的數(shù)據(jù)庫是Oracle,但是B系統(tǒng)需要獲取A系統(tǒng)的數(shù)據(jù)去完成一些必要的業(yè)務(wù),所以就需要將A系統(tǒng)的數(shù)據(jù)同步到B數(shù)據(jù)中,最開始用的是OGG 工具同步的,但是會存在一些性能問題,而且一旦MySQL庫發(fā)生故障或者觸發(fā)了主從切換,那么同步相關(guān)的數(shù)據(jù)表都需要進行相關(guān)的初始化操作。最開始考慮使用Canal進行同步的,但是Canal不能斷點續(xù)傳,所以最終使用Maxwell框架進行,于是使用下述架構(gòu)圖對系統(tǒng)間的數(shù)據(jù)同步進行改造:
三、工作原理
Maxwell的操作開銷很低,只需要有一個MySQL和一個可寫的后續(xù)地方即可,當(dāng)該應(yīng)用程序偽裝為MySQL的從機,讀取到MySQL主機的binlog日志后,以JSON格式寫入到Kafaka、Rabbit MQ等消息中間件,特點就是簡單易用,不需要編寫額外的客戶端,大大降低了開發(fā)成本。
- Master主庫將改變記錄,寫到二進制日志(binary log)
- Slave從庫向MySQL master發(fā)送dump協(xié)議,將Master主庫的binary log events拷貝到它的中繼日志(relay log)
- Slave從庫讀取并重做中繼日志中的事件,將改變的數(shù)據(jù)同步到自己的數(shù)據(jù)庫
四、Maxwell的下載與使用
4.1下載Maxwell
Maxwell官網(wǎng)地址: http://maxwells-daemon.io/
Github網(wǎng)址: https://github.com/zendesk/maxwell
本文使用的是Maxwell-1.29.2版本講述
下載地址: https://github.com/zendesk/maxwell/releases/download/v1.29.2/maxwell-1.29.2.tar.gz
#使用weget命令下載
cd /usr/local
mkdir software
cd /usr/local/softewre
wget https://github.com/zendesk/maxwell/releases/download/v1.29.2/maxwell-1.29.2.tar.gz
如果是通過下載地址鏈接下載的,完成后 通過XFTP工具上傳到/usr/local/softewre目錄下
4.2 解壓
#使用下述命令解壓壓縮包
tar zxvf maxwell-1.29.2.tar.gz
文章來源:http://www.zghlxwxcb.cn/news/detail-828404.html
4.3 配置MySQL的binlog日志
#先使用這個命令查看MySQL是否開啟了binlog日志,如果Value列是OFF,代表未開啟binlog日志
SHOW VARIABLES LIKE 'log_bin';
#查看MySQL的binlog日志的格式,關(guān)注binlog_format
show global variables like "binlog%";
#使用下述命令開啟MySQL的 binlog日志
# 每個人安裝的MySQL的配置文件目錄不一樣,根據(jù)自己的MySQL安裝情況,找到自己的配置文件修改,我的是放在etc目錄下的
vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin #添加這一行就
binlog-format=ROW #選擇row模式
server_id=1 #隨機指定一個不能和其他集群中機器重名的字符串,如果只有一臺機器,那就可以隨便指定了
binlog-do-db=數(shù)據(jù)庫名稱 #啟用binlog的數(shù)據(jù)庫,需根據(jù)實際情況作出修改 默認全部開啟
#然后退出,保存
以下是我的MySQL配置文件,可供參考文章來源地址http://www.zghlxwxcb.cn/news/detail-828404.html
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data/mysql
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/data/mysql/mysql.err
pid-file=/usr/local/mysql/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
#skip-grant-tables
#開啟binlog日志相關(guān)配置
#服務(wù)ID
server-id=1
#binlog配置 只要配置了log_bin地址就會開啟
log_bin=mysql-bin
#規(guī)定binlog的格式,binlog有三種格式statement、row、mixad,默認使用statement,建議使用row格式
binlog_format=ROW
# 啟用binlog的數(shù)據(jù)庫,需根據(jù)實際情況作出修改 默認全部開啟
binlog-do-db=gzmpcli_db
到了這里,關(guān)于Maxwell+RabbitMq實現(xiàn)數(shù)據(jù)同步的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!