適用場(chǎng)景:數(shù)據(jù)量比較大,通常以G計(jì)算,常規(guī)sql導(dǎo)入導(dǎo)出數(shù)據(jù)龐大容易出錯(cuò)。要將其他地方的mysql遷移到我司彈性云服務(wù)器,這時(shí)候就可以考慮使用innobackupex來(lái)備份遷移。先決條件:Linux系統(tǒng)服務(wù)器,原數(shù)據(jù)庫(kù)服務(wù)器支持ssh登陸,擁有控制管理權(quán)限。原數(shù)據(jù)庫(kù)服務(wù)器和現(xiàn)在服務(wù)器都需要安裝innobackupex。注意:以下示例來(lái)源于網(wǎng)上,路徑均為示例,具體以實(shí)際路徑為準(zhǔn),請(qǐng)充分了解并有相關(guān)備份再操作。
安裝:wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.21/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.21-1.el7.x86_64.rpm yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-mysql #安裝依賴包 rpm -ivh percona-xtrabackup-24-2.4.21-1.el7.x86_64.rpm –nodeps —force
innobackupex常用選項(xiàng): –host 指定主機(jī) –user 指定用戶名 –password 指定密碼 –port 指定端口 —databases 指定數(shù)據(jù)庫(kù) –incremental 創(chuàng)建增量備份 –incremental-basedir 指定包含完全備份的目錄 –incremental-dir 指定包含增量備份的目錄,增量備份目錄 –apply-log 對(duì)備份進(jìn)行預(yù)處理操作,一般情況下,在備份完成后,數(shù)據(jù)尚且不能用于恢復(fù)操作,因?yàn)閭浞莸臄?shù)據(jù)中可能會(huì)包含尚未提交的事務(wù)或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務(wù)。因此,此時(shí)數(shù)據(jù)文件仍處理不一致狀態(tài)。“準(zhǔn)備”的主要作用正是通過回滾未提交的事務(wù)及同步已經(jīng)提交的事務(wù)至數(shù)據(jù)文件也使得數(shù)據(jù)文件處于一致性狀態(tài)。 –redo-only 不回滾未提交事務(wù) —copy-back 恢復(fù)備份目錄
一些常用的其他可選參數(shù):–lock-wait-query-type 該參數(shù)允許用戶指定,哪類的sql語(yǔ)句是需要Flush table with read lock等待的–lock-wait-threshold 運(yùn)行超過這個(gè)時(shí)間的查詢才算長(zhǎng)查詢–lock-wait-timeout 等待長(zhǎng)查詢多少時(shí)間后再嘗試FTWRL,一旦Flush table with read lock被阻塞超過預(yù)定時(shí)間,則XtraBackup出錯(cuò)返回退出,參數(shù)允許用戶指定了超過該閾值時(shí)間的查詢會(huì)被Kill,同時(shí)也允許用戶指定Kill
全量備份:innobackupex –user=root –password=xxxx –datadir=/var/lib/mysql /mysql_bkup/ #datadir是mysql數(shù)據(jù)data存儲(chǔ)路徑,可以到my.cnf里面查看。mysql_bkup備份存放路徑。默認(rèn)會(huì)以時(shí)間命名備份目錄。
#合并數(shù)據(jù),使數(shù)據(jù)文件處于一致性的狀態(tài):innobackupex –apply-log /mysql_bkup/2022-08-03_21-14-37/
異機(jī)恢復(fù)準(zhǔn)備:1、使用scp命令將/mysql_bkup/2022-08-03_21-14-37/轉(zhuǎn)移到目標(biāo)新服務(wù)器數(shù)據(jù)庫(kù)。2、新服務(wù)器mysql服務(wù)關(guān)停。將datadir數(shù)據(jù)存儲(chǔ)目錄下的數(shù)據(jù)刪除。這里建議改名,然后再新建一個(gè)(datadir路徑可從my.cnf配置文件里面查看)。
恢復(fù)數(shù)據(jù):按上面做好了恢復(fù)準(zhǔn)備,使用命令恢復(fù)。innobackupex –copy-back /mysql_bkup/2022-08-03_21-14-37/ 或者:innobackupex –copy-back –datadir=/var/lib/mysql /mysql_bkup/2022-08-03_21-14-37/恢復(fù)以后注意使用chown重置目錄權(quán)限,然后將mysql服務(wù)重新啟動(dòng)。
如果數(shù)據(jù)庫(kù)遷移過程是在運(yùn)行的,數(shù)據(jù)有更新,就需要增量備份。增量備份:–incremental 創(chuàng)建增量備份–incremental-basedir 指定包含完全備份的目錄–incremental-dir 指定包含增量備份的目錄
#合并全備數(shù)據(jù)目錄,確保數(shù)據(jù)的一致性innobackupex –apply-log –redo-only /mysql_bkup/2022-08-03_21-14-37/
#創(chuàng)建增量備份innobackupex –user=root –password=xxx –incremental /mysql_bkup_add/ –incremental-basedir=/mysql_bkup/2022-08-03_21-14-37/
#將增量備份數(shù)據(jù)合并到全備數(shù)據(jù)目錄當(dāng)中innobackupex –apply-log /mysql_bkup/2022-08-03_21-14-37/ –incremental-dir=/mysql_bkup_add/增量備份/
#數(shù)據(jù)一致性innobackupex –apply-log /mysql_bkup/2022-08-03_21-14-37
#恢復(fù)數(shù)據(jù):innobackupex –copy-back /mysql_bkup/2022-08-03_21-14-37 #恢復(fù)到異地也是需要scp遷移到新服務(wù)器,按上面說(shuō)明先停止服務(wù),刪除data數(shù)據(jù)再操作。
增量備份可以是多次,以下是多次增量備份示例:#進(jìn)行第一次全備[root@ebs~]#innobackupex –datadir=/var/lib/mysql –user=root –password=xxx ./bkup
#進(jìn)行第一次增備,基于上次的全備[root@ebs ~]#innobackupex –datadir=/var/lib/mysql –user=root –password=xxx –incremental ./bkup/incer1 –incremental-basedir=./bkup/2022-04-23_11-39-31
#進(jìn)行第二次全備,基于第一次增備[root@ebs ~]#innobackupex –datadir=/var/lib/mysql –user=root –password=xxx –incremental ./bkup/incer2 –incremental-basedir=./bkup/incer1/2022-04-23_11-47-10
–incremental 創(chuàng)建增量備份–incremental-basedir 指定包含完全備份的目錄–incremental-dir 指定包含增量備份的目錄
##########################恢復(fù)時(shí)進(jìn)行數(shù)據(jù)整合#####################################################對(duì)整合的開始備份集——全備集應(yīng)用日志,并指定”–redo-only”表示開始進(jìn)入日志追加innobackupex –apply-log –redo-only ./bkup/2022-04-23_11-39-31/
#對(duì)第一個(gè)增備集進(jìn)行”準(zhǔn)備”,將其追加到全備集中innobackupex –apply-log –redo-only ./bkup/2022-04-23_11-39-31/ –incremental-dir=./bkup/incer1/2022-04-23_11-47-10/
#對(duì)第二個(gè)增備集進(jìn)行”準(zhǔn)備”,將其追加到全備集中,但是不再應(yīng)用”–redo-only”,表示整合的結(jié)束點(diǎn)innobackupex –apply-log ./bkup/2022-04-23_11-39-31/ –incremental-dir=./bkup/incer2/2022-04-23_11-53-19/
#對(duì)整合完成的全備集進(jìn)行一次整體的”準(zhǔn)備”innobackupex –apply-log ./bkup/2022-04-23_11-39-31/
###################進(jìn)行數(shù)據(jù)的恢復(fù)#############################innobackupex –copy-back –datadir=/var/lib/mysql ./bkup/2022-04-23_11-39-31/ #如果是異地恢復(fù),需要scp遷移過去再執(zhí)行。
###############修改目錄權(quán)限并啟動(dòng)mysql###########chown mysql:mysql -R /usr/local/mysql/data && systemctl start mysqld
官方文檔給出的恢復(fù)步驟:
innobackupex –apply-log –redo-only BASE-DIR
innobackupex –apply-log –redo-only BASE-DIR –incremental-dir=INCREMENTAL-DIR-1
innobackupex –apply-log BASE-DIR –incremental-dir=INCREMENTAL-DIR-2
innobackupex –apply-log BASE-DIR
innobackupex –copy-back BASE-DIR