percona-xtrabackup 数据库备份和恢复

一、系统环境及软件版本

 

CentOS release 6.9 (Final)

mysql 5.6.2

xtrabackup 2.4.7

crontab

二、xtrabackup部署

1)下载xtrabackup源码包

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/tarball/percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz

2)解压并创建软连接:

tar zxvf percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz

mv percona-xtrabackup-2.4.7-Linux-x86_64 /usr/local/xtrabackup

ln -s /usr/local/xtrabackup/bin/* /usr/bin/

 

3)查看版本:

# xtrabackup --version

 xtrabackup version 2.4.7 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 6f7a799)

 

 

 

 

5)创建并编写脚本

cd data

vim mysql_backup.sh 编写xtrabackup脚本集

 

#!/bin/bash
#
#********************************************************************
#FileName:             mysql_backup.sh
#Description:          使用xtrabackup备份和恢复mysql数据库
#测试环境为CentOS7,yum安装的mariadb-server5.5,MySQL5.7.27二进制安装成功                    
#********************************************************************

# xtrabackup 备份后数据的存储目录
base_dir=/data/backup

# mysql的数据目录,恢复的时候用
data_dir=/data/mysql_data

sql_user='root'
sql_host='10.4.3.11'
sql_pass='v9SimLKsIHpwz'
sql_login="--user=$sql_user --host=$sql_host --password=$sql_pass"

Date_Time=`date +%Y%m%d%H%M%S`
Date_Day=`date +%Y%m%d%H%M`

Log_File_Dir="/data/backup/logs/"
Log_File="/data/backup/logs/full_bak_"${Date_Day}""


#判断脚本参数
case $1 in
--all|-a)
#--all 手动执行全备份
    [ -d $base_dir ] || mkdir -p $base_dir
    xtrabackup $sql_login --backup --target-dir=$base_dir/base &>>"${Log_File}".log
    ;;

--increment|-i)
#--incrementd 手动执行增量备份    
    end_dir=`ls $base_dir | tail -1`

    #如果数据目录中只有base,那么就针对base目录进行增量备份
    if [ "$end_dir" == "base" ];then
        xtrabackup $sql_login --backup --target-dir=$base_dir/inc1 --incremental-basedir=$base_dir/base
    #如果数据目录中已经含有inc的目录,那么根据inc数字最大的目录进行增量备份
    elif  [[ "$end_dir" =~ "inc" ]];then
        num=`echo $end_dir | grep -o [0-9]*`
        let num_add=num+1
        xtrabackup $sql_login --backup --target-dir=$base_dir/inc$num_add --incremental-basedir=$base_dir/inc$num
    fi
    ;;

--manualrecovery|-m)
#手动恢复数据,判断数据库的目录是否是空,不为空退出
    [ "`ls $data_dir`" == "" ] || { echo MySQL data dir is not null !!!;exit 2; }
    inc_num=`ls -d $base_dir/inc* 2> /dev/null | wc -l`
    #如果没有增量数据直接还原
    if [ "$inc_num" -eq 0 ];then
        xtrabackup --prepare --target-dir=$base_dir/base
    #有增量数据的时候,根据增量数据的文件夹个数,循环恢复
    elif [ "$inc_num" -ge 1 ];then
        xtrabackup --prepare --apply-log-only --target-dir=$base_dir/base
        for i in `seq 1 $inc_num`;do
            if [ $i -eq $inc_num ];then
                xtrabackup --prepare  --target-dir=$base_dir/base --incremental-dir=$base_dir/inc$i
                break
            fi
            xtrabackup --prepare --apply-log-only --target-dir=$base_dir/base --incremental-dir=$base_dir/inc$i
        done
    fi
    xtrabackup --copy-back --target-dir=$base_dir/base
    # 修改数据目录所有文件的用户名为mysql
    chown -R mysql:mysql $data_dir
    ;;

 

chmod 777 mysql_backup.sh 赋予读写运行的权限

 

6)备份和恢复

全备份

/data/mysql_backup.sh --all

增量备份

/data/mysql_backup.sh --increment

恢复数据

/data/mysql_backup.sh --manualrecovery

 

7)安装和配置crontab定时任务

service crond status 判断是否已安装crontab

 

安装流程

yum -y install vixie-cron

yum -y install crontabs

 

配置任务

crontab -e

* 0 * * * /data/mysql_backup.sh --increment #每天零点开启增量备份

 

/sbin/service crond reload #重新载入配置

/sbin/service crond restart #重启服务

 

注意事项:先全量备份,再开启增量备份

 

 

三 详细流程参考地址集合

 

主流程地址 https://www.cnblogs.com/kevingrace/p/5919021.html

https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/output/file.html

centos crontab用法详解 https://blog.csdn.net/zyddj123/article/details/83109716

你可能感兴趣的:(linux,运维,centos)