脚本改进的一点体会(r12笔记第60天)

一直以来我们想要推进内部的自动化系统,但是总是会遇到各种各样具体的问题,有时候我们准备好了,但是总是会有一些因素的干扰,再加上工作时间的安排,有些事情就一拖再拖。《人民的名义》里说得好,打铁还需自身硬,不管是谁说的,这个话是有道理的。所以不能指望平台或者系统把我们的工作全都能够做好,我们也需要完善不少的东西。

我举个简单的例子,一直以来我们以为业务需要总是会有一些导数据的需求,用到的就是SQL*Loader,记得刚开始接触这个线上系统的时候,是一个小机环境,也听之前的同事分享过一些经验,不能在导入过程中退出,一定要提前准备这个,注意那个,一旦出错,那就是核心业务的重大故障,所以每每到了这个时候,我都额外小心,原本能够脚本做的事情都立马缩了回来,采用手工的方式来做,比如有2个脚本,我基本会手动完成下面的工作。

1.检查文件的格式,如果是windows环境过来的,就使用dos2unix转换一遍

2.检查文件的字符集,绝大多数情况下开发提交过来的是utf8的格式,而数据库的字符集是GBK,(有些数据库是UTF8的)所以每次我都需要iconv转换一遍,认真确认一遍,而在我用的Solaris终端上,显示中文还有限制,所以我就只好切换到一台Linux环境上,把它作为客户端来检查中文的显示,偶尔有几次,脚本里碰到了BOM字符,碰到的次数很少,但是总有那么几次。

3.我们所在的环境是属主用户和连接用户分开的,所以开发同学提交脚本的时候,压根不知道属主用户,所以他们干脆就把属主用户的地方空出来了,这样一来,每次我都需要手工补充,使用vi的方式来修改。有同学说用sed啊,但是心里老是纠结,因为这个文件里面是最终的数据,就怕稍不留意sed的不好就把数据弄乱了。

4.然后是使用sqlldr命令来导入数据,这个过程其实数据量不会太大,顶多几十万,但是这样类型的文件有时候2个,有时候3个,有时候1个,所以也是为了“稳定”而选择手工敲sqlldr命令。

这样一来,一个操作有如此多的地方,所以每每推进自动化平台的操作时,总是困难重重,总是有特别的地方,总是有一些额外需要注意的地方,但是细想这个工作量,其实难度不大。

注意的那些地方每次都要检查一遍,每次都要修改一遍脚本,每次都要认真的核对脚本的执行情况。突然发现忍耐性太好其实也是一个缺点,这也是我在DTCC上想分享的一个想法。

直到一次变更,让我觉得实在不能这么做下去了。因为开发同学一下子提供了10多个导数据的文件,这样的操作一个一个来做,不光容易出错,而且自己一个一个盯起来还很费力,我决定认真的做一些基本的改动,也反反复复明确了哪些可能出现的问题。脚本写好了,自己对比了一番,为了稳妥,还是一个一个执行脚本,分阶段验证,比原来提高了一个层次。

这样一来我的脚本就大体成了下面的样式,会生成几个阶段性脚本。

1. 修改文件的格式,统一格式化 dos2unix * 2. 修改提交的sql脚本字符集 for tfile in `ls -l *.sql |awk '{print $9}'` ;do echo "iconv -f utf8 -t gbk " $tfile" -o "$tfile".new" ;done |tee tochar.sh 3.修改数据文件,补充属主用户 for tfile in `ls -l *.ctl |awk '{print $9}'` ;do echo "sed -i 's/swd_drawcard/test.swd_drawcard/'" $tfile;done |tee prepare.sh

4.批量生成导入脚本 for tfile in `ls -l *.ctl |awk '{print $9}'` ;do echo "sqlldr xxx/xxx control="$tfile;done |tee run.sh

然后第二天,又收到一个批量导数据的任务,而且还算是加急,于是乎,我的脚本立马优先级提高了,我又做了些改动,基本做到一键式,生成多个阶段脚本,这样一来,我只需要手工执行3个shell脚本,无须任何参数,这个过程下来,一两分钟即可搞定。于是乎,这个任务就这样被逼迫出来,改进好了。

而如果后期要继续推进平台化,推进自动化,我觉得还是有很大的空间。当然需要更多的检查,稳定是第一位的。

所谓实践出真知,有的时候要推进一件事情很容易,看起来容易做起来难,其实还是缺少一定的动力。而如果给你的不是动力,是压力,也是一种变相的动力,最终能够促进事情的改进,减少一些重复冗余的工作,也是工作幸福感的一点体现吧。

而多说一句,我就提两个github工具吧。如果自己的一部分工作内容可以分享出来,比如一些脚本等等,你通过很正式的方式发布出来就会额外做更多的工作,而不是一封邮件,一个链接那么简单。

前段时间自己把批量测试MGR的脚本发布出来了,这个过程会让你感觉需要认真的多,感兴趣可以看看。

https://github.com/jeanron100/mysql_mgr_test

另外一个上海的兄弟kinghow写了一个小工具。

https://github.com/kinghows/MySQL_Watcher

这功能比我的MGR测试复杂多了,感兴趣也可以看一看。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2017-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大史住在大前端

基于React-Native0.55.4的语音识别项目全栈方案

PC端基于Web API的语音识别方案可参考《【Recorder.js+百度语音识别】全栈方案技术细节》一文。

1853
来自专栏人人都是极客

手把手教你如何向 Linux 内核提交代码

说到开源大家都会想到黑客和极客,开源的概念最早也是在极客们推出和推崇的。开源的提倡旨在开放源代码使之更方便自由的使用和再创作。随着这一思想的发展,衍生出诸多的开...

1722
来自专栏美团技术团队

前端工程化开发方案app-proto

什么是前端工程化?根据具体的业务特点,将前端的开发流程、技术、工具、经验等规范化、标准化就是前端工程化。它的目的是让前端开发能够“自成体系”,最大程度地提高前端...

5563
来自专栏Guangdong Qi

iOS APP版本构建版本无效

2203
来自专栏北京马哥教育

在 Amazon AWS 搭建及部署网站:申请、设置 AWS 服务

野猫阿罗哈 http://www.cnblogs.com/deltacat/p/amazon-aws-web-1.html Linux运维学习的过程中,实战无疑...

1.1K8
来自专栏Netkiller

监控的艺术

监控的艺术 目录 1. 背景 2. 概述 3. 怎样监控 3.1. 卫星监测 3.2. 逐级诊断 3.3. 模拟人工 3.4. 数据分析 3.5. 监控与开发 ...

3325
来自专栏沈唁志

GitHub代码托管平台提交代码时emoji表情的使用

1994
来自专栏知晓程序

微信小程序快速开发,两周内从创意到上线

2263
来自专栏smartguys

(五):C++分布式实时应用框架——微服务架构的演进

版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经同意转载等行为保留法律追究的权利!

5004
来自专栏用户2442861的专栏

taohui.org.cn建站历程

一直以来都在Qzone、CSDN等上面写博客,偶尔有些想法就在Paas平台上搭建服务,新浪和曾经的google上都用过其appengine。可是在别人的平台上...

2401

扫码关注云+社区