xtrabackup8.0.4备份工具的使用

一、xtrabackup8.0.4安装

1.1 、下载需要的安装包。

https://www.percona.com/downloads/XtraBackup/LATEST/

image.png

1.2 、安装所需要epel源。

RHEL/CentOS 6:

# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

RHEL/CentOS 7:

# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

1.3、安装依赖包。

# yum install -y  libev

1.4、安装。

# yum install -y percona-xtrabackup-80-8.0.4-1.el7.x86_64.rpm

二、xtrabackup8.0.4的全量备份与恢复。

2.1、连接(可不进行)。

 # /usr/bin/xtrabackup --user=suke --password=123 --backup --target -dir=/data/mysql/

其他参数:

--port The port to use when connecting to the database server with TCP/IP. --socket The socket to use when connecting to the local database. --host The host to use when connecting to the database server with TCP/IP. 例如:--host=10.250.0.66 --user=root --password=xxxyyy --port=3306

2.2、授权用户。

 mysql> CREATE USER 'suke'@'localhost' IDENTIFIED BY '123';
 mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'suke'@'localhost'; 
 mysql> FLUSH PRIVILEGES;

2.3、创建全备。

# /usr/bin/xtrabackup --defaults-file=/etc/my.cnf --user=suke --password=123  --socket=/tmp/mysql.sock --backup --target-dir=/data/mysql/backup/full

ps: 或者:使用参数--datadir替换掉参数--defaults-file.
例如:

# /usr/bin/xtrabackup  --user=suke --password=123  --socket=/tmp/mysql.sock --datadir=/usr/local/mysql/data --backup --target-dir=/data/mysql/backup/full

2.4、全备恢复。

2.4.1 、关闭数据库。
# /usr/local/mysql/bin/mysqldadmin -uroot -p123  shutdown 
2.4.2、 清除数据库数据目录datadir

备份或者直接删除。

# cd /usr/local/mysql/data   

# cp -r  *  /opt 
# cd /usr/local/mysql/data   

# rm -rf *
2.4. 3 、准备恢复。
# /usr/bin/xtrabackup --defaults-file=/etc/my.cnf  --user=suke --password=123 --prepare --target-dir=/home/mysql/backup/full 
2.4. 4、 开始恢复。
2.4.4.1、保留备份文件。

--copy-back。

# /usr/bin/xtrabackup --defaults-file=/etc/my.cnf  --user=suke --password=123 --copy-back  --target-dir=/home/mysql/backup/full 
2.4.4.2、不保留备份文件。

--move-back。

# /usr/bin/xtrabackup --defaults-file=/etc/my.cnf  --user=suke --password=123 --move-back  --target-dir=/home/mysql/backup/full 
2.4.4.3 、如果不想使用xtrabackup命令,那么可以使用rsync或者cp。
# rsync -avrP /home/mysql/backup/full  /usr/local/mysql/data 

# cp  -r  /home/mysql/backup/full  /usr/local/mysql/data 

** ps:务必检查文件属主,属组。**

2.4.5、备份目录解析。
image.png

其中淡蓝色字体 mysql/, performance_schema/, sys/ 下存放的是数据库文件。
backup-my.cnf,备份命令用到的配置选项信息;


image.png

xtrabackup_binlog_info,mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位 置;


image.png

xtrabackup_checkpoints,备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序 列号)范围信息;


image.png

xtrabackup_info,记录备份的基本信息,uuid、备份命令、备份时间、binlog、LSN、以及其他加密压缩等信息。


image.png

xtrabackup_logfile,备份的重做日志文件。

三、xtrabackup8.0.4的增量备份与恢复。

3.1、 在全备的基础上创建增量备份。

从全备文件的xtrabackup_checkpoints中,有一行to_lsn ,备份结束时的last_lsn,如下图从lsn=19107798开始变化, 基于全备我们进行增量备份。

# /usr/bin/xtrabackup  --user=suke --password=123 --socket=/tmp/mysql.sock --backup -target-dir=/home/mysql/backup/inc1 --incremental-basedir=/home/mysql/backup/full 
image.png
# /usr/bin/xtrabackup  --user=suke --password=123 --socket=/tmp/mysql.sock --backup -target-dir=/home/mysql/backup/inc2 --incremental-basedir=/home/mysql/backup/inc1 

..........

..........

3.2 、增量备份恢复。

3.2.1、 先prepare全备。
# /usr/bin/xtrabackup --prepare --apply-log-only --target-dir=/home/mysql/backup/full
3.2.2、 然后prepare增量备份。

原理大概是先把每个增量备份都 恢复到完全备份当中,然后对整个全备进行恢复。

# /usr/bin/xtrabackup --prepare --apply-log-only --target-dir=/home/mysql/backup/full  --incremental-basedir=/home/mysql/backup/inc1 
# /usr/bin/xtrabackup --prepare --apply-log-only --target-dir=/home/mysql/backup/full  --incremental-basedir=/home/mysql/backup/inc2
3.2.3、 然后再prepare全备。
# /usr/bin/xtrabackup --prepare --target-dir=/home/mysql/backup/full 
3.2.4、进行全备恢复。
# /usr/bin/xtrabackup --defaults-file=/etc/my.cnf --user=suke --password=123 --copy-back  --target-dir=/home/mysql/backup/full

四、xtrabackup备份脚本。

4.1全备脚本。

#!/bin/bash
#date:2019/01/07
#auther:suketongxue
XTRABACKUPEX=xtrabackup
XTRABACKUPEXFULL=/usr/bin/$XTRABACKUPEX
TODAY=`date +%Y%m%d%H%M`
YESTERDAY=`date -d"yesterday" +%Y%m%d%H%M`
USEROPTIONS="--user=root --password=123456"
TMPFILE="/home/iap/xtrabackup_$TODAY.$$.tmp"
SOCKET='/data/mysql/mysql3306.sock'
MYCNF=/etc/my.cnf
MYSQL=/usr/local/mysql/bin/mysql
MYSQLADMIN=/usr/local/mysql/bin/mysqladmin
BACKUPDIR=/data/mysqlbackup/backup # 备份的主目录
FULLBACKUPDIR=$BACKUPDIR/full # 全库备份的目录
FULLZIP=$BACKUPDIR/fullzip # 全库包备份的目录

# Grab start time

#############################################################################

# error message and exit!

#############################################################################
error()
{
    echo "$1" 1>&2
    exit 1
}

# Check options before proceeding

if [ ! -x $XTRABACKUPEXFULL ]; then
  error "$XTRABACKUPEXFULL does not exist."
fi

if [ ! -d $BACKUPDIR ]; then
  error "Backup destination folder: $BACKUPDIR does not exist."
fi

if [ -z "`$MYSQLADMIN $USEROPTIONS status | grep 'Uptime'`" ] ; then
 error "HALTED: MySQL does not appear to be running."
fi
if ! `echo 'exit' | $MYSQL -s $USEROPTIONS` ; then
 error "HALTED: Supplied mysql username or password appears to be incorrect (not copied here for security, see script)."
fi

# Some info output

echo "----------------------------"
echo
echo "$0: MySQL backup script"
echo "started: `date`"
echo "----------------------------"

# Create full backup directories if they are not exist.

for i in $FULLBACKUPDIR $FULLZIP
do
        if [ ! -d $i ]; then
                mkdir -pv $i
        fi
done

# Compress and upload the previous day's backup!

echo "compress the backup and scp to remote machine!"
$XTRABACKUPEXFULL --defaults-file=$MYCNF $USEROPTIONS --socket=$SOCKET --backup --target-dir=$FULLBACKUPDIR 2>&1
cd $FULLZIP
tar -zcvf $YESTERDAY.tar.gz $FULLBACKUPDIR/*
scp -P22  $YESTERDAY.tar.gz iap@10.120.0.92:/data/mysqlbackup/backup
if [ $? = 0 ]; then
  cd $FULLBACKUPDIR
  rm -rf *
  echo "Running new full backup."
else
  echo "Error with scp."
fi

if [ -z "`tail -1 $TMPFILE | grep 'completed OK!'`" ] ; then
 echo "$XTRABACKUPEX failed:"; echo
 echo "---------- ERROR OUTPUT from $XTRABACKUPEX ----------"

# cat $TMPFILE

# rm -f $TMPFILE

 cd
 #exit 1
fi

# get the backup directory! 

THISBACKUP=`awk -- "/Backup created in directory/ { split( \\\$0, p, \"'\" ) ; print p[2] }" $TMPFILE`
echo "THISBACKUP=$THISBACKUP"
#rm -f $TMPFILE
echo "Databases backed up successfully to: $THISBACKUP"

# Cleanup

echo "delete tar files of 7 days ago"
find $FULLZIP/ -mtime +7 -name "*.tar.gz"  -exec rm -rf {} \;

echo
echo "completed: `date`"
#exit 0

4.2、增量备份脚本。

#!/bin/bash
#  date:2019/01/07
#  auther:suketongxue
XTRABACKUPEX=xtrabackup
XTRABACKUPEXFULL=/usr/bin/$XTRABACKUPEX
TODAY=`date  +%Y%m%d%H%M` BEGINTIME=`date  +"%Y-%m-%d  %H:%M:%S"`
YESTERDAY=`date  -d"yesterday"  +%Y%m%d%H%M` USEROPTIONS="--user=root  --password=123456" TMPFILE="/home/mysql/xtrabackup_$TODAY.$$.tmp" SOCKET='/tmp/mysql.sock'
MYCNF=/etc/my.cnf MYSQL=/usr/local/mysql/bin/mysql MYSQLADMIN=/usr/local/mysql/bin/mysqladmin
BACKUPDIR=/home/mysql/backup  #  备份的主目录
INCRBACKUPDIR=$BACKUPDIR/incr  #  增量备份的目录 
FULLBACKUPDIR=$BACKUPDIR/full  #  全库备份的目录 
#INCRZIP=$BACKUPDIR/incrzip #  增量包备份的目录
#  Grab  start  time #############################################################################
# error  message  and  exit!  #
#############################################################################
error()
{
echo "$1" 1>&2 exit  1
}

#  Check  options  before  proceeding if  [  !  -x  $XTRABACKUPEXFULL  ];  then
error  "$XTRABACKUPEXFULL  does  not  exist." fi

if  [  !  -d  $BACKUPDIR  ];  then
error  "Backup  destination  folder:  $BACKUPDIR  does  not  exist." fi

if  [  -z  "`$MYSQLADMIN  $USEROPTIONS  status  |  grep  'Uptime'`"  ]  ;  then error  "HALTED:  MySQL  does  not  appear  to  be  running."
fi

if  !  `echo  'exit'  |  $MYSQL  -s  $USEROPTIONS`  ;  then
error  "HALTED:  Supplied  mysql  username  or  password  appears  to  be  incorrect  (not  copied  here for  security,  see  script)."
#  Some  info  output
echo "----------------------------"
echo
echo  "$0:  MySQL  backup  script" echo  "started:  `date`"
echo "----------------------------"

#  Create  full  backup  directories  if  they  are  not  exist. for  i  in  $INCRBACKUPDIR
do
if  [  !  -d  $i  ];  then
mkdir  -pv  $i
fi

done #fullbacuup
if  [  !  -d  "$FULLBACKUPDIR"  ];then
echo  " start  full  backup  at  $BEGINTIME  to  directory  full  "  >>$TMPFILE mkdir  $FULLBACKUPDIR
$XTRABACKUPEXFULL  --defaults-file=$MYCNF $USEROPTIONS  --socket=$SOCKET  --backup  --target- dir=$FULLBACKUPDIR  2>&1
break;
elif  [  !  -d  "$INCRBACKUPDIR/incr1"  ];then
echo  " start  1  incremental  backup  at  $BEGINTIME  to  directory  incr1 "  >>$TMPFILE mkdir  $INCRBACKUPDIR/inc1
$XTRABACKUPEXFULL  --defaults-file=$MYCNF $USEROPTIONS  --socket=$SOCKET  --backup  --target- dir=$INCRBACKUPDIR/inc1  --incremental-basedir=$FULLBACKUPDIR 2>&1
break;
elif  [  !  -d  "$INCRBACKUPDIR/incr2"  ];then
echo  " start  2  incremental  backup  at  $BEGINTIME  to  directory  incr2 "  >>$TMPFILE mkdir  $INCRBACKUPDIR/inc2
$XTRABACKUPEXFULL  --defaults-file=$MYCNF $USEROPTIONS  --socket=$SOCKET  --backup  --target- dir=$INCRBACKUPDIR/inc2  --incremental-basedir=$INCRBACKUPDIR/inc1  2>&1
break;
elif  [  !  -d  "$INCRBACKUPDIR/incr3"  ];then
echo  " start  3  incremental  backup  at  $BEGINTIME  to  directory  incr3 "  >>$TMPFILE mkdir  $INCRBACKUPDIR/inc3
$XTRABACKUPEXFULL  --defaults-file=$MYCNF $USEROPTIONS  --socket=$SOCKET  --backup  --target- dir=$INCRBACKUPDIR/inc3  --incremental-basedir=$INCRBACKUPDIR/inc2  2>&1
break;
elif  [  !  -d  "$INCRBACKUPDIR/incr4"  ];then
echo  " start  4  incremental  backup  at  $BEGINTIME  to  directory  incr4 "  >>$TMPFILE mkdir  $INCRBACKUPDIR/inc4
$XTRABACKUPEXFULL  --defaults-file=$MYCNF $USEROPTIONS  --socket=$SOCKET  --backup  --target- dir=$INCRBACKUPDIR/inc4  --incremental-basedir=$INCRBACKUPDIR/inc3  2>&1
break;
elif  [  !  -d  "$INCRBACKUPDIR/incr5"  ];then
echo  " start  5  incremental  backup  at  $BEGINTIME  to  directory  incr5 "  >>$TMPFILE mkdir  $INCRBACKUPDIR/inc5
$XTRABACKUPEXFULL  --defaults-file=$MYCNF $USEROPTIONS  --socket=$SOCKET  --backup  --target- dir=$INCRBACKUPDIR/inc5  --incremental-basedir=$INCRBACKUPDIR/inc4  2>&1
break;
elif  [  !  -d  "$INCRBACKUPDIR/incr6"  ];then
echo  " start  6  incremental  backup  at  $BEGINTIME  to  directory  incr6 "  >>$TMPFILE mkdir  $INCRBACKUPDIR/inc6
$XTRABACKUPEXFULL  --defaults-file=$MYCNF $USEROPTIONS  --socket=$SOCKET  --backup  --target- dir=$INCRBACKUPDIR/inc6  --incremental-basedir=$INCRBACKUPDIR/inc5  2>&1
break;
elif  [  !  -d  "$INCRBACKUPDIR/incr7"  ];then
echo  " start  7  incremental  backup  at  $BEGINTIME  to  directory  incr7 "  >>$TMPFILE mkdir  $INCRBACKUPDIR/inc7
$XTRABACKUPEXFULL  --defaults-file=$MYCNF $USEROPTIONS  --socket=$SOCKET  --backup  --target- dir=$INCRBACKUPDIR/inc7  --incremental-basedir=$INCRBACKUPDIR/inc6  2>&1
break; fi

if  [  -z  "`tail  -1  $TMPFILE  |  grep  'completed  OK!'`"  ]  ;  then
echo  "$XTRABACKUPEX  failed:";  echo
echo  "----------  ERROR  OUTPUT  from  $XTRABACKUPEX  ----------"
cat  $TMPFILE #rm  -f  $TMPFILE cd
fi
#  get  the  backup  directory!
THISBACKUP=`awk  --  "/Backup  created  in  directory/  {  split(  \\\$0,  p,  \"'\"  )  ;  print  p[2]  }"
$TMPFILE`
echo  "THISBACKUP=$THISBACKUP"
#rm  -f  $TMPFILE
echo  "Databases  backed  up  successfully  to:  $THISBACKUP" #  Cleanup
echo  "delete  tar  files  of  7  days  ago"
find  $INCRBACKUPDIR/  -mtime  +7  -type  d -exec  rm  -rf  {}  \; echo
echo  "completed:  `date`"

未完!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容