共計(jì) 3929 個(gè)字符,預(yù)計(jì)需要花費(fèi) 10 分鐘才能閱讀完成。
這篇文章主要為大家展示了“mysql 如何實(shí)現(xiàn) innobackupex 備份腳本”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“mysql 如何實(shí)現(xiàn) innobackupex 備份腳本”這篇文章吧。
做一個(gè) innobackupex 的腳本,有全備有增量備份,要求一周一個(gè)循環(huán),每周 6 晚上做全備,周日做以周六的全備為基礎(chǔ)的增量備份,周 1 做以周日的增量備份為基礎(chǔ)的增量備份,依次類推。。。注意增量備份可以以增量備份為基礎(chǔ),然后每次做全備的時(shí)候,把上一個(gè)循環(huán)內(nèi),也就是最近一周的備份壓縮到另一個(gè)目錄,并且將這個(gè)目錄的這一周的備份刪除。最后存儲(chǔ)壓縮后的備份的目錄需要保留 1 個(gè)月的備份,
開始之前你要明白幾點(diǎn):
1)xtrabackup 只能備份 innodb 和 xtradb 兩種引擎的表,而不能備份 myisam 引擎的表,但是 innobackupex 是一個(gè)封裝了 xtrabackup 的 Perl 腳本,支持同時(shí)備份 innodb 和 myisam,但在對(duì) myisam 備份時(shí)需要加一個(gè)全局的讀鎖。還有就是 myisam 不支持增量備份,不支持不是說會(huì)報(bào)錯(cuò),你雖然執(zhí)行的是增量備份,但是關(guān)于 myisam 的相關(guān)表是全備份的。
2)使用 innobackupex 備份的時(shí)候,如果沒有指定參數(shù) –no-timestamp,那么會(huì)在你的主備份目錄下生成一個(gè)時(shí)間格式的子目錄,如果指定了參數(shù) –no-timestamp,那么你指定的備份目錄的最后一級(jí),例如:innobackupex –defaults-file=/etc/my.cnf –no-timestamp –user=root –password=123456 –socket=/var/lib/mysql/mysql.sock /backup/mysqldump/back_2017-05-29,注意最后一級(jí),也就是 back_2017-05-29 一定是不存在的,否在報(bào)錯(cuò):innobackupex: Error: Failed to create backup directory /backup/mysqldump/back_2017-05-29: File exists at /usr/bin/innobackupex line 4066
3)注意 xtrabackup 一般需要自己安裝使用,區(qū)別于 oracle 的 rman,首先根據(jù)自己的操作系統(tǒng)情況下載相應(yīng)的安裝包,直接下載封裝好的二進(jìn)制的.tar 文件,然后解壓縮即可下載網(wǎng)址如下:
https://www.percona.com/downloads/XtraBackup/LATEST/
不要下載最新的除非你的操作系統(tǒng)比較新
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
具體的腳本:
#!/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 參數(shù)不正確
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
以上是“mysql 如何實(shí)現(xiàn) innobackupex 備份腳本”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!