- 全量備份怒详,沒有使用增量
- 使用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
# 檢測運行臨時文件名稱
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
}
# 檢查是否正在運行
# 若程序正在運行則等待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