快30了, 记录一下之前平凡的工作经历.
2018准备实习, 大学专业学的是网络工程,软考也拿下了网络工程师,但不太好找相关工作, 基本上都是要求3年工作经验. 于是去了成都某公司实习,刚开始的工作内容是安装和维护一体机(就那种能查询打印的),安装一台需要30分钟,后面写了个bat只需要5分钟就能搞定,部分命令可参考:https://cloud.tencent.com/developer/article/1370399,这也算是我第一个生产上使用的脚本吧,这几个月基本上都是出差,成都周边的区县基本上都去过了.
2019初的时候开始接触了oracle,weblogic.好像是3月来着,生产第一次安装了oracle; weblogic是公司大佬写的自动化安装脚本,所以没啥难度.4月去了湘西做等保整改(数据库,中间件,网络等),机房是真TM冷,呆了两周左右.毕业后就直接在公司继续工作了.7月,生产上整了DG;8月,rac也整上生产了. 后面还有个19c升级培训,去参加了,感觉这数据库还是有点水平的(之前因为安装数据库比较复杂,就以为这玩意不咋地...). 之后就编写了oracle自动安装脚本.
期间也接触了haproxy来做负载转发,后面也有使用nginx来做的, 由于安装不太方便,就做成了rpm包. 也能实现centos系列(rhel,oel)的tab补全了. 也能定制OS镜像了,把需要的包打进去,这样刻出来的镜像就比较小. 还接触了redis,zk,kafka等, 也整了一大堆自动化脚本(都是shell):

12月去了武汉处理网络问题(其实就一条路由策略而已),这是最后一次操作实际网络设备了. 之后去某客户驻场维护oracle(rac+adg),ogg,weblogic等,从此开启了漫长的驻场时代...
疫情来了, 去超时买口罩,但是没戴口罩是不允许进超时的,但不进超市就无法买口罩. 就没买到口罩. 上班时公交车上通常就只有我和司机,驻场点周围都是关门了的, 就被迫只能恰甲方的食堂了(其实是送过来的).
由于每天都要花不少时间来做巡检, 于是我使用python实现了巡检的自动化处理,22年的时候我问了下还在使用(主要是使用pandas来处理,这也导致打包后几百MB...). 也是我开始从shell往python方向转. (shell的力量是有限的, 所以我...)

有个表空间有32T,还剩约1T左右, 但基本上不会变化了(新用户都有自己的表空间),所以这个表空间使用率很高,我们也不会去管它; 直到有一天,cpu kaka涨,查看alert日志发现有个表申请几百MB空间,但是不够了,该表使用的正是那个32T的表空间,后来分析发现剩下的空间几乎都是碎片(相对于256MB来说)
之后给了一个服务器, 我使用我定制的自动化镜像(完整的centos镜像,只是使用kickstart完成了自动化安装而已,支持bios,efi/uefi),然后使用我oracle自动化安装脚本安装了oracle,ssh也顺便自动化升级了,我那一堆自动化脚本都完整的衔接上了. 但配置网络的时候,始终ping不同(网关),后面发现服务器后面标记的网卡名字和实际的网卡名字是相反的,(ifconfig看网卡没有running才发现的,光模块插反了?).所以工作的时候都得自己验证一下,不能信各种标签(自己打标签的时候一定要确认好,不然就是坑的后人).
大部分工作内容都是巡检,扩表空间,查询慢SQL(通常也会根据业务要求去kill),处理ogg不一致等. 有次遇到一个业务某个模块时好时坏的情况,数据库,中间件都排除了问题, 怀疑是网络问题,但其它模块功能都是正常的, 后面把应用部署到f5前面(不经过f5)后就正常了,原来是f5连接满了导致的....
年底辞职了.
1月去了上海做tdsql(含tbase),这里开始接触了mysql和postgresql,但pg的命令简写对新手太不友好了.期间也考取了tcce等证书,但工作强度太大,遂离职了.
5月去了另一个基于mysql的国产数据库公司,做国产数据库和mysql相关的安装运维,也编写了mysql自动化安装脚本(风格和tdsql比较像),也接触了xbk,binlog2sql之类的第三方工具(之前使用o的时候,这些都是官方自带的).也有些ogg,o转mysql的事情. 但出差太多,工作强度也不低, 就又跑路,回重庆了...
年初去重庆某客户驻场维护tdsql和mysql,事情不多,买了个手柄玩空洞骑士. 5月考了mysql-ocp. 这一年开始写博客了. 好景不长,快年底了, 客户不续了(含我在的tdsql/mysql),重庆又没有合适我的坑了, 其它城市倒是有,但我更想呆在重庆, 就索性离职慢慢找. 然后这一年就没了.
面试了不少,但多数都没有后续,少数是没面过.
闲着也是闲着, 就开始看mysql的源码了. 先看了binlog结构,主要是这玩意市面上工具多. 然后又看了mysql的连接协议, 发现能解析连接协议后能做的事情就非常多了: 自己编写驱动,能做读写分离中间件,能做审计,还能给sqlite加上mysql连接协议从而实现使用mysql远程连接sqlite.
某次面试的时候,面试官问drop/delete的表除了从备份(含binlog)恢复外,还能怎么恢复(估计是想问undrop-for-innodb,但我当时不知道). 于是我看了下ibd文件的结构,编写了ibd2sql的第一个版本并开源:https://github.com/ddcw/ibd2sql
重庆并不好找mysql相关的工作, 于是我就选择了上海(毕竟之前带过),5月就去上海入职了上家公司,主要是做mysql相关的,也偶尔有tdsql之类的. 工作期间遇到的问题基本上都自己复现并写了相关的博客.
期间有个客户要实现自定义审计, 于是就想到了之前解析mysql协议实现的审计功能,就推给客户了,有没有使用我不知道,因为我后面(12月)就又去驻场了...
驻场后,平时遇到的问题还是会在自己环境模拟并记录. 发现之前学习的mysql连接协议,Binlog格式等看起来对工作没啥用, 但实际上分析问题的时候就很有用, 比如:
某次从库报错数据不一致(表无索引), 但从库是只读,不存在修改数据的情况, 而且binlog还是row格式. 这就很奇怪了! 手动解析binlog后发现报错的行存在一个double类型的-0, 但是主从是逻辑搭建的(insert的-0会被转为0),没有-0... 官方说这是ieee定的标准问题.
mysql切换也实现了自动化(之前给其它客户切换的时候都是按照指定的步骤由dba进行操作,突发情况由dba判断), 要严格按照切换逻辑来(不能存在两边都能写的情况). 每周都要巡检,还是比较耗时的, 而且有些信息需要和之前做对比,翻巡检报告是比较麻烦的, 于是就写了2个脚本, 一个分析巡检,一个提供web界面方便查询(内网环境,都是纯py写的,所以也就没考虑重连之类的了)数据库,是的,巡检结构放数据库里面的. 目前已经几个GB左右的巡检数据了, 但查询一直都是秒出. 而且巡检入了数据库, 一些定制的要求就可以在数据库里面操作了.
6月开通了公众号:大大刺猬, 头像就是我github上的,还是大学期间学ps的时候整的.
9月某个周六9:30要做某个变更, 要求8:30到, 到了之后,由于某种特殊情况延迟到了10:30, 闲着也是闲着,就看看其他人得到博客,看到了oracle ace,于是就填了下申请.
就这样驻场了一年.
1月收到了ace申请通过的邮件.啊? 又找小墨申请了墨天伦的MVP. 哈哈, 我也是有头衔的人了.
备份失败通常是慢SQL/DDL导致的, 所以整了个直接解析慢日志获取备份失败的SQL的脚本,当然还有一些类似的简化工作的脚本.
然后又驻场了一年.遇到的案例基本上都写博客了的, 其实大部分都是相同的,就没写了. 9月hellow knight 丝之歌出了,没玩完.
redo的解析也实现了, 至此我使用纯python解析了mysql的连接协议(含主从),ibd,frm,binlog,redo,undo,slow log等的解析.
5月,我跑路了(刚好3年).
玩了几天游戏,补了颗牙(没打麻药,很疼, 所以各位要爱惜自己的牙齿).然后简单的收拾了下房间.今天去洗了牙,洗牙的小姐姐真是情绪价值拉满.
然后写下了这篇文章,准备先去看下课本上记录的那些"景点"
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。