全量脚本
#!/bin/bash
# set -e
# 1.声明数据库账号信息等
user=root
password=*******
LEAVE_DAY_AGO=$(date -d "-30 day" +'%s' )
# 2.动态创建备份文件的临时存储目录
[ -d ${backup_basedir}/backupdb ]|| mkdir -p ${backup_basedir}/backupdb &>>${backup_basedir}/backupdb/backupdb_log.log
[ -d ${backup_basedir}/backup_data/db ]|| mkdir -p ${backup_basedir}/backup_data/db &>>${backup_basedir}/backupdb/backupdb_log.log
echo "start copying ..." &>>${backup_basedir}/backupdb/backupdb_log.log
# 3.执行备份命令开始数据备份
/usr/bin/innobackupex --user="$user" --password="$password" ${backup_basedir}/backup_data/db >${backup_basedir}/backupdb/backupdb_log.log 2>&1
# 4. 校验备份结果是否通过
if [ "$?" != "0" ]; then
# 4.2 备份失败
echo " backup db error !" &>>${backup_basedir}/backupdb/backupdb_log.log
exit 1;
else
# 4.2 备份成功
echo " end copied! ..." &>>${backup_basedir}/backupdb/backupdb_log.log
echo `ls -lt ${backup_basedir}/backup_data/db |grep - |head -n 1 |awk '{print $9}'` >${backup_basedir}/backup_data/last_backup_dir_name
fi;
# 5. 删除 ${LEAVE_DAY_AGO} 天前的备份目录及子目录、文件
path="${backup_basedir}/backup_data/db"
files=$(ls $path)
for filename in $files
do
file=(${filename:0:10})
if echo $file | grep -Eq "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}" && date -d $file+%Y%m%d > dev/null 2>&1;then
echo $filename 'format is right date' &>>${backup_basedir}/backupdb/backupdb_log.log
file_time=$(date -d $file +'%s' )
#校验备份记录是否已过期
if [$file_time -lt $LEAVE_DAY_AGO ];then
rm -rf $path/$filename*
echo " remove $filename directory " &>>${backup_basedir}/backupdb/backupdb_log.log
else
echo "$filename is valid backup directory" &>>${backup_basedir}/backupdb/backupdb_log.log
fi;
else
echo "date format is invalid" $filename &>>${backup_basedir}/backupdb/backupdb_log.log
fi;
done复制
增量脚本
#!/bin/bash
# set -e
# 1.声明数据库账号信息等
user=root
password=*******
LEAVE_DAY_AGO=$(date -d "-30 day" +'%s' )
# 2.动态创建临时文件临时存储目录
[ -d ${backup_basedir}/backupdb ]|| mkdir -p ${backup_basedir}/backupdb &>>${backup_basedir}/backupdb/backupdb_increment_log.log
[ -d ${backup_basedir}/backup_data/db/increment ]|| mkdir -p ${backup_basedir}/backup_data/db/increment &>>${backup_basedir}/backupdb/backupdb_increment_log.log
echo "increment start copying ..." &>>${backup_basedir}/backupdb/backupdb_increment_log.log
# 3.搜素并获取上一次全量备份的目录地址
last_backup_dir_name=`cat ${backup_basedir}/backup_data/last_backup_dir_name`
# 4.执行备份命令开始数据备份
/usr/bin/innobackupex --user="$user" --password="$password" --incremental ${backup_basedir}/backup_data/db/increment/ --incremental-basedir ${backup_basedir}/backup_data/db/"$last_backup_dir_name" >${backup_basedir}/backupdb/backupdb_increment_log.log 2>&1
# 5.校验备份结果是否超过
if [ "$?" != "0" ]; then
# 4.2 备份失败
echo " increment backup db error !" &>>${backup_basedir}/backupdb/backupdb_increment_log.log
exit 1;
else
# 4.2 备份成功
echo "increment end copied! ..." &>>${backup_basedir}/backupdb/backupdb_increment_log.log
fi;
# 6. 删除 ${LEAVE_DAY_AGO} 天前的备份目录及子目录、文件
path="${backup_basedir}/backup_data/db/increment"
files=$(ls $path)
for filename in $files
do
file=(${filename:0:10})
if echo $file | grep -Eq "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}" && date -d $file+%Y%m%d > dev/null 2>&1;then
echo $filename 'format is right date' &>>${backup_basedir}/backupdb/backupdb_increment_log.log
file_time=$(date -d $file +'%s' )
#校验备份记录是否已过期
if [$file_time -lt $LEAVE_DAY_AGO ];then
rm -rf $path/$filename*
echo " remove $filename directory " &>>${backup_basedir}/backupdb/backupdb_increment_log.log
else
echo "$filename is valid backup directory" &>>${backup_basedir}/backupdb/backupdb_increment_log.log
fi;
else
echo "date format is invalid" $filename &>>${backup_basedir}/backupdb/backupdb_increment_log.log
fi;
done复制
设置crontab 调度执行 crontab -e
# 每周一凌晨4点执行全量备份
0 4 * * 1 sh ${backup_basedir}/backupdb/db_backup.sh >>${backup_basedir}/backupdb/backupdb_log.log
# 每天凌晨2点执行增量备份
0 2 * * * sh ${backup_basedir}/backupdb/db_backup_increment.sh >>${backup_basedir}/backupdb/backupdb_increment_log.log复制
文章转载自拙人笔谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
1966次阅读
2025-04-09 15:33:27
2025年3月国产数据库大事记
墨天轮编辑部
894次阅读
2025-04-03 15:21:16
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
615次阅读
2025-04-10 15:35:48
征文大赛 |「码」上数据库—— KWDB 2025 创作者计划启动
KaiwuDB
507次阅读
2025-04-01 20:42:12
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
496次阅读
2025-04-11 09:38:42
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
476次阅读
2025-04-14 09:40:20
数据库国产化替代深化:DBA的机遇与挑战
代晓磊
449次阅读
2025-04-27 16:53:22
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
423次阅读
2025-04-07 09:44:54
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
374次阅读
2025-04-17 17:02:24
天津市政府数据库框采结果公布,7家数据库产品入选!
通讯员
368次阅读
2025-04-10 12:32:35