MySQL 8.0.21 使用xtrabackup增量备份

 

 

复制代码
#!/bin/env bash

# create user xtrabackup@127.0.0.1 identified by 'cruces';
# grant backup_admin,process,reload,lock tables,replication client,replication slave on *.* to xtrabackup@127.0.0.1;
# flush privilges;

# Prepare
# xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base
# xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base --incremental-dir=/data/backup/incremental_1
# xtrabackup --prepare --target-dir=/data/backup/base --incremental-dir=/data/backup/incremental_2
# Restoring
# xtrabackup --copy-back --datadir=/backup/copy-back --target-dir=/data/mysql


base_dir=/backup
log_file=${base_dir}/xtrabackup.log
defaults_file=/etc/my.cnf
host=172.16.10.200
user=root
password=arbitrary0!
port=3306


function reorganize() {
        find $base_dir -maxdepth 1 ! -path $base_dir -mtime +9 -type d -exec rm -rf {} \;
}

function full_backup() {
        backup_dir=${base_dir}/`date +%F`
        if [ ! -d $backup_dir ];then
                mkdir $backup_dir
        fi
        xtrabackup --defaults-file=$defaults_file --backup --host=$host --user=$user --password=$password --port=$port --target-dir=$backup_dir/base &>> $log_file
        reorganize
}

function incremental_backup() {
        day_of_week=`date +%u`
        backup_dir=${base_dir}/`date -d 'last monday' +%F`
        target_dir=${backup_dir}/incremental_$((day_of_week-1))
        if [[ $day_of_week -eq 2 ]];then
                incremental_basedir=${backup_dir}/base
        else
                incremental_basedir=${backup_dir}/incremental_$((day_of_week-2))
                                if [ ! -d $incremental_basedir ];then
                                                incremental_basedir=${base_dir}/`date -d 'last monday' +%F`/base
                                fi
        fi

        if [[ -e $target_dir ]];then
                echo "############################################################################" >> $log_file
                echo `date +"%F %T %u %A %B %j"` $target_dir already exits!!!!!!!!!!>> $log_file
                echo "############################################################################" >> $log_file
                exit 0
        fi

        xtrabackup --defaults-file=$defaults_file --backup --user=$user --host=$host --password=$password --port=$port --target-dir=${target_dir} \
--incremental-basedir=${incremental_basedir} &>> $log_file
}

function alternate() {
                full_dir=${base_dir}/`date -d 'last monday' +%F`/base
                if [ ! -d ${full_dir} ];then
                mkdir -p $full_dir
                echo -e '\n\n\n\n' >> $log_file
                echo "############################################################################" >> $log_file
                echo `date +"%F %T %u %A %B %j"` A New Round backup begin!!!!!!!!!!>> $log_file
                echo "############################################################################" >> $log_file
                echo "############################################################################" >> $log_file
                echo `date +"%F %T %u %A %B %j"` full backup starting >> $log_file
                echo "############################################################################" >> $log_file
                xtrabackup --defaults-file=$defaults_file --backup --user=$user --host=$host --password=$password --port=$port --target-dir=$full_dir &>> $log_file
                reorganize
                exit 0
                fi

}

function main() {
        if [[ `date +%u` -eq 1 ]];then
                echo -e '\n\n\n\n' >> $log_file
                echo "############################################################################" >> $log_file
                echo `date +"%F %T %u %A %B %j"` A New Round backup begin!!!!!!!!!!>> $log_file
                echo "############################################################################" >> $log_file
                echo "############################################################################" >> $log_file
                echo `date +"%F %T %u %A %B %j"` full backup starting >> $log_file
                echo "############################################################################" >> $log_file
                full_backup
        else
                alternate
                echo -e '\n' >> $log_file
                echo "############################################################################" >> $log_file
                echo `date +"%F %T %u %A %B %j"` incremental backup starting >> $log_file
                echo "############################################################################" >> $log_file
                incremental_backup
        fi
}


main
复制代码

 

posted @   ascertain  阅读(469)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示