学了段时间的Linux,也学习了shell脚本编写的基本命令与语法,现做一个综合案例来详细讲解。
要求:1)、每天凌晨备份数据库shaoxiao到/data/backup/db中
2)、备份开始和备份结束有提示信息
3)、备份的文件要求以备份的时间为文件名,并且打包成.tar.gz的格式.例如:2020-09-20_230201.tar.gz
4)、备份的同时,检查是否有10天前的备份数据,有就删除。
分析:第一步很简单,用crontab任务调度指令即可。
第二步也很简单,在shell脚本里面echo相应的提示符就行
第三步生成的文件名以日期命名,因此要设置变量
第四步有个固定格式,先找到,再删除:find /usr/loca/backup/ -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
直接上代码:
详细解析:
第2行是指定保存路径的变量
第4行是获取当前时间的变量,注意(date指令的用法)
第5、6、7行是输出提示信息,第5行可不用。注意:编写shell脚本时,可以先执行看一看能正常运行,一步一步的来
第9、10、11行是定义数据库mysql的,登录用户名和密码,主动地址,这里用本机localhost
第13行是创建生成备份的路径,用 if [ ] 来判断。[ ! -d $ ]表示如果没有这个地址,就创建。!取反的意思。
第17行是定义要备份的数据库的名称变量
第18行是数据库mysql的指令,mysqldump 是备份,后面的参数是 -u登录名称 -p登录密码 --host登录主机。登录之后,压缩这个数据库,生成一个临时的压缩文件.sql.gz
第19行是切换到保存数据库的目录
第20行是压缩保存有数据库备份文件的目录,整个目录全部压缩,并且文件名是以日期命名的。DATETIME变量的名字。
第21行是删除生成的那个目录,因为已经备份压缩了,之前生成的目录可以删除了
第23行是每次执行完备份后查找一下有没有10天前备份的文件,删除,保证文件的大小,不然会一直生成。
最后执行第一步,设置进程调度任务即可。
注意:细节:mysql命令(18行)后面跟密码的-p后不要空格,否则每次要求你输入密码。23行固定格式后面-exec rm -rf {} \; {}后面空格,\后面必须要分号;,否则提示错误,这个固定格式。
下面是运行效果截图
上图是这是数据库内容,里面有个shaoxiao的数据库名。
上图是运行后自动生成的文件,以时间格式命名的
这是shell脚本运行的效果,从“开始备份”起
这个是进入解压后进入备份的文件查看,发现备份了数据库shaoxiao,并且里面有表a1。说明备份成功。