mysql xtrabackup自动备份以及脚本用例。

1、软件的下载和安装
两个安装包放在了附件里面。
percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm
libev-4.15-1.el6.rf.x86_64.rpm
博客不好放附件,需要软件的[email protected] 私聊我
先安装依赖的libev包,再安装xtrabackup

2、创建冗余目录和创建备份用户:
mkdir  /database/detect/redundency/
chown -R /database/detect/redundency/

mysql>grant reload,lock tables,replication client,create tablespace,process,super on *.* to backupuser@'localhost' identified by 'backup@che123';


3、配置备份脚本(脚本是down公司的,不知道公司哪里搞来的。。。):
#!/bin/bash
BEGINTIME=`date +"%Y-%m-%d %H:%M:%S"`
format_time=`date +"%Y-%m-%d_%H:%M:%S"`
week=`date +%Y-%m-%d`
backupbin=/usr/bin
backdir=/database/detect/backup/
redun=/database/detect/redundency/
file_cnf=/etc/my_detect.cnf
user_name=backupuser
password="backup@che123"
socket="/tmp/mysql_detect.sock"
out_log=$backdir/xtrabackup_log_$format_time
time_cost=$backdir/xtrabackup_time.txt

if [ ! -d "/database/detect/redundency" ];
then 
mkdir -p /database/detect/redundency
fi

if [ -d "$backdir/incr5" ];then
tar -czvf ${redun}\/redundency_${week}.tar.gz $backdir >/dev/null 2>&1

rm -rf $backdir/*
mkdir -p $backdir
chown -R mysql.mysql $backdir
# del backup
DEL_UNTIL_DATE=`date --date='7 day ago' +%Y-%m-%d`

sleep 30
/bin/rm -f /${redun}/*${DEL_UNTIL_DATE}.tar.gz >/dev/null 2>&1

fi 

#full
if [ ! -d "$backdir/full" ];then
echo "#####start full backup at $BEGINTIME to directory full" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf --no-timestamp --user=$user_name --password=$password --socket=$socket  $backdir/full 1> $out_log 2>&1
break;
elif [ ! -d "$backdir/incr0" ];then
echo "#####start 0 incremental backup at $BEGINTIME to directory incr0" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf  --no-timestamp --user=$user_name --password=$password --socket=$socket --incremental --incremental-basedir=$backdir/full $backdir/incr0 1> $out_log 2>&1
break;
elif [ ! -d "$backdir/incr1" ];then
echo "#####start 1 incremental backup at $BEGINTIME to directory incr1" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf  --no-timestamp --user=$user_name --password=$password --socket=$socket  --incremental --incremental-basedir=$backdir/incr0 $backdir/incr1 1> $out_log 2>&1
break;
elif [ ! -d "$backdir/incr2" ];then
echo "#####start 2 incremental backup at $BEGINTIME to directory incr2" >>$time_cost

break;
elif [ ! -d "$backdir/incr3" ];then
echo "#####start 3 incremental backup at $BEGINTIME to directory incr3" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf  --no-timestamp --user=$user_name --password=$password --socket=$socket  --incremental --incremental-basedir=$backdir/incr2 $backdir/incr3 1> $out_log 2>&1
break;
elif [ ! -d "$backdir/incr4" ];then
echo "#####start 4 incremental backup at $BEGINTIME to directory incr4" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf  --no-timestamp --user=$user_name --password=$password --socket=$socket  --incremental --incremental-basedir=$backdir/incr3 $backdir/incr4 1> $out_log 2>&1
break;
elif [ ! -d "$backdir/incr5" ];then
echo "#####start 5 incremental backup at $BEGINTIME to directory incr5" >>$time_cost
$backupbin/innobackupex --defaults-file=$file_cnf  --no-timestamp --user=$user_name --password=$password --socket=$socket  --incremental --incremental-basedir=$backdir/incr4 $backdir/incr5 1> $out_log 2>&1
break;
fi
ENDTIME=`date +"%Y-%m-%d %H:%M:%S"`
begin_data=`date -d "$BEGINTIME" +%s`
end_data=`date -d "$ENDTIME" +%s`
spendtime=`expr $end_data - $begin_data`
echo "it takes $spendtime sec for packing the data directory" >>$time_cost

4、加入自动执行任务计划
4、加入自动执行任务计划
crontab -e
12 3 * * * sh /usr/local/xtrabackup.sh
######################################################
注意事项:
该脚本每天会执行一次,备份策略为第一次备份为全备份,剩下的0-5次都是增量备份,然后会打包放入冗余目录下,打包后仍会保留一周。直到下个打包的将其替代。
主管说,备份应该考虑在主备份还是在从备份,备份的时间节点,有无其他定时任务的冲突。备份的时长,备份时候的服务器压力负载综合考量。
自己备份的两台机器,早上来看都失败了。后来查看生成的日志文件
一台机器失败是因为没有安装xtrabackup软件,
另一台是没有创建backupuser账户,粗心的我呦。
另外备份用户没有必要给最大的权限,所以我在网上找了备份用户的授权,差不多
reload,lock tables,replication client,create tablespace,process,super
这些权限就够了。我觉得备份用户的权限应该做到尽量小。

你可能感兴趣的:(mysql xtrabackup自动备份以及脚本用例。)