全量+差异备份脚本:
#!/bin/bash
workdir="$(
cd $(dirname $0)
pwd
)"
logfile="$workdir/run.log"
PATH=/opt/percona_xtrabackup/bin:$PATH
export PATH
if [[ ! -d "/data/backup/mysql/3306" ]]; then
exit 1
fi
dateyet=$(date +%Y%m%d --date '2 days ago')
if [[ -d "/data/backup/mysql/3306/$dateyet" ]]; then
/bin/rm -rf "/data/backup/mysql/3306/$dateyet"
fi
cdate="$(date +%Y%m%d)"
fullbackuptargetdir="/data/backup/mysql/3306/$cdate/full_$(date +%w)"
mkdir -p "$fullbackuptargetdir"
#全量备份
if [[ ! -f $fullbackuptargetdir/xtrabackup_info ]]; then
echo "$(date +'%D %T') 执行全量备份" >>$logfile
xdate=$(date +%s)
innobackupex --datadir=/usr/local/mysql/data -u root -p'Jhl@2023' -H localhost -P 3306 -S /var/lib/mysql/mysql.sock --no-timestamp "$fullbackuptargetdir" &>/dev/null
ydate=$(date +%s)
if [[ -f "$fullbackuptargetdir/xtrabackup_info" ]]; then
echo "$(date +'%D %T') 完成全量备份,耗时$(echo | awk '{zth=ydate-xdate;printf"%d时%d分%d秒\n",zth/3600,zth%3600/60,zth%60}' xdate=$xdate ydate=$ydate)" >>$logfile
fi
#差异备份
elif [[ -f "$fullbackuptargetdir/xtrabackup_info" ]]; then
echo "$(date +'%D %T') 执行差异备份" >>$logfile
xdate=$(date +%s)
incrbackuptargetdir="/data/backup/mysql/3306/$cdate/incr_$(date +%H-%M-%S_%w)"
innobackupex --datadir=/usr/local/mysql/data -u root -p'Jhl@2023' -H localhost -P 3306 -S /var/lib/mysql/mysql.sock --no-timestamp --incremental-basedir="$fullbackuptargetdir" --incremental "$incrbackuptargetdir" &>/dev/null
ydate=$(date +%s)
if [[ -f "$incrbackuptargetdir/xtrabackup_info" ]]; then
echo "$(date +'%D %T') 完成差异备份,耗时$(echo | awk '{zth=ydate-xdate;printf"%d时%d分%d秒\n",zth/3600,zth%3600/60,zth%60}' xdate=$xdate ydate=$ydate)" >>$logfile
fi
fi
全量数据恢复:
1.停止数据库
2.备份数据库目录(可选): mv 数据库目录 数据库目录.old
3.新建数据库目录(Tips:空目录)
4.对全备目录做prepare(根据目录下的xtrabackup_logfile做redo和undo操作,完成后备份处于一致性状态)
innobackupex --apply-log 全备目录
5.恢复(回拷)备份数据到数据库目录
innobackupex --datadir=数据库目录 --copy-back --rsync 全备目录
chown -R mysql:mysql 数据库目录
全量+差异数据恢复
1、2、3步骤同上
4.对全备目录做prepare:
innobackupex --apply-log --redo-only 全备目录
5.对差异目录做prepare
innobackupex --apply-log 全备目录 --incremental-dir=增备目录
6.将差异备份和全量备份做一次合并
innobackupex --apply-log 全备目录
7.恢复(回拷)备份数据到数据库目录
innobackupex --datadir=数据库目录 --copy-back --rsync 全备目录
chown -R mysql:mysql 数据库目录
Categories:
数据库运维