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