MySQL 使用XtraBackup的shell脚本介绍

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:

   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    
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
潇湘隐者
+关注
目录
打赏
0
0
0
0
35
分享
相关文章
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
实现MySQL数据库的定时自动备份脚本。
拿走,不谢,这个脚本配方(指引)保证你的数据库数据像蛋糕店一样地天天更新,还能确保老旧的蛋糕(数据)不会堆积满仓库。这下可好,数据安全有保障,数据库管理员也能轻松一点,偶尔闲下来的时候,煮杯咖啡,看个剧岂不美哉?别忘了偶尔检查一下你的自动备份是否正常工作,以防万一蛋糕机器出了点小差错。
101 20
|
2月前
|
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
62 17
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
147 3
|
2月前
|
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
61 4
|
3月前
|
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
164 25
在MySQL Shell里 重启MySQL 8.4实例
在MySQL Shell里 重启MySQL 8.4实例
79 2
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
126 1
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问