MySQL 使用XtraBackup的shell脚本介绍-阿里云开发者社区

开发者社区> 潇湘隐者> 正文

MySQL 使用XtraBackup的shell脚本介绍

简介:
+关注继续查看

   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    

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Shell脚本】awk中如何使用shell的环境变量
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 一:"'$var'" 这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如: var="test"awk 'BEGIN{print "'$var'"}' 这种写法其实际是双括号变为单括号的常量,传递给了awk.
449 0
使用innobackupex基于从库搭建mysql主从架构
        MySQL的主从搭建大家有很多种方式,传统的mysqldump方式是很多人的选择之一。但对于较大的数据库则该方式并非理想的选择。使用Xtrabackup可以快速轻松的构建或修复mysql主从架构。
1164 0
CSS IE6/7/8, Firefox, Safari, Chrome, Opera Hack使用简要归纳(转)
网上有很多关于IE6/7/8, Firefox, Safari, Chrome, Opera CSS Hack的文章,但我觉得太过繁杂,要不给出一张看也看不懂的CSS Hack归纳表,要不就是给出一大堆代码说明问题,不便于学习与使用。
905 0
详细介绍Mysql各种存储引擎的特性以及如何选择存储引擎
最近业务上有要求,要实现类似oracle 的dblink         linux版本 Server version: 5.6.28-0ubuntu0.14.04.1 (Ubuntu) 修改配置文件 /etc/mysql/my.cnf windows 版本  Server version: 5.6.21-log MySQL Community Server (GPL) 修
1877 0
javascript callback函数的理解与使用
最近做的一个项目中用到了callback函数,于是就研究了下总结下我对javascript callback的理解 首先从callback的字面翻译“回调” 可以理解这是一个函数被调用的机制 当我们遇到一个名词首先可能是百度谷歌搜索看官方是怎么解释的下面是维基百科对回调的定义: a callba...
513 0
+关注
潇湘隐者
网名潇湘隐者/潇湘剑客、英文名Kerry,兴趣广泛,广泛涉猎,个性随意,不善言辞。执意做一名会写代码的DBA,混迹于IT行业
777
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载