Mysql 全量增量备份教程及脚本(二)

该脚本定义了基于MySQL的备份策略,周三和周六执行全量备份,其他时间执行增量备份。使用xtrabackup工具进行备份,并根据日期动态确定备份类型。备份日志和数据存储在指定目录,且备份过程包括压缩和记录备份大小。
摘要由CSDN通过智能技术生成

mysql周三周六全量备份,其他时间增量备份。

脚本内容如下

#!/bin/bash

# 备份策略(可以根据需求调整备份策略)

# 周三、周六全量备份

# 周一、周二、周四、周五、周日增量备份

# 全量备份目录

Full=/usr/local/databak/fullbak

# 增量备份目录

Incr=/usr/local/databak/incrbak

# MySQL相关配置信息

DB_HOST='localhost'

DB_PORT=13360

DB_USER='backup'

DB_PASS='Yh03D66h#*.'

DB_SOCK=/usr/local/mysql/mysql.sock

DB_CONF=/etc/my.cnf

# 备份的日志文件

baklog=./back.log

# 备份开始

echo -e "\n\n" | tee -a ${baklog} 2>&1

echo -e "备份开始...\n" | tee -a ${baklog} 2>&1

# 判断当前日期是周几

Week=`date +%w`

case ${Week} in

3|6)

# 判断今日为周三、周六则进行全量备份

# 判断主目录是否存在,不存在则创建

if [ ! -d "${Full}" ];then

mkdir ${Full}

fi

# 第一步 创建本次的备份目录

FullBakTime=`date +%Y%m%d-%H%M%S`

mkdir -p ${Full}/${FullBakTime}_${Week}

FullBakDir=${Full}/${FullBakTime}_${Week}

# 第二步 开始全量备份

echo -e "日期: ${FullBakTime}\n" | tee -a ${baklog} 2>&1

echo -e "星期: ${Week}\n" | tee -a ${baklog} 2>&1

echo -e "本次全量备份目录为 ${FullBakDir}\n" | tee -a ${baklog} 2>&1

xtrabackup --defaults-file=${DB_CONF} --host=${DB_HOST} --user=${DB_USER} --password=${DB_PASS} --socket=${DB_SOCK} --backup --compress --compress-threads=4 --slave-info --target-dir=${FullBakDir} --no-timestamp

dirStorage=`du -sh ${FullBakDir}`

echo -e "本次备份数据 ${dirStorage}\n" | tee -a ${baklog} 2>&1

echo -e "备份完成...\n\n\n" | tee -a ${baklog} 2>&1

exit 0

;;

0|1|2|4|5)

# 判断今日为周日、周一、周二、周四、周五时,进行增量备份。由于周日和周四时基于前一天的全量备份进行增量备份的,而周一、周二、周五是基于前一天的增量备份进行增量备份的,所以再进行一次判断。

case ${Week} in

0|4)

# 基于上一次全量备份的增量备份

# 判断主目录是否存在,不存在则创建

if [ ! -d "${Incr}" ];then

mkdir ${Incr}

fi

# 第一步 获取上一次全量备份

LatestFullDir=`ls -lth ${Full}|grep -v total|head -1|awk -F '[ ]+' '{print $NF}'`

CompliteLatestFullDir=${Full}/${LatestFullDir}

# 第二步 创建备份目录

IncrBakTime=`date +%Y%m%d-%H%M%S`

mkdir -p ${Incr}/${IncrBakTime}_${Week}

IncrBakDir=${Incr}/${IncrBakTime}_${Week}

# 第三步 开始增量备份

echo -e "日期: ${IncrBakTime}\n" | tee -a ${baklog} 2>&1

echo -e "星期: ${Week}\n" | tee -a ${baklog} 2>&1

echo -e "本次备份为基于上一次全量备份${CompliteLatestFullDir}的增量备份\n" | tee -a ${baklog} 2>&1

echo -e "本次增量备份目录为: ${IncrBakDir}\n" | tee -a ${baklog} 2>&1

xtrabackup --defaults-file=${DB_CONF} --host=${DB_HOST} --user=${DB_USER} --password=${DB_PASS} --socket=${DB_SOCK} --backup --compress --compress-threads=4 --slave-info --parallel=4 --target-dir=${IncrBakDir} --incremental-basedir=${CompliteLatestFullDir} --no-timestamp

dirStorage=`du -sh ${IncrBakDir}`

echo -e "本次备份数据 ${dirStorage}\n" | tee -a ${baklog} 2>&1

echo -e "备份完成...\n\n\n" | tee -a ${baklog} 2>&1

exit 0

;;

1|2|5)

# 基于上一次增量备份的增量备份

# 判断主目录是否存在,不存在则创建

if [ ! -d "${Incr}" ];then

mkdir ${Incr}

fi

# 第一步 获取上一次增量备份

LatestIncrDir=`ls -lth ${Incr}|grep -v total|head -1|awk -F '[ ]+' '{print $NF}'`

CompliteLatestIncrDir=${Incr}/${LatestIncrDir}

# 第二步 创建备份目录

IncrBakTime=`date +%Y%m%d-%H%M%S`

mkdir -p ${Incr}/${IncrBakTime}_${Week}

IncrBakDir=${Incr}/${IncrBakTime}_${Week}

# 第三步 开始增量备份

echo -e "日期: ${IncrBakTime}\n" | tee -a ${baklog} 2>&1

echo -e "星期: ${Week}\n" | tee -a ${baklog} 2>&1

echo -e "本次备份为基于上一次增量备份${CompliteLatestIncrDir}的增量备份\n" | tee -a ${baklog} 2>&1

echo -e "本次增量备份目录为: ${IncrBakDir}\n" | tee -a ${baklog} 2>&1

xtrabackup --defaults-file=${DB_CONF} --host=${DB_HOST} --user=${DB_USER} --password=${DB_PASS} --socket=${DB_SOCK} --backup --compress --compress-threads=4 --slave-info --parallel=4 --target-dir=${IncrBakDir} --incremental-basedir=${CompliteLatestIncrDir} --no-timestamp

dirStorage=`du -sh ${IncrBakDir}`

echo -e "本次备份数据 ${dirStorage}\n" | tee -a ${baklog} 2>&1

echo -e "备份完成...\n\n\n" | tee -a ${baklog} 2>&1

exit 0

;;

*)

echo -e "Error\n"

exit 1

;;

esac

;;

*)

echo -e "Error\n"

exit 1

;;

esac

以上内容根据自己实际情况进行修改。

其修改地方只有 MySQL相关配置信息 与 路径

第三篇有每周全量备份脚本,感谢关注。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于MySQL数据库增量备份,可以使用以下脚本: ```bash #!/bin/bash # 定义变量 MYSQL_USER="root" # MySQL用户名 MYSQL_PASS="password" # MySQL密码 MYSQL_DB="database_name" # 要备份的数据库名称 BACKUP_DIR="/var/backups/mysql" # 备份文件存放目录 CURRENT_DATE=$(date +"%Y-%m-%d") # 当前日期 LAST_BACKUP=$(ls -1 $BACKUP_DIR | tail -1) # 获取最近一次备份的文件名 INCREMENTAL_BACKUP="$BACKUP_DIR/$CURRENT_DATE-$MYSQL_DB-incremental.sql" FULL_BACKUP="$BACKUP_DIR/$LAST_BACKUP" # 创建备份目录 if [ ! -d $BACKUP_DIR ]; then mkdir -p $BACKUP_DIR fi # 检查最近一次备份是否存在 if [ -z $LAST_BACKUP ]; then # 如果没有最近备份,则进行全量备份 mysqldump -u $MYSQL_USER -p$MYSQL_PASS $MYSQL_DB > $FULL_BACKUP else # 如果有最近备份,则进行增量备份 innobackupex --user=$MYSQL_USER --password=$MYSQL_PASS --incremental $INCREMENTAL_BACKUP --incremental-basedir=$FULL_BACKUP fi ``` 脚本的思路是先检查最近一次备份的文件名,如果不存在则进行全量备份,否则进行增量备份全量备份使用`mysqldump`命令,增量备份使用`innobackupex`命令。备份文件以日期和数据库名称为文件名,保存在指定的备份目录中。 需要注意的是,增量备份需要在全量备份的基础上进行,因此需要先进行一次全量备份,才能进行增量备份。同时,增量备份的文件名中包含了基于哪个全量备份进行的增量备份,因此需要保留全量备份的文件名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值