【备份工具】XtraBackup 备份脚本

  • 全量备份,没有使用增量
  • 使用crontab 控制备份日期
  • 初次使用只需要修改对应路径与用户名密码后执行 ./databack_xtrabackup.sh add即可

创建备份用户

mysql> create user 'databak'@'localhost' identified by '1122333';

# 最小权限需要给 reload,lock tables,super这三个,其余的看着给一般不需要了
mysql> grant reload,lock tables,super,replication client,show view,event,process on *.* to 'databak'@localhost;

mysql> plush privileges;

vi databack_xtrabackup.sh

#!/bin/bash
set -e
# 程序路径
xtrabackup_path=/usr/bin/xtrabackup
# 日期
back_day=`date +%Y%m%d%H%M%S`
# 备份文件保留天数,默认保留15天
save_days=15
# 备份存储的路径与名称设置
backup_dir=/app/db/mysql/backup/data
backup_log_dir=/app/db/mysql/backup/log
full_bak_name="xtra_full"
#incre_bak_name="xtra_incre"
full_log_name="log_full"
#incre_log_name="log_incre"
target_dir_full=${backup_dir}/${full_bak_name}
#target_dir_incre=${backup_dir}/${incre_bak_name}
log_dir_full=${backup_log_dir}/${full_log_name}
#log_dir_incre=${backup_log_dir}/${incre_log_name}
# 备份服务器信息
remote_host=192.168.66.101
remote_backup_dir=/data/mysql/backup
# Mysql相关信息
mysql_cnf=/etc/my.cnf
user=databak
pwd='1122333'
mysql_sock=/app/db/mysql/socket/mysql.sock
# 检测运行临时文件名称
running_file=/tmp/is_running.txt
# 告警错误文件
warning_file=/tmp/warning.txt
# 初始化环境检测
backup_environment_check()
{
    if [ ! -d ${backup_dir} ] || [ ! -d ${backup_log_dir} ];then
        mkdir -p ${backup_dir} ${backup_log_dir}
    fi
    if [ ! -x ${xtrabackup_path} ];then
        echo "*****${xtrabackup_path} is not exists! Please check!*****" && exit 1
    fi
}
# 清除历史备份
his_backup_clean()
{
    find $backup_dir -name "xtra_*" -mtime +${save_days} -exec rm -rf {} \; || exit 1
    find $backup_log_dir -type f -name 'log_*' -mtime +${save_days} -exec rm -rf {} \; || exit 1
}
# 执行备份
do_backup()
{
    # 执行成功后删除is_running.txt ,异常则退出
    xtrabackup --defaults-file=${mysql_cnf} --socket=${mysql_sock} --backup --user=${user} --password=${pwd} --target-dir=${target_dir_full}_${back_day} --parallel=4 > ${log_dir_full}.${back_day} 2>&1 && rm -f ${running_file} || exit 1
    # 执行压缩
    tar zcvf ${target_dir_full}_${back_day}.tar.gz ${target_dir_full}_${back_day} > /dev/null
    # 远程传输
    scp -q ${target_dir_full}_${back_day}.tar.gz root@${remote_host}:${remote_backup_dir}
    # 删除压缩文件
    rm -f ${target_dir_full}_${back_day}.tar.gz
}
# 添加定时任务
add_job_crontab()
{
    cat >> /etc/crontab << EOF
# 每天凌晨2点55分执行备份
55 02 */1 * * root /bin/bash /app/scripts/databack_xtrabackup.sh
# 每个月的每周1,3,5执行任务.
#55 3 * * 1,3,5 root /bin/bash /app/scripts/databack_xtrabackup.sh
EOF
}
# 检查是否正在运行
# 若程序正在运行则等待5分钟*3次,超出等待则退出程序不继续执行
is_running_check()
{
    if [ -f ${running_file} ];then
        echo  "*****${running_file}文件存在,进入等待*****"
        for (( i = 1; i <= 3; i++ )); do
            sleep 300s
        done
        echo "`date +%Y%m%d%H%M%S`  由于上一个备份未完成,程序退出忽略执行当天备份,请检查原因!!!" >> ${warning_file} && rm -f ${running_file} && exit 1
    else
        touch ${running_file}
        backup_environment_check
        his_backup_clean
        do_backup
    fi
}
# ./databack_xtrabackup add 添加定时
type=$1
if [[ $1 == "add" ]]; then
  add_job_crontab && echo -e "\033[32m *****add crontab success***** \033[0m"
else
  is_running_check
fi
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容