mysql运维—— xtrabackup 全量备份、差异备份

官网下载xtrabackup二进制包

全量+差异备份脚本:

#!/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: 数据库运维