mysql innobackupex備份指令碼
做一個innobackupex的指令碼,有全備有增量備份,要求一週一個迴圈,每週6晚上做全備,週日做以週六的全備為基礎的增量備份,周1做以週日的增量備份為基礎的增量備份,依次類推。。。注意增量備份可以以增量備份為基礎,然後每次做全備的時候,把上一個迴圈內,也就是最近一週的備份壓縮到另一個目錄,並且將這個目錄的這一週的備份刪除。最後儲存壓縮後的備份的目錄需要保留1個月的備份,
開始之前你要明白幾點:
1)xtrabackup只能備份innodb和xtradb兩種引擎的表,而不能備份myisam引擎的表,但是innobackupex是一個封裝了xtrabackup的Perl指令碼,支援同時備份innodb和myisam,但在對myisam備份時需要加一個全域性的讀鎖。還有就是myisam不支援增量備份,不支援不是說會報錯,你雖然執行的是增量備份,但是關於myisam的相關表是全備份的。
2)使用innobackupex備份的時候,如果沒有指定引數--no-timestamp,那麼會在你的主備份目錄下生成一個時間格式的子目錄,如果指定了引數--no-timestamp,那麼你指定的備份目錄的最後一級,例如:innobackupex --defaults-file=/etc/my.cnf --no-timestamp --user=root --password=123456 --socket=/var/lib/mysql/mysql.sock /backup/mysqldump/back_2017-05-29 ,注意最後一級,也就是back_2017-05-29一定是不存在的,否在報錯:innobackupex: Error: Failed to create backup directory /backup/mysqldump/back_2017-05-29: File exists at /usr/bin/innobackupex line 4066
3)注意xtrabackup一般需要自己安裝使用,區別於oracle的rman,首先根據自己的作業系統情況下載相應的安裝包,直接下載封裝好的二進位制的.tar檔案,然後解壓縮即可下載網址如下:
不要下載最新的除非你的作業系統比較新
tar zxvf percona-xtrabackup-2.2.11-Linux-x86_64.tar.gz
yum deplist perl-DBD-MySQL
yum -y install perl-Digest*
yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses-devel zlib-devel
yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses-devel zlib-devel
具體的指令碼:
#!/bin/bash
function date2days {
echo "$*" | awk '{
z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
print j
}'
}
db_user="root"
db_passwd="123456"
db_defaults_file="/etc/my.cnf"
db_socket="/var/lib/mysql/mysql.sock"
db_backup="/backup/mysqldump/"
db_backup_fulldir="/backup/mysqldump/full/"
db_backup_incrementaldir="/backup/mysqldump/incremental/"
db_backup_gzfull="/backup/mysqldump/gzip/"
db_backup_tarfull="/backup/mysqldump/tar.gzdb/"
rm_num=7
move_and_tar (){
if [ $# != 1 ]; then
echo "引數不正確"
exit 0
fi
time_rm=`date -d "$1 days ago" +"back_%d-%m-%Y"`
if [ $1 -eq 7 ]; then
if [ -d ${db_backup_fulldir}${time_rm} ]; then
tar -czPvf ${db_backup_tarfull}${time_rm}_full.tar.gz ${db_backup_fulldir}${time_rm}
rm -rf ${db_backup_fulldir}${time_rm}
echo "壓縮目錄rm $db_backup_fulldir${time_rm}" >>/backup/mysqldump/config/tar.log
fi
fi
if [ $1 -gt 0 -a $a -lt 7 ]; then
if [ -d $db_backup_incrementaldir${time_rm} ]; then
su - root -c "tar -czPvf ${db_backup_tarfull}${time_rm}_increment.tar.gz ${db_backup_incrementaldir}${time_rm}"
su - root -c "rm -rf ${db_backup_incrementaldir}${time_rm}"
echo "壓縮目錄rm $db_backup_incrementaldir${time_rm}" >>/backup/mysqldump/config/tar.log
fi
fi
}
time="$(date +"back_%d-%m-%Y")"
source /backup/mysqldump/config/config
_Day=$(date2days `echo ${backup_full:5:10}|awk 'BEGIN{FS="-"}{print $3,$2,$1}'`)
Day=$(date2days `date +"%Y %m %d"`)
echo $_Day
echo $Day
let result=$Day-$_Day
echo "相差$result天"
if [ -z ${backup_full} ] || [ $result -ge 7 ] ; then
echo '全備份'
backup_full=${time}
innobackupex --defaults-file=$db_defaults_file --no-timestamp --user=${db_user} --password=${db_passwd} --socket=$db_socket ${db_backup_fulldir}${backup_full}/
if [ $? -eq 0 ]; then
echo "${time} 備份成功!!!" >> /backup/mysqldump/config/results.log
else
echo "${time} 備份失敗???" >> /backup/mysqldump/config/results.log
fi
echo "backup_full=${backup_full}" >/backup/mysqldump/config/config
echo "backup_pre_name=full/${backup_full}" >>/backup/mysqldump/config/config
while [ ${rm_num} -lt 8 -a ${rm_num} -gt 0 ]
do
move_and_tar ${rm_num}
rm_num=`expr ${rm_num} - 1`
done
echo '全備份'
else
echo '增量備份'
innobackupex --defaults-file=$db_defaults_file --socket=$db_socket --no-timestamp --user=${db_user} --password=${db_passwd} --incremental ${db_backup_incrementaldir}${time}/ --incremental-basedir=${db_backup}${backup_pre_name}
if [ $? -eq 0 ]; then
echo "${time} 增量備份成功!!!" >> /backup/mysqldump/config/results.log
else
echo "${time} 增量備份失敗???" >> /backup/mysqldump/config/results.log
fi
echo "backup_full=${backup_full}" >/backup/mysqldump/config/config
echo "backup_pre_name=incremental/${time}" >>/backup/mysqldump/config/config
echo '增量備份'
fi
接下來繼續更新恢復的過程。。。。。。
function date2days {
echo "$*" | awk '{
z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
print j
}'
}
db_user="root"
db_passwd="123456"
db_defaults_file="/etc/my.cnf"
db_socket="/var/lib/mysql/mysql.sock"
db_backup="/backup/mysqldump/"
db_backup_fulldir="/backup/mysqldump/full/"
db_backup_incrementaldir="/backup/mysqldump/incremental/"
db_backup_gzfull="/backup/mysqldump/gzip/"
db_backup_tarfull="/backup/mysqldump/tar.gzdb/"
rm_num=7
move_and_tar (){
if [ $# != 1 ]; then
echo "引數不正確"
exit 0
fi
time_rm=`date -d "$1 days ago" +"back_%d-%m-%Y"`
if [ $1 -eq 7 ]; then
if [ -d ${db_backup_fulldir}${time_rm} ]; then
tar -czPvf ${db_backup_tarfull}${time_rm}_full.tar.gz ${db_backup_fulldir}${time_rm}
rm -rf ${db_backup_fulldir}${time_rm}
echo "壓縮目錄rm $db_backup_fulldir${time_rm}" >>/backup/mysqldump/config/tar.log
fi
fi
if [ $1 -gt 0 -a $a -lt 7 ]; then
if [ -d $db_backup_incrementaldir${time_rm} ]; then
su - root -c "tar -czPvf ${db_backup_tarfull}${time_rm}_increment.tar.gz ${db_backup_incrementaldir}${time_rm}"
su - root -c "rm -rf ${db_backup_incrementaldir}${time_rm}"
echo "壓縮目錄rm $db_backup_incrementaldir${time_rm}" >>/backup/mysqldump/config/tar.log
fi
fi
}
time="$(date +"back_%d-%m-%Y")"
source /backup/mysqldump/config/config
_Day=$(date2days `echo ${backup_full:5:10}|awk 'BEGIN{FS="-"}{print $3,$2,$1}'`)
Day=$(date2days `date +"%Y %m %d"`)
echo $_Day
echo $Day
let result=$Day-$_Day
echo "相差$result天"
if [ -z ${backup_full} ] || [ $result -ge 7 ] ; then
echo '全備份'
backup_full=${time}
innobackupex --defaults-file=$db_defaults_file --no-timestamp --user=${db_user} --password=${db_passwd} --socket=$db_socket ${db_backup_fulldir}${backup_full}/
if [ $? -eq 0 ]; then
echo "${time} 備份成功!!!" >> /backup/mysqldump/config/results.log
else
echo "${time} 備份失敗???" >> /backup/mysqldump/config/results.log
fi
echo "backup_full=${backup_full}" >/backup/mysqldump/config/config
echo "backup_pre_name=full/${backup_full}" >>/backup/mysqldump/config/config
while [ ${rm_num} -lt 8 -a ${rm_num} -gt 0 ]
do
move_and_tar ${rm_num}
rm_num=`expr ${rm_num} - 1`
done
echo '全備份'
else
echo '增量備份'
innobackupex --defaults-file=$db_defaults_file --socket=$db_socket --no-timestamp --user=${db_user} --password=${db_passwd} --incremental ${db_backup_incrementaldir}${time}/ --incremental-basedir=${db_backup}${backup_pre_name}
if [ $? -eq 0 ]; then
echo "${time} 增量備份成功!!!" >> /backup/mysqldump/config/results.log
else
echo "${time} 增量備份失敗???" >> /backup/mysqldump/config/results.log
fi
echo "backup_full=${backup_full}" >/backup/mysqldump/config/config
echo "backup_pre_name=incremental/${time}" >>/backup/mysqldump/config/config
echo '增量備份'
fi
接下來繼續更新恢復的過程。。。。。。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2139999/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL增量備份的指令碼(innobackupex)MySql指令碼
- innobackupex備份指令碼指令碼
- mysql innobackupex 物理備份MySql
- mysql備份指令碼MySql指令碼
- innobackupex 備份MySQL資料庫MySql資料庫
- mysql innobackupex增量備份恢復MySql
- 【MySql】innobackupex 增量備份的bugMySql
- 使用innobackupex備份mysql資料庫MySql資料庫
- 【MySql】innobackupex增量備份和恢復MySql
- MySQL innobackupex全量備份恢復MySql
- 【MySql】innobackupex 增量備份和恢復MySql
- mysql之 Innobackupex(全備+增量)備份恢復MySql
- 【Mysql】innobackupex備份還原單個庫MySql
- 兩套mysql備份指令碼MySql指令碼
- mysql按表備份指令碼MySql指令碼
- Mysql異地備份指令碼MySql指令碼
- MySQL自動備份指令碼MySql指令碼
- MySQL備份之分庫分表備份指令碼MySql指令碼
- innobackupex遠端備份
- mysql innobackupex xtrabackup 大資料量 備份 還原MySql大資料
- mysql每天定時備份指令碼MySql指令碼
- mysql定時備份shell指令碼MySql指令碼
- mysql的一個備份指令碼MySql指令碼
- Mysql備份系列(3)--innobackupex備份mysql大資料(全量+增量)操作記錄MySql大資料
- Mysql定時備份資料指令碼MySql指令碼
- MySQL中binlog備份指令碼分享MySql指令碼
- MySQL:Windows下分庫備份指令碼MySqlWindows指令碼
- 【MySQL】Xtrabackup備份及恢復指令碼MySql指令碼
- 《mysql資料庫備份小指令碼》MySql資料庫指令碼
- innobackupex全備份流程圖流程圖
- 備份指令碼指令碼
- MySQL備份指令碼,應該這麼寫MySql指令碼
- MySQL資料庫備份的shell指令碼MySql資料庫指令碼
- MySQL 5.5 Slave節點備份指令碼(mysqldump)MySql指令碼
- 《mysql資料庫備份小指令碼》(轉)MySql資料庫指令碼
- mysqldump來備份MYSQL資料庫(指令碼)MySql資料庫指令碼
- innobackupex備份恢復實戰
- 使用innobackupex線上增量備份和再增量備份及恢復mysql資料庫MySql資料庫