基于实验环境做的整套脚本,目前还未进行测试,因为测试周期较长,所以短时间内还无法验证。
写成博文供大家分享和讨论,希望对大家自学能有所帮助。
根据后续测试我会继续调整及优化。
xtrabackup软件安装就不赘述了,请大家自己找度娘问一下就好,安装过程不难。
实验环境我用的是这篇文章的环境:
https://www.cnblogs.com/f-ck-need-u/p/9018716.html#auto_id_3
其他的就不多说了,开始正文吧。
xtrabackup软件可以进行全量备份以及增量备份,同时还可以将增量备份整合到全量备份中,因此我的自动备份整个过程起始就是围绕着增量备份以及增量备份整合来做的。
在做增量备份之前需要先做一个全量备份,这个全量备份可以简单的理解成给后续备份规定一个起始点,让程序知道从哪里开始算是原始数据,从这个点开始往后是增量的数据。
具体步骤看一下上面那个连接的博文就知道了,在这里也不做赘述了。
日备份脚本:
#基于全量备份“/dbback/019-12-21_16-50-37”进行增量备份,并保存在/dbback目录中
innobackupex --user=root --password=123 --incremental /dbback/ --incremental-basedir=/dbback/2019-12-21_16-50-37
#查询/dbback目录中最后一个文件的文件名,并将其定义成函数newback
newback=$(ls -l /dbback/ | tail -n 1 | awk '{print $9}')
#准备进行基于/dbback/019-12-21_16-50-37的增量集整合
innobackupex --apply-log --redo-only /dbback/2019-12-21_16-50-37
#将/dbback/$newback增量备份文件整合到/dbback/2019-12-21_16-50-37的全量备份中
innobackupex --apply-log --redo-only /dbback/2019-12-21_16-50-37 --incremental-dir=/dbback/$newback
#结束增量备份文件整合
innobackupex --apply-log /dbback/2019-12-21_16-50-37
#将/dbback/$newback移动到/dbback-day目录中
mv /dbback/$newback /dbback-day/
周备份脚本:
#获取7日前的年、月、日
time1=$(date -d -7day "+%Y.%m.%d")
#获取昨天的年、月、日
time2=$(date -d yesterday "+%Y.%m.%d")
#将/dbback-day目录中的文件进行打包,并根据日期进行命名,保存在/dbback-week目录下
tar -cvf /dbback-week/$time1-$time2.sqlbk.tar /dbback-day
#删除/dbback-day目录下的所有文件
rm -rf /dbback-day/*
月备份脚本:
#获得日期,取前一个月的年、月
time1=$(date -d "$(date +%Y%m)01 last month" +%Y%m)
#将/dbback-week目录下的文件进行打包压缩,保存在/dbback-month目录下,并以获取到的时间命名
tar -czvf /dbback-month/$time1.sqlbk.tar.gz /dbback-week
#删除/dbback-week目录下的所有文件
rm -rf /dbback-week/*
计划任务脚本:
vim /etc/crontab
#每天23:59分执行/shell/db-day.sh
59 23 * * * root /shell/db-day.sh
#每周1的02:00执行/shell/db-week.sh
0 2 * * 1 root /shell/db-week.sh
#每月1日的04:00执行/root/shell/db-month.sh
0 4 1 * * root /shell/db-month.sh
总结,以上分享是未经验证过的,其中存在很多问题,比如没有考虑月份切换时的备份以及删除操作,以及周切换时的日备份速度问题,因此以上内容仅供学习和参考,希望对大家有所帮助。
补充1:修改了crontab的内容,待验证;
以验证日备份,成功。
增加了便于查看备份目录的脚本:
vim /ttest.sh
echo -e "\033[34m /dbback \033[0m" && ls -lh /dbback
echo -e "\033[34m /dbback-day \033[0m" && ls -lh /dbback-day/
echo -e "\033[34m /dbback-week \033[0m" && ls -lh /dbback-week/
echo -e "\033[34m /dbback-month \033[0m" && ls -lh /dbback-month/
运行效果:
cd /
./ttest.sh
/dbback
总用量 0
drwxr-x--- 6 root root 275 12月 28 23:59 2019-12-21_16-50-37
/dbback-day
总用量 0
drwxr-x--- 6 root root 217 12月 22 18:43 2019-12-22_18-43-26
drwxr-x--- 5 root root 199 12月 28 23:59 2019-12-28_23-59-01
/dbback-week
总用量 0
/dbback-month
总用量 0
/dbback、/dbback-day、/dbback-week、/dbback-month
以上四个目录在显示时应该是蓝色字体,编辑器里面好像没法设置字体颜色,因此没法正常展示。