????? mysql replication 中主從延遲是一個(gè)比較常見的問題,請(qǐng)看前期一篇博文: 怎樣解決MySQL數(shù)據(jù)庫(kù)主從復(fù)制延遲的問題 。根據(jù)目前有些公司使用的方案,最近測(cè)試了兩個(gè),其中之一是阿里的relay fetch ,業(yè)績(jī)說法數(shù)據(jù)預(yù)熱,當(dāng)然也有其他開源類似開源工具,目前諸如 mk-slave-prefetch 及 replication-prefetch 等,感興趣可以去看看。整理的文檔主要是參考了官方的 《relay fetch 讀取本地binlog 進(jìn)行備庫(kù)預(yù)熱》 ,有些圖片直接引用,還有文字,與官方不同的是安裝過程中出現(xiàn)的問題及解決方式,歸納如下:
基本思路原理 ?
在 備庫(kù)sql線程執(zhí)行更新之前,預(yù)先將相應(yīng)的數(shù)據(jù)加載到內(nèi)存中,并不能提高sql_thread線程執(zhí)行sql的能力,也不能加快io_thread線程讀取日志的速度。
?
?
限制
? 1 目前僅支持主庫(kù)binlog ROW模式
? 2 表需要有主鍵或唯一索引
? 3 忽略test和mysql數(shù)據(jù)庫(kù)
? 4 如果數(shù)據(jù)庫(kù)中存在類似tbname_1、tbname_2這樣命名的多個(gè)表,但其表模式卻不相同時(shí),請(qǐng)加上-t選項(xiàng),例如:tb_1 tb_2 tb_3這樣命名的三個(gè)表,默認(rèn)情況下,被認(rèn)為是同樣模式的表,這個(gè)特點(diǎn)是淘寶為了適應(yīng)他們自己的數(shù)據(jù)庫(kù)環(huán)境
? 5 默認(rèn)最多支持10000個(gè)用戶表,如果學(xué)員支持更多表,可以通過修改宏MAX_TABLE_NUM來進(jìn)行調(diào)整。
?
獲取源碼?
??安裝svn客戶端從下列地址獲取源碼:
svn checkout http://relay-fetch.googlecode.com/svn/trunk/
安裝編譯:
make
make的時(shí)候需要根據(jù)mysql安裝環(huán)境修改Makefile配置文件,relay-fetch依賴mysql的lib庫(kù)文件等,gcc編譯的時(shí)候指定,如下紅色標(biāo)示部分:
#locate your libmysqlclient_r.so
?
all:
??????? gcc -g -O0 -Wall-o relayfetch relayfetch.c -I/usr/local/mysql/include/ -L/usr/local/mysql/lib -lmysqlclient_r -lpthread
?
clean:
??????? rm -rf *.orelayfetch
?
32位系統(tǒng)安裝有warning ,如下
relayfetch.c: In function ‘daemon_rf’:
relayfetch.c:2599: warning: format ‘%lu’ expects type ‘longunsigned int’, but argument 4 has type ‘long long unsigned int’
relayfetch.c:2599: warning: format ‘%lu’ expects type ‘longunsigned int’, but argument 4 has type ‘long long unsigned int’
不是錯(cuò)誤error,沒有太多影響
安裝完畢,在安裝目錄下運(yùn)行./relayfetch –h,了解一下relayfetch 常用參數(shù),如果報(bào)如下錯(cuò)誤error while loading shared libraries: libmysqlclient.so.16/18:cannot open shared object file
應(yīng)該是mysql的lib庫(kù)文件引用問題,建立如下類似軟鏈接
32位
ln -s /usr/local/mysql/lib/libmysqlclient.so.18? /usr/lib/
?
64位
ln -s /usr/local/mysql/lib/libmysqlclient.so.18? /usr/lib64/
?
使用
運(yùn)行: ./relayfetch -h來獲取選項(xiàng)
主要選項(xiàng)包括:
-d debug
-D 后臺(tái)運(yùn)行
-p 密碼
-u 用戶名,請(qǐng)以root用戶運(yùn)行
-P mysqld端口號(hào)
-s 整數(shù),單位為M,當(dāng)read線程超過sql線程position這么多字節(jié)數(shù)時(shí),會(huì)等待sql線程,默認(rèn)為1M
-S mysql sock文件路徑
-n worker線程數(shù)目。默認(rèn)為5
-a 當(dāng)seconds_behind_master大于這個(gè)值時(shí),會(huì)喚醒relayfetch,默認(rèn)為1s
-t 當(dāng)使用該選項(xiàng)時(shí),表明不使用分表規(guī)則(例如,表name_1 和表name_2會(huì)被視為同一類表)
我們可以通過端口號(hào)來運(yùn)行
./relayfetch-uroot -t -P3306
或者通過sock來運(yùn)行
./relayfetch-S /u01/mysql/run/mysql.sock -uroot
測(cè)試效果
?
?這個(gè)效果不明顯,可能機(jī)器原因(本人測(cè)試256內(nèi)存虛擬機(jī))。請(qǐng)參考官方測(cè)試吧
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
