MySQL 使用XtraBackup的shell脚本介绍

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

   mysql_backup.sh是关于MySQL的一个使用XtraBackup做备份的shell脚本,实现了简单的完整备份和增量备份、以及邮件发送 备份信息等功能。功能目前还比较简单,后续将继续完善和增加相关功能。参考了网上MySQL备份的脚本,如有不足的地方,欢迎大家拍砖!

1: 使用前,请先做一些配置选项修改,例如备份路径设置、连接数据库的账号密码等等。

2: 在BACKUP_DIR目录下,创建full、incr、logs、scripts四个目录,将mysql_backup.sh放置在scripts目录下。

#!/bin/bash 
 
###################################################################################
 
  

# This script is used for MySQL daily backup. it is a package of Xtrabackup shell

# script       #

#                                                                                 #
# #################################################################################
#                                                                                 #
# ScriptName    :    mysql_backup.sh                                              #
# Author        :    潇湘隐者                                              #
# CerateDate    :    2016-04-24                                 #
# Blogs        :   www.cnblogs.com/kerrycode                                    #
# @author       :   kerry2008code@qq.com                                          #
#*********************************************************************************#
# Version        Modified Date            Description                             #
#*********************************************************************************#
# V.1.0          2016-04-24          create the script for mysql daily backup     #
###################################################################################
 
 
 
BACKUP_DATE=$(date +%Y-%m-%d_%H_%M_%S)
BACKUP_DIR=/backup/mysql
FULLBACKUP_PATH=$BACKUP_DIR/full
INCRBACKUP_PATH=$BACKUP_DIR/incr
BACKUP_LOG_PATH=$BACKUP_DIR/logs
BACKUP_KEEP_DAY=7
MYSQL_CONF=/usr/my.cnf
INNOBACKUPEX=/usr/bin/innobackupex
MYSQL_CMD=/usr/bin/mysql
MYSQL_CONNECT="--host=127.0.0.1 --user=root --password=123456 --port=3306"
MAIL_FROM="root@`hostname`"
MAIL_TO=konglb@xxx.com
 
  
 
error()
{
 echo "$1" 1>&2
 exit 1
}
 
#before the backup, check the system enviroment setting and mysql status and so on
mysql_backup_check()
{
 
    if [ ! -d $FULLBACKUP_PATH ];then
        mkdir -p $FULLBACKUP_PATH
    fi
    
    if [ ! -d $INCRBACKUP_PATH ];then
        mkdir -p $INCRBACKUP_PATH
    fi
    
    if [ ! -d $BACKUP_LOG_PATH ];then
        mkdir -p $BACKUP_LOG_PATH
    fi
    
    
    if [ ! -x $INNOBACKUPEX ];then
       error "$INNOBACKUPEX did not exists"
    fi
    
    if [ ! -x $MYSQL_CMD ];then
       error "mysql client did not exists!"
    fi
    
     mysql_status=`netstat -nl | awk 'NR>2{if ($4 ~ /.*:3306/) {print "Yes";exit 0}}'
      
        if [ "$mysql_status" != "Yes" ];then  
          error "MySQL did not start. please check it"  
        fi
   
        if ! `echo 'exit' | $MYSQL_CMD -s $MYSQL_CONNECT` ; then  
         error "please check the user and password is correct!"  
        fi  
}
 
 
xtra_backup()
{
  if [ $# = 2 ];then
        $INNOBACKUPEX --defaults-file=$MYSQL_CONF $MYSQL_CONNECT  --no-timestamp  $1/full_$BACKUP_DATE>$2 2>&1
  elif [ $# = 3 ];then
        $INNOBACKUPEX  --defaults-file=$MYSQL_CONF $MYSQL_CONNECT  --no-timestamp --incremental  $1/incr_$BACKUP_DATE  --incremental-basedir $2 >$3 2>&1
  else
      error "the parameter is not correct"
  fi
}
 
 
lastest_fullback_dir()
{
    if [ -d $1 ]; then
        path=`ls -t $1 |head -n 1`
        if [  $path ]; then
            echo $path
        else
            error "lastest_fullback_dir(): 目录为空,没有最新目录"
        fi
    else
        error "lastest_fullback_dir(): 目录不存在或者不是目录"
    fi
}
 
 
mysql_full_backup()
{
    xtra_backup  $FULLBACKUP_PATH $BACKUP_LOG_PATH/full_$BACKUP_DATE.log
    
    if [ "${PIPESTATUS[0]}" -ne 0 ]; then
        (echo "Subject: MySQL Backup Failed: MySQL Backup failed on `hostname`";
      cat ${BACKUP_LOG_PATH}/full_${BACKUP_DATE}.log;
    ) | /usr/sbin/sendmail -O NoRecipientAction=add-to -f${MAIL_FROM} ${MAIL_TO}
    else
      (echo "Subject: MySQL Backup Success: MySQL Backup failed on `hostname`";
      cat ${BACKUP_LOG_PATH}/full_${BACKUP_DATE}.log;
    ) | /usr/sbin/sendmail -O NoRecipientAction=add-to -f${MAIL_FROM} ${MAIL_TO}
    fi
 
    
    cd $FULLBACKUP_PATH 
    
    ls -t | tail -n +$BACKUP_KEEP_DAY | xargs rm -rf
}
 
mysql_incr_backup()
{
 
  LATEST_FULL_BACKUP=`find $FULLBACKUP_PATH -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1` 
  
  LATEST_FULL_BACKUP_TIME=`stat -c %Y $FULLBACKUP_PATH/$LATEST_FULL_BACKUP`
  
  if [ $LATEST_FULL_BACKUP ];then
        #
        xtra_backup $INCRBACKUP_PATH  $FULLBACKUP_PATH/`lastest_fullback_dir $FULLBACKUP_PATH`  $BACKUP_LOG_PATH/incr_$BACKUP_DATE.log 
  else
        # the first incremental backup need do full backup first 
         xtra_backup $FULLBACKUP_PATH  $BACKUP_LOG_PATH/full_$BACKUP_DATE.log 
         
         if [ "${PIPESTATUS[0]}" -ne 0 ]; then
                        (echo "Subject: MySQL Backup Failed: MySQL Backup failed on `hostname`";
                   cat ${BACKUP_LOG_PATH}/incr_${BACKUP_DATE}.log;
                    ) | /usr/sbin/sendmail -O NoRecipientAction=add-to -f${MAIL_FROM} ${MAIL_TO}
            fi
  fi
  
 
}
 
 
 
case $1 in
 
       full)
          mysql_backup_check
          mysql_full_backup
          ;;
 
        incr)
          mysql_backup_check
          mysql_incr_backup
          ;;
 
         *)
          echo "full backup parameter missed!"
          echo "incr backup parameter missed!"
          ;;
esac    
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
23 3
|
5天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
24 0
|
6天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句
|
7天前
|
JSON 运维 监控
训练shell常用脚本练习(三)
【4月更文挑战第14天】shell代码训练(三)
23 1
|
11天前
|
存储 弹性计算 Shell
ecs服务器shell常用脚本练习(十)
【4月更文挑战第11天】shell代码训练(十)
140 0
|
11天前
|
弹性计算 Shell Go
ecs服务器shell常用脚本练习(九)
【4月更文挑战第10天】shell代码训练(八)
133 0
|
15天前
|
弹性计算 Shell Linux
ecs服务器shell常用脚本练习(六)
【4月更文挑战第4天】shell代码训练(六)
108 0
|
20天前
|
弹性计算 Shell 应用服务中间件
ecs服务器shell常用脚本练习(四)
【4月更文挑战第4天】shell代码训练(四)
96 0
|
22天前
|
Shell
【shell】实时查看网卡流量脚本
【shell】实时查看网卡流量脚本
|
22天前
|
Shell Linux
Linux的shell入门教程shell脚本入门教程
Linux的shell入门教程shell脚本入门教程
15 0

热门文章

最新文章