备份实现步骤:
到目录:cd /script
创建脚本:vi innobackupex.sh
赋予脚本执行权限:chmod +x ./innobackupex.sh
临时执行脚本:./innobackupex.sh
innobackupex.sh脚本内容:
#!/bin/bash
export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
#定义变量
MysqlUser=dbbackup
MyseqlPwd=dbbackup
hosts=127.0.0.1
sock=/tmp/mysql.sock #你的mysql.sock路径
year=`date +%Y`
month=`date +%m`
day=`date +%d`
hour=`date +%H`
min=`date +%M`
#定义路径
bakdir=/data/backupDB
logdir=$bakdir/log
logs=$logdir/`date +%F_%H-%M-%S`.log
baklogs=$logdir/`date +%F_%H`backup.log
dirname=$year-$month-$day
bakdir_mysql=$bakdir/all/
bakdir_mysql_packaging=$bakdir/packaging/
back_tar=${dirname}-${hour}-${min}
echo "\N----------------------------------------------------------">>$baklogs
echo "$(date "+%Y-%m-%d %H:%M:%S") : 1 mkdir ${bakdir_mysql} and ${bakdir_mysql_packaging} start" >>$baklogs
if [ ! -d "$bakdir_mysql" ]; then
mkdir -p $bakdir_mysql
if [ $? -eq 0 ]; then
echo "$(date "+%Y-%m-%d %H:%M:%S") : mkdir $bakdir_mysql ok" >>$baklogs
fi
else
echo "$(date "+%Y-%m-%d %H:%M:%S") : do without mkdir $bakdir_mysql" >>$baklogs
fi
if [ ! -d "$bakdir_mysql_packaging" ]; then
mkdir -p $bakdir_mysql_packaging
if [ $? -eq 0 ]; then
echo "$(date "+%Y-%m-%d %H:%M:%S") : mkdir $bakdir_mysql_packaging ok~" >>$baklogs
fi
else
echo "$(date "+%Y-%m-%d %H:%M:%S") : do without mkdir $bakdir_mysql_packaging" >>$baklogs
fi
echo "$(date "+%Y-%m-%d %H:%M:%S") : 2 delete ${bakdir_mysql} all bak file start" >>$baklogs
cd ${bakdir_mysql}
pwds=`pwd`
if [ "${bakdir_mysql}"=="${pwds}/" ]; then
#expire="$(date -d "-1 days" +"%Y-%m-%d")*"
rm -rf 202*
echo "$(date "+%Y-%m-%d %H:%M:%S") : delete ${bakdir_mysql} all bak file end~" >>$baklogs
else
echo "$(date "+%Y-%m-%d %H:%M:%S") : wrong path [${bakdir_mysql}], [${pwds}/] " >>$baklogs
fi
echo "$(date "+%Y-%m-%d %H:%M:%S") : 3 innobackupex to ${bakdir_mysql} start ~~~~~~" >>$baklogs
/usr/local/xtrabackup/bin/innobackupex --defaults-file=/etc/my.cnf --compress --compress-threads=4 --stream=xbstream --parallel=5 --host=${hosts} -S ${sock} --user=${MysqlUser} --password=${MyseqlPwd} ${bakdir_mysql}> ${bakdir_mysql}${back_tar}.xbstream 2>$logs
if [ $? -eq 0 ]; then
echo "$(date "+%Y-%m-%d %H:%M:%S") : innobackupex back is ok">>$baklogs
else
echo "$(date "+%Y-%m-%d %H:%M:%S") : innobackupex back is NG">>$baklogs
exit
fi
echo "$(date "+%Y-%m-%d %H:%M:%S") : 4 move ${back_tar}.xbstream start ~~~~~~" >>$baklogs
cd ${bakdir_mysql}
pwds=`pwd`
if [ "${bakdir_mysql}" == "${pwds}/" ]; then
mv ${back_tar}.xbstream ${bakdir_mysql_packaging}
echo "$(date "+%Y-%m-%d %H:%M:%S") : $bakdir_mysql Packaging success" >>$baklogs
else
echo "$(date "+%Y-%m-%d %H:%M:%S") : $bakdir_mysql Packaging not success" >>$baklogs
fi
echo "$(date "+%Y-%m-%d %H:%M:%S") : 5 delete tar five days ago~" >>$baklogs
cd ${bakdir_mysql_packaging}
pwds=`pwd`
if [ "${bakdir_mysql_packaging}" == "${pwds}/" ]; then
expire="$(date -d "-5 days" +"%Y-%m-%d")*"
rm -rf $expire
echo "$(date "+%Y-%m-%d %H:%M:%S") : delete ${bakdir_mysql_packaging} all bak file end~" >>$baklogs
fi
cd ${logdir}/
pwds=`pwd`
echo "$(date "+%Y-%m-%d %H:%M:%S") : delete log start: ${logdir}= ${pwds}">>$baklogs
if [ "${logdir}" == "${pwds}" ]; then
expire="$(date -d "-5 days" +"%Y-%m-%d")*"
rm -rf $expire
echo "$(date "+%Y-%m-%d %H:%M:%S") : delete ${logdir}/ logfile end~" >>$baklogs
fi