一、innobackup备份说明
1、安装innobackupex
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum install percona-xtrabackup-24
yum install qpress ##innobackupex支持压缩导出,这里安装压缩工具
innobackupex -version
2、备份
2.1、全量备份
innobackupex --defaults-file=/data/3307/my.cnf --user=root --password=My1qaz234! --socket=/data/3307/mysqldata/mysql.sock /data/mysqlback/innobackup_dir/
2.2、第一次增量备份
innobackupex --defaults-file=/data/3307/my.cnf --user=root --password=My1qaz234! --socket=/data/3307/mysqldata/mysql.sock --incremental /data/mysqlback/increment_data/ --incremental-basedir=/data/mysqlback/innobackup_dir/2023-09-13_16-50-33 #指定上次完整备份目录
#其中,–incremental指明是增量备份,–incremental-basedir指定上次完整备份或者增量备份文件的位置。这里的增量备份其实只针对的是InnoDB,对于MyISAM来说,还是完整备份。
2.3、再次增量备份
innobackupex --defaults-file=/data/3307/my.cnf --user=root --password=My1qaz234! --socket=/data/3307/mysqldata/mysql.sock --incremental /data/mysqlback/increment_data --incremental-basedir=/data/mysqlback/increment_data/2023-09-13_17-50-14 #指定上次增量备份目录
3、恢复
3.1、预备完整备份
innobackupex --defaults-file=/data/3307/my.cnf --apply-log --redo-only /data/mysqlback/innobackup_dir/2023-09-13_16-50-33
3.2、合并第一次备份内容
innobackupex --defaults-file=/data/3307/my.cnf --apply-log --redo-only /data/mysqlback/innobackup_dir/2023-09-13_16-50-33 --incremental-dir=/data/mysqlback/increment_data/2023-09-13_17-50-14
3.3、合并第二次备份内容
innobackupex --defaults-file=/data/3307/my.cnf --apply-log --redo-only /data/mysqlback/innobackup_dir/2023-09-13_16-50-33 --incremental-dir=/data/mysqlback/increment_data/2023-09-13_17-54-34
3.4、恢复完整
innobackupex --defaults-file=/data/3307/my.cnf --copy-back /data/mysqlback/innobackup_dir/2023-09-13_16-50-33/
二、innobackupex定时备份实践
1、全量备份脚本
#!/bin/bash
dateformat=$(date +"%Y-%m-%d")
direc=/data/backup
fulldir=$direc/full
logdir=/var/log/backuplog
fulllog=$logdir/fulllog
applylog=$logdir/applylog
User=backup
PassWord=xxxxx
DefaultMy=/data/3307/my.cnf
Socket=/data/3307/mysqldata/mysql.sock
for i in $fulldir $fulllog $applylog
do
if [ ! -d $i ]; then
mkdir -pv $i
fi
done
if [ ! -d $fulldir/$dateformat ]; then
#echo "$fulldir/$dateformat"+$fulldir/$dateformat
#echo "$fulllog/fullbackup.log.$dateformat"+$fulllog/fullbackup.log.$dateformat
innobackupex --defaults-file=$DefaultMy --socket=$Socket --user=$User --password=$PassWord $fulldir/$dateformat >> $fulllog/fullbackup.log.$dateformat 2>&1 &
#innobackupex --user=PassWord --apply-log --use-memory=1024MB dateformat >> dateformat 2>&1 &
else
echo "Don't backup database, because of directroy not found!" >> $logdir/errorfull.log.$dateformat 2>&1 &
exit 1
fi
2、增量备份脚本
#!/bin/bash
# define some variables
#数据库相关配置
User=backup
PassWord=xxxxxx
DefaultMy=/data/3307/my.cnf
Socket=/data/3307/mysqldata/mysql.sock
dateEarly=$(date -d "yesterday" +%Y-%m-%d)
dateIncre=$(date +"%Y-%m-%d")
direc=/data/backup
basedir=$direc/full
logdir=/var/log/backuplog
incrementlog=$logdir/incrementlog
if [ ! -d $basedir/$dateEarly ]; then
echo "Don't backup database, because of early directroy not found!" >> $incrementlog/errorincrement.log.$dateIncre 2>&1 &
exit 1
else
if [ ! -d $basedir/$dateIncre ]; then
mkdir -p $basedir/$dateIncre
incrementdirname=$(ls -lt $basedir/$dateEarly | sed -n 2p |awk '{print $9}')
innobackupex --defaults-file=$DefaultMy --user=$User --password=$PassWord --socket=$Socket --incremental $basedir/$dateIncre --incremental-basedir=$basedir/$dateEarly/$incrementdirname >> $incrementlog/increment.log.$dateIncre 2>&1 &
fi
fi
3、备份文件定时删除脚本(防止撑爆磁盘)
#!/bin/bash
directory="/data/backup/full" # 替换为目标目录的路径
# 仅保留最近一周的备份数据
find "$directory" -mtime +7 -exec rm -rf {} \; >> /var/log/deldir.log 2>&1
4、定时任务
每周日凌晨一点完成一次全量备份,周一-周六凌晨一点完成一次增量备份,每天凌晨六点删除备份目录中旧的备份数据
0 1 * * 7 sh /data/script/innobackup_full.sh
0 1 * * 1-6 sh /data/script/innobackup_incremental.sh
0 6 * * * sh /data/script/delete_old_files.sh