【備份工具】XtraBackup 備份腳本

  • 全量備份,沒有使用增量
  • 使用crontab 控制備份日期
  • 初次使用只需要修改對應(yīng)路徑與用戶名密碼后執(zhí)行 ./databack_xtrabackup.sh add即可

創(chuàng)建備份用戶

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

# 最小權(quán)限需要給 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`
# 備份文件保留天數(shù),默認(rèn)保留15天
save_days=15
# 備份存儲的路徑與名稱設(shè)置
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}
# 備份服務(wù)器信息
remote_host=192.168.66.101
remote_backup_dir=/data/mysql/backup
# Mysql相關(guān)信息
mysql_cnf=/etc/my.cnf
user=databak
pwd='1122333'
mysql_sock=/app/db/mysql/socket/mysql.sock
# 檢測運(yùn)行臨時文件名稱
running_file=/tmp/is_running.txt
# 告警錯誤文件
warning_file=/tmp/warning.txt
# 初始化環(huán)境檢測
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
}
# 執(zhí)行備份
do_backup()
{
    # 執(zhí)行成功后刪除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
    # 執(zhí)行壓縮
    tar zcvf ${target_dir_full}_${back_day}.tar.gz ${target_dir_full}_${back_day} > /dev/null
    # 遠(yuǎn)程傳輸
    scp -q ${target_dir_full}_${back_day}.tar.gz root@${remote_host}:${remote_backup_dir}
    # 刪除壓縮文件
    rm -f ${target_dir_full}_${back_day}.tar.gz
}
# 添加定時任務(wù)
add_job_crontab()
{
    cat >> /etc/crontab << EOF
# 每天凌晨2點55分執(zhí)行備份
55 02 */1 * * root /bin/bash /app/scripts/databack_xtrabackup.sh
# 每個月的每周1,3,5執(zhí)行任務(wù).
#55 3 * * 1,3,5 root /bin/bash /app/scripts/databack_xtrabackup.sh
EOF
}
# 檢查是否正在運(yùn)行
# 若程序正在運(yùn)行則等待5分鐘*3次,超出等待則退出程序不繼續(xù)執(zhí)行
is_running_check()
{
    if [ -f ${running_file} ];then
        echo  "*****${running_file}文件存在,進(jìn)入等待*****"
        for (( i = 1; i <= 3; i++ )); do
            sleep 300s
        done
        echo "`date +%Y%m%d%H%M%S`  由于上一個備份未完成,程序退出忽略執(zhí)行當(dāng)天備份,請檢查原因!!!" >> ${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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容