xtrabackup实现mysql数据库全备脚本

#!/bin/bash
#myql全量备份脚本
# 用法:bash ./full_bak.sh

#set -x
set -u

mysql_conf_file=/etc/my.cnf
backup_dir=/mysql_back  #备份路径
ulimit -n 65535

#host="192.168.60.x"  # 主机ip
#port="3306"   #mysql端口
user="root"    #mysql用户
passwd='1xxxxxx'   #root密码

#每天在备份目录对应数据库下面生成一个文件夹
run_full_bak(){
    # database=$1   #需要备份的数据库
    today_dir=${backup_dir}/$(date +%Y%m%d)  #得到今天需要全备份的数据库目录   格式为today_dir=/mysql_back/20231214
    if [ ! -d $today_dir ];
    then
        mkdir -p $today_dir  #不存在则新建
    else
        echo "$today_dir exists, it will be cleaned before full-backup"
        rm -rf ${today_dir}/*  #存在则删除
        echo "$today_dir clean success"
    fi
    /app/xtrabackup/bin/innobackupex  --defaults-file="$mysql_conf_file" -S /var/lib/mysql/mysql.sock \
        --user=$user --password=$passwd \
        "$today_dir"  #使用percona-xtrabackup将$database mysql performance_schema进行备份 放到today_dir目录下

    if [ $? -eq 0 ]; then
        data_size_kb=$(du -sk /data | awk '{print $1}')
        today_dir_kb=$(du -sk ${today_dir} | awk '{print $1}')
        echo " /data file size: ${data_size_kb} KB" >> /tmp/yunbanji-backup-$(date +%Y%m%d).log
        echo "today_dir ${today_dir} file size ${today_dir_kb} KB"  >> /tmp/yunbanji-backup-$(date +%Y%m%d).log
        #echo "$(date '+%c') Backup successful!" >> "/tmp/yunbanji-backup-$(date +%Y%m%d).log"
    else
        echo "$(date '+%c') Backup failed, check logs!" >> "/tmp/yunbanji-backup-$(date +%Y%m%d).log"
        # 可以添加额外的错误处理逻辑
    fi
    # echo ">_< successfully full-backup to $today_dir" >> /tmp/yunbanji-backup-$(date +%Y%m%d).log  #输出全备成功提示
}


today_dir=${backup_dir}/$(date +%Y%m%d)   # 设置为全局变量
# 执行函数
run_full_bak
echo "$(date '+%c') yunbanji-$(date +%Y%m%d) backup successful!" >> /tmp/yunbanji-backup-$(date +%Y%m%d).log  #输出备份成功提示
#done

# 如果存在目录则压缩
if [ -d ${today_dir} ]; then
    zip -r ${backup_dir}/zip_mysql/yunbanji-$(date +%Y%m%d).zip ${today_dir}  # 格式为 zip -r /mysql_back/zip_mysql/yunbanji-20231214.zip    /mysql_back/20231214
   # tar zcvf ${backup_dir}/yunbanji-$(date +%Y%m%d).tar.gz ${today_dir}  # 将today_dir目录压缩到backup_dir目录下   tar文件以时间命名
    echo "$(date '+%c') yunbanji-$(date +%Y%m%d) backup successful! start arichive  " >> /tmp/yunbanji-backup-$(date +%Y%m%d).log
else
    echo "$(date '+%c') yunbanji-$(date +%Y%m%d) is none, please check !!! " >> /tmp/yunbanji-backup-$(date +%Y%m%d).log
fi

zip_file="${backup_dir}/zip_mysql/yunbanji-$(date +%Y%m%d).zip"
# 如果存在压缩文件则传输,传输完后则删除
if [ -f ${zip_file} ]; then
    rsync -az ${zip_file} root@192.168.60.xx0:/mysql/mysqlzip/  #通过rsync传输。传输到另外一台服务器中。需要提前做免密
    zip_size_kb=$(du -sk ${zip_file} | awk '{print $1}')
    echo "$(date '+%c') yunbanji-$(date +%Y%m%d) send successful ! Zip file size: ${zip_size_kb} KB" >> /tmp/yunbanji-backup-$(date +%Y%m%d).log
    #echo "$(date '+%c') yunbanji-$(date +%Y%m%d) send successful !" >> /tmp/yunbanji-backup-$(date +%Y%m%d).log
    rm -rf ${today_dir} ${zip_file}  # 执行完成后  删除这个tar包  也删除/xtrabackup备份的文件
    echo "$(date '+%c') local db_backup_file clean success!" >> /tmp/yunbanji-backup-$(date +%Y%m%d).log  #输出成功
else
    echo "$(date '+%c') yunbanji-$(date +%Y%m%d) send fail, please check !!!" >> /tmp/yunbanji-backup-$(date +%Y%m%d).log
fi

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里是一个自动化全备和增量备份MySQL8的脚本,基于您之前的要求进行修改: ``` #!/bin/bash # 设置备份相关的变量 MYSQL_USER="your_username" MYSQL_PASSWORD="your_password" BACKUP_DIR="/path/to/backup/directory" DATE=$(date +%F_%H-%M-%S) FULL_BACKUP_INTERVAL=7 # 满备份间隔(天) LAST_FULL_BACKUP=$(find $BACKUP_DIR -maxdepth 1 -name "full_backup*" | sort -nr | head -n 1) # 上一次的全量备份 INCREMENTAL_BACKUP_DIR="$BACKUP_DIR/incremental_backup_$DATE" LATEST_INCREMENTAL_BACKUP=$(find $BACKUP_DIR -maxdepth 1 -name "incremental_backup_*" | sort -nr | head -n 1) # 最新的增量备份 # 创建增量备份目录 mkdir -p $INCREMENTAL_BACKUP_DIR # 运行增量备份命令 if [ -z "$LAST_FULL_BACKUP" ]; then # 如果没有全量备份,则进行全量备份 xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --target-dir=$INCREMENTAL_BACKUP_DIR else # 如果已有全量备份,则进行增量备份 xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --target-dir=$INCREMENTAL_BACKUP_DIR --incremental-basedir=$LATEST_INCREMENTAL_BACKUP fi # 判断是否需要进行全量备份 if [ -z "$LAST_FULL_BACKUP" ] || [ $(expr $(date +%s) - $(date -d $(basename $LAST_FULL_BACKUP | cut -d '_' -f 3) +%s)) -ge $(expr $FULL_BACKUP_INTERVAL \* 86400) ]; then # 如果没有全量备份或者距离上次全量备份已经超过满备份间隔,则进行全量备份 FULL_BACKUP_DIR="$BACKUP_DIR/full_backup_$DATE" mkdir -p $FULL_BACKUP_DIR xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --target-dir=$FULL_BACKUP_DIR fi # 删除过期的备份 find $BACKUP_DIR -maxdepth 1 -name "full_backup*" -mtime +$FULL_BACKUP_INTERVAL -exec rm -rf {} \; find $BACKUP_DIR -maxdepth 1 -name "incremental_backup_*" -mtime +$FULL_BACKUP_INTERVAL -exec rm -rf {} \; ``` 该脚本与之前的脚本基本相同,但增加了一个判断来确定是运行全备份还是增量备份: ``` if [ -z "$LAST_FULL_BACKUP" ]; then # 如果没有全量备份,则进行全量备份 xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --target-dir=$INCREMENTAL_BACKUP_DIR else # 如果已有全量备份,则进行增量备份 xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --target-dir=$INCREMENTAL_BACKUP_DIR --incremental-basedir=$LATEST_INCREMENTAL_BACKUP fi ``` 请将`your_username`和`your_password`替换为您的MySQL用户名和密码,将`/path/to/backup/directory`替换为您希望存储备份的目录。运行脚本时,将其保存为`.sh`文件并添加执行权限,然后在命令行中运行即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值