MySQL数据备份企业实战。制作shell脚本

功能1:使用xtrabackup以每周为一个备份周期做备份(数据库+二进制日志,备份至本地/data/backup)。提示: 周一某个时间点做一次完全备份,周二、三、四、五、六、日增量,备份存储目录"/data/backup/2018/52/1/备份数据" 目录解释"/data/backup/年/本年度的第几周/本周的第几天/数据" 一年52周一周7天。可以在新的服务器上进行还原测试。

功能2:通过xtrabackup手动备份,全备份将数据备份到/data/backup/base。可根据base目录进行增量备份到inc1,再根据inc1目录进行增量备份到inc2。并在新的服务器上进行还原测试

shell脚本

#!/bin/bash
#
#********************************************************************
#Author: qiangshu
#Tel: 18610586896
#Date: 2019-11-14
#FileName: mysql_backup.sh
#URL: http://xxxxxx
#Description: 使用xtrabackup备份和恢复mysql数据库
#测试环境为CentOS7,yum安装的mariadb-server5.5,MySQL5.7.27二进制安装成功
#Copyright (C): 2019 All rights reserved
#******************************************************************** # xtrabackup 备份后数据的存储目录
base_dir=/data/backup # mysql的数据目录,恢复的时候用
data_dir=/data/mysql sql_user='root'
sql_host='localhost'
sql_pass='123456'
sql_login="--user=$sql_user --host=$sql_host --password=$sql_pass" #安装epel源,然后安装percona-xtrabackup,yum安装的xtrabackup版本为percona-xtrabackup-2.3.6
#不支持mysql5.7的备份,需要再percona官网下载percona-xtrabackup-24-2.4.12版本或以上版本 #判断脚本参数
case $ in
--all|-a)
#--all 手动执行全备份
[ -d $base_dir ] || mkdir -p $base_dir
xtrabackup $sql_login --backup --target-dir=$base_dir/base
;; --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 ; }
inc_num=`ls -d $base_dir/inc* > /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
;; --autobackup|b)
# 可以放在cron计划任务里,每天执行自动备份任务,周一生成全量数据,周二至周日生成增量数据
# 数据目录格式/data/backup/2019/45/1 表示2019年第45周,周一
year=`date +%Y`
week_number=`date +%U`
date_of_week=`date +%u`
full_dir=$base_dir/$year/$week_number
mkdir -p $base_dir/$year/$week_number
if [ $date_of_week -eq 1 ];then
# 周1进行全备份
xtrabackup $sql_login --backup --target-dir=$full_dir/$date_of_week
else
# 周2-7,针对前一天的数据做增量备份
let yesterday=$date_of_week- # 前一天的目录如果不存在,证明没有备份数据
[ -d $base_dir/$year/$week_number/$yesterday ] || { echo Not exist yesterday backup data !!!;exit 1; }
xtrabackup $sql_login --backup --target-dir=$full_dir/$date_of_week --incremental-basedir=$full_dir/$yesterday
fi
;; --autorecovery|-r)
#自动备份恢复方法,使用格式如: ./backup --autorecovery 2019 45 3 恢复到2019年45周第3天的数据
year=$
week_number=$
date_of_week=$
full_dir=$base_dir/$year/$week_number # 如果日期的目录不存在,报错退出
[ -d $full_dir/$date_of_week ] || { echo Wrong input date !!!;exit ; } # 如果日期目录为空,报错退出
[ "`ls $full_dir/$date_of_week`" == "" ] && { echo Dir no data !!!;exit ; } # num表示恢复到的周几
num=$date_of_week
# 如果数量为1,则只有周1的全备份,按全备份恢复
if [ $num -eq 1 ];then
xtrabackup --prepare --target-dir=$full_dir/1
fi # 如果数量>=2,则有周1的全备份,还有多个备份,每个增量分别还原
if [ $num -ge 2 ];then
xtrabackup --prepare --apply-log-only --target-dir=$full_dir/1
for i in `seq 2 $num`;do
if [ $i -eq $num ];then
xtrabackup --prepare --target-dir=$full_dir/1 --incremental-dir=$full_dir/$i
break
fi
xtrabackup --prepare --apply-log-only --target-dir=$full_dir/1 --incremental-dir=$full_dir/$i
done
fi xtrabackup --copy-back --target-dir=$full_dir/1
chown -R mysql:mysql $data_dir
;; --help|-h)
cat << EOF
本脚本通过xtrabackup程序进行mysqld的备份,需要安装percona-xtrabackup-24-2.4.12或更高版本 参数选项:
--all或 -a:全备份,全备份默认路径是/data/backup/base --increment 或 -i:增量备份,必须有全备份的情况下在进行增量备份,第一次的增量备份为/data/backup/inc1,第二次为/data/backup/inc2,以此类推 --manualrecovery 或 -m:恢复全备份和增量备份的数据,需要提前把全量备份置于/data/backup/base目录,增量1/data/backup/inc1,以此类推 --autobackup 或 -b:按照年,第几周,周几的格式备份数据。存储路径如/data/backup/2019/45/{1,2,3},判断如果是周一进行全备份,周二至周日针对前一天的备份进行增量备份。可以把脚本放到crontab任务中每天执行一次。例如:0 30 * * * /bin/bash 脚本名。 --autorecoveryh 或 -r:把--autobackup备份的数据进行还原,还原的时候需要输入年,第几周,周几。例如:script.sh --autorecovery 2019 45 2,意思是恢复到2019年第45周周2的数据 --help 或 -h:查看帮助 EOF
;; *)
echo "use --help" esac

脚本使用方法

1、手动备份还原

备份
1、安装percona-xtrabackup-24-2.4.12
2、拷贝脚本到服务器A上,脚本名为mysql_backup.sh
3、修改脚本中的数据库登录用户参数,要有所有权限
sql_user='root'
sql_host='192.168.1.33'
sql_pass='123456'
4、手动对当前数据库进行全备份
./mysql_backup.sh -a
数据默认存储到/data/backup/base中
5、手动对当前数据库进行第一次增量备份
./mysql_backup.sh -i
数据默认存储到/data/backup/inc1中
6、手动对当前数据库进行第二次增量备份
./mysql_backup.sh -i
数据默认存储到/data/backup/inc2中 还原
1、将A服务器的/data/backup/*所有文件拷贝到B服务器(192.168.1.100)/data/backup目录中
scp -r /data/backup/* 192.168.1.100:/data/backup
2、拷贝脚本到服务器A上,脚本名为mysql_backup.sh
3、修改脚本中的mysql实际路径名
data_dir=/var/lib/mysql
4、清空mysql目录中的数据(请确认是否有用)
rm -rf /var/lib/mysql
5、执行脚本进行恢复
./mysql_backup.sh -m

2、自动备份还原

备份
1、安装percona-xtrabackup-24-2.4.12 2、拷贝脚本到服务器A上,脚本名为mysql_backup.sh
将脚本放于/scrpit/mysql_backup.sh 3、修改脚本中的数据库登录用户参数,要有所有权限
sql_user='root'
sql_host='192.168.1.33'
sql_pass='123456' 4、编辑定时任务,每天凌晨1:00备份
crontab -e
0 1 * * * /bin/bash /scrpit/mysql_backup.sh -b 还原
1、将A服务器的/data/backup/*所有文件拷贝到B服务器(192.168.1.100)/data/backup目录中
scp -r /data/backup/* 192.168.1.100:/data/backup 2、拷贝脚本到服务器A上,脚本名为mysql_backup.sh 3、修改脚本中的mysql实际路径名
data_dir=/var/lib/mysql 4、清空mysql目录中的数据(请确认是否有用)
rm -rf /var/lib/mysql 5、执行脚本进行恢复
./mysql_backup.sh -r 2019 45 3 注意:./mysql_backup.sh -r 2019 45 3 含义是恢复到2019年第45周的周3。需要提前确认本周1,周2的目录中是否有数据

后话:本脚本已测试过CentOS7,yum安装的mariadb-server5.5.64 以及 二进制安装的MySQL 5.7.27。其他版本未测试。依赖于xtrabackup的版本

本次使用的版本是percona-xtrabackup-24-2.4.12。如有问题请联系微信18610586896

MySQL自动备份实战--xtrabackup备份的更多相关文章

  1. MySQL · 物理备份 · Percona XtraBackup 备份原理

    http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据 ...

  2. MySQL 8.0 的xtrabackup备份

    xtrabackup 备份语句: fname=`date +%F_%H-%M-%S` mkdir -p /mnt/dbbak/db_$fname xtrabackup --defaults-file= ...

  3. xtrabackup备份mysql数据库的使用方法

    xtrabackup是由percona提供的mysql备份工具,它是一款物理备份工具,通过连接数据库把数据库的数据备份出来.对于innodb存储引擎其支持全量备份和增量备份.对于myisam存储引擎只 ...

  4. (4.16)mysql备份还原——物理备份之XtraBackup实践

    关键词:XtraBackup实践,物理备份,xtrabackup备份,innobackupex备份 [1]如何使用? [3]系列:innobackupex --help |more [4]系列:xtr ...

  5. xtrabackup备份和恢复数据脚本

    该脚本用于备份和恢复MySQL数据库. 总结xtrabackup备份的两个坑: 1.在恢复数据的过程中,如果中途出错,则数据将会被破坏,后续很难再恢复. 2.在恢复过程中,如果版本过低,在准备全量数据 ...

  6. xtrabackup备份原理及流式备份应用

    目录 xtrabackup备份原理及流式备份应用 0. 参考文献 1. xtrabackup 安装 2. xtrabackup 备份和恢复原理 2.1 备份阶段(backup) 2.2 准备阶段(pr ...

  7. MySQL备份和恢复[4]-xtrabackup备份工具

    xtrabackup工具介绍 Percona 公司 官网:www.percona.com percona-server InnoDB --> XtraDB Xtrabackup备份工具 perc ...

  8. Mysql不锁表备份之Xtrabackup的备份与恢复

    一.Xtrabackup介绍 MySQL冷备.热备.mysqldump都无法实现对数据库进行增量备份.如果数据量较大我们每天进行完整备份不仅耗时且影响性能.而Percona-Xtrabackup就是为 ...

  9. 使用xtrabackup备份mysql数据库

    数据在一个企业里非常重要,因此经常需要备份数据库,确保出线故障时,可以立刻恢复数据到最新状态,目前常见的备份工具有mysqldump和xtrabackup,数据量较少时可以使用mysqldump,但随 ...

随机推荐

  1. python夜记

    关于多行字符串(multi-line strings)的表现: Python列表是基于0索引的.(zero-indexed). 晌午起床来嘞,再来些笔记: Treasures 1: 列表方法rever ...

  2. flutter web 配置环境及运行(windows)

    此下 操作 都是基于 windows  一, 将镜像添加到 用户环境变量中 由于在国内访问Flutter有时可能会受到限制,Flutter官方为中国开发者搭建了临时镜像,大家可以将如下环境变量加入到用 ...

  3. 如何预测股票分析--长短期记忆网络(LSTM)

    在上一篇中,我们回顾了先知的方法,但是在这个案例中表现也不是特别突出,今天介绍的是著名的l s t m算法,在时间序列中解决了传统r n n算法梯度消失问题的的它这一次还会有令人杰出的表现吗? 长短期 ...

  4. 吴裕雄 python 机器学习——支持向量机SVM非线性分类SVC模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model,svm fr ...

  5. Codeforces Round #610 (Div. 2)E(模拟,DFS)

    先找到一条多边形的边,然后循环一圈输出多边形上的点.把每个三角形看作一个结点,以两个三角形之间公用边为边建立一张图,DFS输出叶子结点,则得到先切后切的顺序. #define HAVE_STRUCT_ ...

  6. Linux shell sed 命令详解

    详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761 sed命令常见用途 查找关键词做全局替换 查找某行的关键词做替换 查找关键字所在 ...

  7. selenium 使用close和quit关闭driver的不同点

    Driver.Quit()与Driver.Close()的不同:Driver.Quit(): Quit this dirver, closing every associated windows;Dr ...

  8. django admin后台(数据库简单管理后台)

    只需要简单的几行胆码就可以生成一个完整的管理后台 这个就是django魅力之一 创建超级用户 python manage.py createsuperuser     ----  之后会提示输入用慕名 ...

  9. Cesium 基于MapBox底图加载3DTiles 模型

    3DTiles 模型采用   CATIA V5 R22 --->3dxml --->GLB--->B3DM var extent = Cesium.Rectangle.fromDeg ...

  10. 清空表单 autocomplete="off"

    清空表单 autocomplete="off" <form action="/sm/baziqiming.aspx" method="post& ...