shell脚本实战之mysql-物理备份实现周内备份策略

一.shell脚本要求

复制代码
# 数据库备份脚本方式: 物理备份

# 工具:xtrabackup过程

# 需求1:不允许有任何的安在脚本中,

# 需求2:在脚本中,不允许有任何的交互式代码容,使用日志记录

# 需求3:在脚本中,不允许有任何输出

# 需求4:每周为一个循环周期,1全备、2增量、3增量、4差异、5增量、6增量、7差异,

# 自动检测执行报错,邮件告敬

#下载工具yum -y install percona-xtrabackup-24.x86_64

二.环境

1.备份的主机上需要自己手动安装xtrabackup工具

安装xtrabackup

复制代码
#下载xtrabackup的yum源
wget http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

  rpm -ivh percona-release-0.1-4.noarch.rpm

#打开xtrabackup的yum源 
vim percona-release.repo
复制代码
#2.下载xtrabackup 工具
yum -y install percona-xtrabackup-24.x86_64

三.脚本实施

复制代码
vim mysqlbaup.sh

#/bin/bash
#时间同步
ntpdate ntp.aliyun.com >>/dev/null

user=root

password="Qianfeng@123"

timestamp=$(date +"%Y-%m-%d_%H-%M-%S")  

#从放备份日志 /xtrabackup/xtrabackup-timestamp.log

#备份目录
mkdir -p  /xtrabackup/z{1..7} &>>/dev/null

#周一完全 #

z1() {

    # touch /xtrabackup/xtrabackup.log >>/dev/null

    innobackupex --user=$user --password=$password /xtrabackup/z1 &>> /xtrabackup/xtrabackup-$timestamp.log

    z1=`ls -t /xtrabackup/z1/ | awk  'NR==1 {print $1}'` &>>/dev/null

}

#周二 增量

z2() {

    innobackupex --user=$user --password=$password --incremental /xtrabackup/z2 --incremental-basedir=/xtrabackup/z1/$z1 &>> /xtrabackup/xtrabackup--$timestamp.log

    z2=`ls -t /xtrabackup/z2/ | awk  'NR==1 {print $1}'` &>>/dev/null

}

#周三 增量

z3() {

    innobackupex --user=$user --password=$password --incremental /xtrabackup/z3 --incremental-basedir=/xtrabackup/z2/$z2 &>> /xtrabackup/xtrabackup-$timestamp.log

    z3=`ls -t /xtrabackup/z3/ | awk  'NR==1 {print $1}'` &>>/dev/null

}

#周四 差异

z4() {

    innobackupex --user=$user --password=$password --incremental /xtrabackup/z4 --incremental-basedir=/xtrabackup/z1/$z1 &>> /xtrabackup/xtrabackup-$timestamp.log

    z4=`ls -t /xtrabackup/z4/ | awk  'NR==1 {print $1}'` &>>/dev/null

}

#周五 增量

z5() {

    innobackupex --user=$user --password=$password --incremental /xtrabackup/z5 --incremental-basedir=/xtrabackup/z4/$z4 &>> /xtrabackup/xtrabackup-$timestamp.log

    z5=`ls -t /xtrabackup/z5/ | awk  'NR==1 {print $1}'` &>>/dev/null

}

#周六 增量

z6() {

    innobackupex --user=$user --password=$password --incremental /xtrabackup/z6 --incremental-basedir=/xtrabackup/z5/$z5 &>> /xtrabackup/xtrabackup-$timestamp.log

    z6=`ls -t /xtrabackup/z6/ | awk  'NR==1 {print $1}'` &>>/dev/null

}

#周天 差异

z7() {

    innobackupex --user=$user --password=$password --incremental /xtrabackup/z7 --incremental-basedir=/xtrabackup/z1/$z1 &>> /xtrabackup/xtrabackup-$timestamp.log

}

#星期判断 #星期一...

function show_date() {  

    date +"%A"  >>/dev/null

}  

show_date

time=`date +"%A"`  

if [ $time == "星期一" ];then

    z1

elif [ $time == "星期二" ];then

    z2

elif [ $time == "星期三" ];then

    z3

elif [ $time == "星期四" ];then

    z4

elif [ $time == "星期五" ];then

    z5

elif [ $time == "星期六" ];then

    z6

else z7

fi



#报警发邮箱

warn() {  

    grep "successful" /xtrabackup/xtrabackup-$timestamp.log > /dev/null  

    #当日志文件里没有successful时,也就是说它失败了
    if [ $? -ne 0 ]; then  

        cat "/xtrabackup/xtrabackup-$timestamp.log" | mailx -s "报警出错。及时排错" 22001399@qq.com

    fi  

}  

warn

注意:脚本里的星期取值是基于,终端里的取得中文状态,也就是说,你在终端里的返回值是中文的。

四.结果输出

#与君共勉,共同进步

相关推荐
网易独家音乐人Mike Zhou26 分钟前
【Linux应用】开发板USB共享网络,网线或USB以太网共享网络(局域网连接PC和开发板,实现PC给开发板共享网络,USB通过NDIS驱动共享)
linux·网络·单片机·mcu·物联网·嵌入式·iot
Otaku love travel1 小时前
实施运维文档
运维·windows·python
basketball6161 小时前
Linux C 管道文件操作
linux·运维·c语言
浩浩测试一下2 小时前
Windows 与 Linux 内核安全及 Metasploit/LinEnum 在渗透测试中的综合应用
linux·运维·windows·web安全·网络安全·系统安全·安全架构
stark张宇2 小时前
Linux 文件创建、删除、移动、复制基础知识整理
linux·服务器·centos
将心ONE2 小时前
使用 lstrip() 和 rstrip() 方法
运维·服务器
IT小辉同学3 小时前
PostgreSQL 与 MySQL 获取字段注释并转换为驼峰命名教程
数据库·mysql·postgresql
叁沐3 小时前
MySQL 12 为什么我的MySQL会“抖”一下?
mysql
G_whang3 小时前
centos7 安装jenkins
运维·jenkins
Jiangnan_Cai3 小时前
Linux 系统 docker 部署 Dify
linux·docker·大模型·dify