xtrabackup備份和恢復數據腳本

該腳本用於備份和恢復MySQL數據庫。

總結xtrabackup備份的兩個坑:

1、在恢復數據的過程中,如果中途出錯,則數據將會被破壞,後續很難再恢復。

2、在恢復過程中,如果版本過低,在準備全量數據的時候會卡在等待那裏,無法進行下一步。

如我用xtrabackup2.4.4 備份的,用2.4.5恢復就會卡在前面那裏。聽說這是個bug。後來改成了2.4.13的時候時間會快很多。

#!/bin/bash
#author: chentufeng
#create time: 2019 05 07
#mail:[email protected]
#version: 1.0
incre_time=`date +%Y%m%d`
current_month=`date +%Y%m`
full_amount_day=`date +%d`
three_month_ago=`date -d "-3 month" +%Y%m`
#mysql配置文件
mysql_cfg="/etc/my.cnf"
#定義備份目錄,就算不創建,備份的時候也會自動創建
mysql_bak="/data/mysql/mysql_bak"
bak_month_dir="${mysql_bak}/${current_month}"
#定義mysql登錄信息
mysql_pwd="123456"
mysql_user="root"
#全量備份目錄
full_amount_dir="${mysql_bak}/${current_month}/full_amount"
#增量備份目錄
incre_dir="${mysql_bak}/${current_month}/incre${incre_time}"
#判斷目錄是否存在,不存在則創建
[ ! -d ${bak_month_dir} ] && mkdir -p ${mysql_bak}/${current_month}
#每月1號進行全量備份
if [ ${full_amount_day} -eq 01 ];then
innobackupex --defaults-file=${mysql_cfg} --user="${mysql_user}" --password=${mysql_pwd} --parallel=8 --slave-info --no-timestamp ${full_amount_dir}
if [ $? -eq 0 ];then
echo "Full amount backup sucessful!"
#刪除三個月前的備份文件
rm -rf ${mysql_bak}/${three_month_ago}
else
echo "Full amount backup failure!!!!!!!!!!!"
fi
#因數據量不算大,每天在月初全備的基礎上做增量備份,若有問題只需要恢復一次
else
innobackupex --defaults-file=${mysql_cfg} --user="${mysql_user}" --password=${mysql_pwd} --no-timestamp --incremental-basedir=${full_amount_dir} --incremental ${incre_dir}
[ $? -eq 0 ] && echo "Incremental backup sucessful!" || echo "Incremental backup failure!!!!!!!!!!!"
fi

:<<wendang
【數據恢復說明】
數據恢復步驟:(注意:步驟只適合該備份腳本的恢復)
1、創建data目錄,根據my.cnf配置來創
2、prepare(準備):
1)全量備份準備
#innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only 全量備份目錄(full_amount_dir) # 指定全備目錄,--redo-only 對已提交的事務進行前滾,僅最後一次全量恢復不需要添加該參數
2)恢復增量備份數據準備(注意:必須指定全量備份的目錄,否則只能恢復全量備份的數據)
#innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only 全量備份目錄 --incremental-dir=最後一次增量備份目錄(incre_dir)
# --incremental-dir 指定最後一次增備目錄 ( 絕對路徑 )

3、再次prepare(準備)全量備份
# innobackupex --defaults-file=/etc/my.cnf --apply-log 全量備份目錄(full_amount_dir)
#注意:不需要加--redo-only參數

4、最後一步,複製整合後的全備文件,位置爲 my.cnf 中 datadir 指定路徑
#innobackupex --defaults-file=/etc/my.cnf --copy-back 全量備份目錄(full_amount_dir)
5、給data目錄賦予mysql權限:
#chown -R mysql.mysql /var/lib/mysql(查看my.cnf確定data目錄路勁)

6、啓動mysql
#/etc/init.d/mysql.server start
wendang

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章