- 全量备份,没有使用增量
- 使用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