現(xiàn)有2臺DB服務(wù)器,分別用于A業(yè)務(wù)與B業(yè)務(wù),其中A業(yè)務(wù)比較重要,需要對A業(yè)務(wù)的1個DB(TaeOss)進行熱備,大概有40G的數(shù)據(jù),并用業(yè)務(wù)B的DB服務(wù)器作為備機,服務(wù)器分布如下:
為五家渠等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及五家渠網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站設(shè)計、五家渠網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!10.137.143.151 A業(yè)務(wù)
10.137.143.152 B業(yè)務(wù)
開發(fā)那邊的要求是:
在導(dǎo)出A業(yè)務(wù)的DB(TaeOss)時,不能對A業(yè)務(wù)有影響。同時在B業(yè)務(wù)的DB服務(wù)器上進行恢復(fù)時,也不能有較大影響,盡量控制在1分鐘以內(nèi)。
采取的方案:
1、mysqldump:屬于邏輯備份,會存在鎖表,但考慮到數(shù)據(jù)量比較大,鎖表的時間會比較長,業(yè)務(wù)不允許,pass掉;
2、xtrabackup:屬于物理備份,不存在鎖表,但考慮到2臺DB使用的都是共享表空間,同時在業(yè)務(wù)B的數(shù)據(jù)庫進行恢復(fù)時,一是時間比較長,二是數(shù)據(jù)肯定不正確,pass掉(測試過);
3、mydumper:屬于邏輯備份,是一個多線程、高性能的數(shù)據(jù)邏輯備份、恢復(fù)的工具,且鎖表的時間很短(40G數(shù)據(jù),10分鐘以內(nèi)),同時會記錄binlog file和pos,業(yè)務(wù)可以接受。
mydumper主要有如下特性:
(1)、任務(wù)速度要比mysqldump快6倍以上;
(2)、事務(wù)性和非事務(wù)性表一致的快照(適用于0.2.2以上版本);
(3)、快速的文件壓縮;
(4)、支持導(dǎo)出binlog;
(5)、多線程恢復(fù)(適用于0.2.1以上版本);
(6)、以守護進程的工作方式,定時快照和連續(xù)二進制日志(適用于0.5.0以上版本)。
mydumper安裝:
https://launchpad.net/mydumper/0.6/0.6.2/+download/mydumper-0.6.2.tar.gz
# yum install glib2-devel mysql-devel zlib-devel pcre-devel
# tar zxvf mydumper-0.6.2.tar.gz
# cd mydumper-0.6.2
# cmake .
# make
# make install
參數(shù)如下:
由于DB是部署在比較老的SuSE Linux 10服務(wù)器上,安裝mydumper時依賴的庫比較多,會比較繁瑣,同時采用本地備份的話,也會占用大量的磁盤I/O,所以我們選擇在同網(wǎng)段的另一臺centos 6.4(10.137.143.156)服務(wù)器進行備份。
步驟如下:
1、在“10.137.143.151、10.137.143.152”上對“10.137.143.156”進行臨時授權(quán)
# mysql -uroot -e "grant all privileges on *.* to 'backup'@'10.137.143.156' identified by 'backup2015';"
# mysql -uroot -e "flush privileges;"
2、在“10.137.143.156”上對“10.137.143.151”的DB(TaeOss)進行備份
# mydumper -h 10.137.143.151 -u backup -p backup2015 -B TaeOss -t 8 -o /data/rocketzhang
3、將備份數(shù)據(jù)恢復(fù)到“10.137.143.152”
# myloader -h 10.137.143.152 -u backup -p backup2015 -B TaeOss -t 8 -o -d /data/rocketzhang
4、主從關(guān)系建立:10.137.143.151(主)、10.137.143.152(從)
在“10.137.143.151”建立授權(quán)賬號:
# mysql -uroot -e "grant replication slave on *.* to 'repl'@'10.137.143.152' identified by 'repl123456';"
# mysql -uroot -e "flush privileges;"
在“10.137.143.156”查看記錄下的binlog信息:
在“10.137.143.152”如下操作:
# vim /etc/my.cnf
……
replicate-do-table = TaeOss.%
replicate-wild-do-table = TaeOss.%
……
# service mysqld reload
# mysql -uroot -e "change master to master_host='10.137.143.151',master_user='repl',master_password='repl123456',master_log_file='mysql-bin.002205',master_log_pos=456584891;"
# mysql -uroot -e "start slave;"
# mysql -uroot -e "show slave status\G;"
出現(xiàn)如下信息:
看來是存在主鍵沖突,導(dǎo)致主從復(fù)制失敗。
問題分析:
在主DB(10.137.143.151)上執(zhí)行:
# mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.002205 > mysql-bin.002205.txt
# grep -C 8 529864938 mysql-bin.002205.txt
大概的意思是,在主DB上存在對t_evil_detect_uin_blacklist表的insert操作時,發(fā)生了主鍵沖突,當(dāng)在從端進行同步的時候,也出現(xiàn)了主鍵沖突,從而導(dǎo)致主從同步失敗。
臨時的解決辦法:
導(dǎo)出從端的表TaeOss.t_evil_detect_uin_blacklist
# mysqldump -uroot --opt TaeOss t_evil_detect_uin_blacklist > TaeOss.t_evil_detect_uin_blacklist.sql
去掉TaeOss.t_evil_detect_uin_blacklist.sql其中的主鍵語句:
然后再導(dǎo)入:
# mysql -uroot TaeOss < TaeOss.t_evil_detect_uin_blacklist.sql
# mysql -uroot -e "stop slave;"
# mysql -uroot -e "start slave;"
# mysql -uroot -e "show slave status\G;"
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。