binlog以及Canel
?版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/github_38687585/article/details/80944824
一、NDB存儲(chǔ)引擎
在介紹binlog之前,需要先了解一下NDB?
NDB 存儲(chǔ)引擎也叫NDB Cluster 存儲(chǔ)引擎,主要用于MySQL Cluster 分布式集群環(huán)境。
NDB特點(diǎn):?
? 分布式:分布式存儲(chǔ)引擎,可以由多個(gè)NDBCluster存儲(chǔ)引擎組成集群分別存放整體數(shù)據(jù)的一部分?
? 支持事務(wù):和Innodb一樣,支持事務(wù)?
? 可與mysqld不在一臺(tái)主機(jī):可以和mysqld分開存在于獨(dú)立的主機(jī)上,然后通過網(wǎng)絡(luò)和mysqld通信交互?
? 內(nèi)存需求量巨大:新版本索引以及被索引的數(shù)據(jù)必須存放在內(nèi)存中,老版本所有數(shù)據(jù)和索引必須存在與內(nèi)存中
二、Mysql集群
mysql主從備份實(shí)現(xiàn):
master將改變記錄到二進(jìn)制日志(binary log)中(這些記錄叫做二進(jìn)制日志事件,binary log events,可以通過show binlog events進(jìn)行查看);
slave將master的binary log events拷貝到它的中繼日志(relay log);
slave重做中繼日志中的事件,將改變反映它自己的數(shù)據(jù)。?
如果你能將自己偽裝為一個(gè)mysql slave,就可以欺騙mysql master給自己推送中繼日志,從而實(shí)現(xiàn)增量獲取事件的功能。阿里開源的canel就是這樣做的。
三、Binlog
簡(jiǎn)單點(diǎn)說:
binlog是一個(gè)二進(jìn)制格式的文件,用于記錄用戶對(duì)數(shù)據(jù)庫更新的SQL語句信息,例如更改數(shù)據(jù)庫表和更改內(nèi)容的SQL語句都會(huì)記錄到binlog里,但是對(duì)庫表等內(nèi)容的查詢不會(huì)記錄。
mysql的binlog數(shù)據(jù)格式,按照生成的方式,主要分為:statement-based、row-based、mixed。
使用mysqlbinlog解析查看
一般來說開啟二進(jìn)制日志大概會(huì)有1%的性能損耗(參見MySQL官方中文手冊(cè) 5.1.24版)。二進(jìn)制有兩個(gè)最重要的使用場(chǎng)景:?
其一:MySQL Replication在Master端開啟binlog,Mster把它的二進(jìn)制日志傳遞給slaves來達(dá)到master-slave數(shù)據(jù)一致的目的。 (數(shù)據(jù)庫的主從復(fù)制)?
其二:自然就是數(shù)據(jù)恢復(fù)了,通過使用mysqlbinlog工具來使恢復(fù)數(shù)據(jù)。
一、開啟binlog日志:?
vi編輯打開mysql配置文件
?# vi /usr/local/mysql/etc/my.cnf
1
在[mysqld] 區(qū)塊?
設(shè)置/添加 log-bin=mysql-bin 確認(rèn)是打開狀態(tài)(值 mysql-bin 是日志的基本名或前綴名);?
重啟mysqld服務(wù)使配置生效
# pkill mysqld
# /usr/local/mysql/bin/mysqld_safe --user=mysql &
1
2
二、也可登錄mysql服務(wù)器,通過mysql的變量配置表,查看二進(jìn)制日志是否已開啟 單詞:variable[?v?ri?b?l] 變量?
登錄服務(wù)器
# /usr/local/mysql/bin/mysql -uroot -p123456
mysql> show variables like 'log_%';?
1
2
三、常用binlog日志操作命令
1.查看所有binlog日志列表
? ? mysql> show master logs;
1
2.查看master狀態(tài),即最后(最新)一個(gè)binlog日志的編號(hào)名稱,及其最后一個(gè)操作事件pos結(jié)束點(diǎn)(Position)值
? ? mysql> show master status;
1
3.刷新log日志,自此刻開始產(chǎn)生一個(gè)新編號(hào)的binlog日志文件
? ? ?mysql> flush logs;
1
注:每當(dāng)mysqld服務(wù)重啟時(shí),會(huì)自動(dòng)執(zhí)行此命令,刷新binlog日志;在mysqldump備份數(shù)據(jù)時(shí)加 -F 選項(xiàng)也會(huì)刷新binlog日志;?
4.重置(清空)所有binlog日志
? ? ?mysql> reset master;
1
四、查看某個(gè)binlog日志內(nèi)容?
這里介紹一種方便的查詢命令:
mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
1
選項(xiàng)解析:?
IN ‘log_name’ 指定要查詢的binlog文件名(不指定就是第一個(gè)binlog文件)?
FROM pos 指定從哪個(gè)pos起始點(diǎn)開始查起(不指定就是從整個(gè)文件首個(gè)pos點(diǎn)開始算)?
LIMIT [offset,] 偏移量(不指定就是0)?
row_count 查詢總條數(shù)(不指定就是所有行)
四、Canel
canal是阿里巴巴旗下的一款開源項(xiàng)目,純Java開發(fā)。基于數(shù)據(jù)庫增量日志解析,提供增量數(shù)據(jù)訂閱&消費(fèi),目前主要支持了MySQL(也支持mariaDB)。
起源:早期,阿里巴巴B2B公司因?yàn)榇嬖诤贾莺兔绹p機(jī)房部署,存在跨機(jī)房同步的業(yè)務(wù)需求。不過早期的數(shù)據(jù)庫同步業(yè)務(wù),主要是基于trigger的方式獲取增量變更,不過從2010年開始,阿里系公司開始逐步的嘗試基于數(shù)據(jù)庫的日志解析,獲取增量變更進(jìn)行同步,由此衍生出了增量訂閱&消費(fèi)的業(yè)務(wù),從此開啟了一段新紀(jì)元。
基于日志增量訂閱&消費(fèi)支持的業(yè)務(wù):
數(shù)據(jù)庫鏡像
數(shù)據(jù)庫實(shí)時(shí)備份
多級(jí)索引 (賣家和買家各自分庫索引)
search build
業(yè)務(wù)cache刷新
價(jià)格變化等重要業(yè)務(wù)消息
1
2
3
4
5
6
原理相對(duì)比較簡(jiǎn)單:
1、canal模擬mysql slave的交互協(xié)議,偽裝自己為mysql slave,向mysql master發(fā)送dump協(xié)議
2、mysql master收到dump請(qǐng)求,開始推送binary log給slave(也就是canal)
3、canal解析binary log對(duì)象(原始為byte流)
1
2
3
架構(gòu)設(shè)計(jì)?
個(gè)人理解,數(shù)據(jù)增量訂閱與消費(fèi)應(yīng)當(dāng)有如下幾個(gè)點(diǎn):
1、增量訂閱和消費(fèi)模塊應(yīng)當(dāng)包括binlog日志抓取,binlog日志解析,事件分發(fā)過濾(EventSink),存儲(chǔ)(EventStore)等主要模塊。
2、如果需要確保HA可以采用Zookeeper保存各個(gè)子模塊的狀態(tài),讓整個(gè)增量訂閱和消費(fèi)模塊實(shí)現(xiàn)無狀態(tài)化,當(dāng)然作為consumer(客戶端)的狀態(tài)也可以保存在zk之中。
3、整體上通過一個(gè)Manager System進(jìn)行集中管理,分配資源。
1
2
3
源碼以及項(xiàng)目介紹: https://github.com/alibaba/canal?
canal消費(fèi)端項(xiàng)目開源:Otter(分布式數(shù)據(jù)庫同步系統(tǒng)),地址:https://github.com/alibaba/otter
---------------------?
作者:HY_Chan?
來源:CSDN?
原文:https://blog.csdn.net/github_38687585/article/details/80944824?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的binlog以及Canel的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux nameserver导致的故
- 下一篇: 熊猫表情包大全搞笑(熊猫表情包大全)