随着项目的运行上线,日志、数据备份都是需要处理的内容,日志需要定期处理,数据需要定期备份,因此,撰写脚本实现定时处理,将成为必要内容。而针对liunx系统中,shell既是一个连接用户和Linux内核的程序,又是一门管理Linux系统的脚本语言。虽然shell脚本没有C++、Phthon、Java、C#等编程语言强大,但也支持了基本的编程元素。
以前对于脚本知识接触的较少,通过本次对项目数据库脚本备份的处理,进行了一次快速学习,对于本次的设计和脚本常用知识进行了总结,方便以后回顾备查。
1业务背景
项目上有一些内容还没有完善到整体项目体系中,部署过程中容易有遗漏,特别是一些项目,由于一些原因,上线着急,部署过程中对于细节的处理往往会有偏差,尤其是对数据库的备份处理,本地备份对于客户来说,数据有泄露的风险,因此,数据备份最好是部署在客户的服务器上,并定时备份,才能保证数据的安全。同时在数据出现问题时,也能快速恢复,保证客户现场出现重大意外之后,数据功能仍能正常运行。
2目的意义
撰写脚本的目的在于对于项目体系的完善,对于产品不能涉及到的,进行补充完善,使客户体验更好,安全性更高,因此不要过于依赖脚本,要知道,产品是第一位的,脚本只是对项目体系的维护,不能作为主要方向,也不能本末倒置,对于脚本的使用要适度,不要过于依赖。
3实现思路
数据库备份脚本的撰写,首先要实现的功能要有以下几个内容:
1.数据库按照指定数据库,或者指定表进行备份;
2.要进行日志记录和输出;
3.要进行定时调用;
4.要对备份进行管理,保留7天最新的备份;
5.脚本通用,易改造。
针对以上内容,要对脚本进行设计,不能只满足于项目的使用,要考虑到后期项目的沿用,因此脚本的设计要灵活,便于修改复用。
3.1实现逻辑
针对上述需求,考虑用一个脚本分开几个功能完成,分别是数据库备份功能、日志记录功能以及保留七天设置,为了保证这几项功能,实现思路如下:
1.通过mysqldump针对表和数据库进行备份;
2.通过find进行文件查找,配合-mtime +7 -name "*.sql" -exec rm {} \语句,进行指定时间文件的删除;
3.通过>> log进行日志追加,通过>log进行日志覆盖 ;
4.将上述功能中语法涉及的参数进行抽离,变成变量赋值;
5.shell脚本进行定时设置,按照设置参数,保证定时触发;
3.2要点说明
脚本功能的撰写不是很难,难的是对整体的考虑以及细节的把控,因此在实现功能时,要注意以下几点:
1.指定数据库中的表,可以通过sql查询的方式,查出相关表名,这样可以通过修改sql语句,进行表名的动态获取;
2.进行脚本功能组合时,要先删除备份,然后再进行数据备份;
3.数据库备份的过程内容会有备份记录,过程中如果出错,要通过日志进行记录(2>>log);
4.脚本备份要按照时间进行命名备份,保证各个备份的独立,不会覆盖冲突;
5.脚本撰写的过程中注意脚本的撰写格式和规范,不要因为撰写不规范引起不必要的代码问题。
4脚本撰写
优先进行数据库备份撰写,然后根据实现逻辑,进行一个一个片段的测试,再根据逻辑进行代码片段的组合,保证基础功能,后续在最初版的基础上进行脚本完善,例如时间、输出打印、脚本注释上等,保证脚本的高度识别性。
4.1数据备份
数据库备份要考虑两种情况,一种是全库备份,另一种是部分表备份,具体实现功能如下:
数据库备份
指定库中表备份
数据库有用表名查询
脚本撰写效果如下:
4.2日志写入
完成了数据库的备份,然后考虑的就是将相应的日志能够留存写入,设置日志存放位置,并根据需求进行日志写入,我们的日志是追加写入的方式(通过“>>”进行日志追加),并且在数据库备份过程中,要将打印到控制台的信息写入到日志中(通过2>> $LogFile写入)具体实现方式如下:
4.3文件删除
因为数据库备份不能一直留存,要做好定期处理,因此要控制在一段时间之内进行多余文件的处理,处理方式如下:
找到文件下以.sql结尾的文件,超过其他的文件,进行批量删除。
4.4定时设置
最后一步就是定时设置,首先要对crontab进行处理,编辑当前用户,如下:
然后添加定时时间,每天凌晨1点零5分执行,如下:
4.5脚本完善
通过上述代码片段的撰写,分别完成了几个部分的功能,之后要考虑代码片段的组合,实现整体功能的联动,同时也要考虑其他方面的完善,包括日志提示的友好性、时间跟踪、变量统一等,具体效果如下:
5功能测试
完成脚本撰写之后,要测试功能是否符合要求,对脚本功能进行实际测试,测试的内容分为两部分,一是对脚本功能的验证,包括数据库的备份情况、文件删除情况、日志写入情况等,二是定时情况,都需要测试,只有这样,才能保证脚本的可用。
5.1备份验证
通过授权.sh文件,进行文件执行,查看备份路径下的数据库备份情况,效果如下:
查看预设路径下数据的情况,如下:
5.2日志验证
通过命令进行多次调用,查看日志写入情况,效果如下:
对应日志内容如下:
5.3定时验证
为了更好的查看定时效果,通过修改1分钟一次调用,测试定时是否生效,设置方式如下:
效果如下:
5.4删除验证
修改脚本中的删除时间,让其立即删除,修改为七天内,内容如下:
效果如下:
6心得体会
本次对于liunx下的脚本撰写是初步尝试,很多都没有概念,也不知道该怎么写,这时就要发扬快速查的风格,根据脚本功能要求,对自己的知识点进行快速学习和应用,通过这种方式进行知识点的吸收,并且快速完善工作内容,在这个过程中,自己也在不断获取和积累。
6.1技能提升
本次在数据库备份脚本撰写的过程中,自己对于这方面的欠缺得到了补偿,并且通过本次结合Liunx的命令,也让自己对于指令的掌握更加熟练,通过两相结合,让我对Liunx系统有了进一步的认识,对于后续工作积累了一定技能和经验。
6.2能力提升
由于项目工作的不断推进,慢慢的交互内容也不是很多,更多时候可以静下心来,做一些代码方面的工作,也开始弥补自己的短板,特别是一些自己没有尝试的工作,现在也开始在做,并且不断完善自己的知识体系,自己的知识盲点也在不断的扫除,虽然还有很多没有真正接触,但是随着产品的不断完善,要开始不断学习,只有这样才能不断进步,跟上公司的步伐。
6.3思考总结
在本次脚本撰写的过程中,考虑问题还是过于片面,没有从整体角度看待问题,只是针对问题处理问题,没有考虑后续沿用,这是有缺失的,而且从这次来看,自己修炼还不够到位,仍然有很多知识需要学习了解,并且能够真正运用。
代码语言都是相通的,整体的设计和实现思路也类似,因此对于基础知识的学习和整体概念的训练不能松懈,要不断深化,因此在之后的工作中,自己仍需要不断积累和夯实自己的基础,只有根基稳才能不断的提高自己。