修个数据

一件事,即使看似平凡,但只要你做深、做久,很快就能变成你的专业,平凡的事情做久了,也能不平凡。

最近项目中的每天都有很多sql需要执行,以便修复客户的数据,大概持续了近2个月的时间。鉴于开发人员对生产环境的隔离,一般这种修改生产环境数据的活儿就由专职的DBA,或Ops完成。但说到底,开发人员对于sql更熟悉,但这只是通常情况,所以“打铁还需自身硬”。

在没有任何数据管理系统的前提下,如何规范、准确的修复数据,便有很多细节需要我们思考,并找到合适的实践路径,不至于让某些角色花费大量的时间在这个事情上面。

1. 审批流程,反馈流程

修改数据通常涉及多方,为了保证流程规范(其实是后期甩锅),有关人员需要掌管好自己手中的小权利,通常涉及 PO, Dev, Ops/DBA, Manager等角色。其他问题:三级审批、四级审批、人多、传话丢失、语义产生歧义等;如果sql有问题,该如何找人,如何反馈,

2. 先备份

对于ops人员而言,数据无小事,但在dev眼里,有些表中的数据无足轻重,有些确实很重要,但ops/DBA是不那么了解业务的,也是或许是一些Dev没有经历过丢数据后的无奈和严重后果。

备份规则(即什么情况下需要备份,什么情况可以不备份):

  • 数据量变更大于500条时,必须备份数据
  • 无需备份的需要备注原因,以便其余人了解不备份的上下文

备份方式:

  • 在数据库里备份,例如 create table <table_a_copy_date> select * from users;
  • 少量数据,本地备份,上传到jira中,数据安全问题,
  • 备份到某个云☁️上,有需要的时候开放权限获取备份文件

3.执行,用技术去规范

对于不同的数据库引擎,sql语法有部分差异,使用不同的sql客户端工具,也有不同的差异。

吐槽遇到的问题:

  • sql中的中英文符号不区分,导致的语法问题
  • 单引号’和间隔号`
  • 看着正常,https://tool.lu/sql/ 也检查不出来的,但其实很有问题的语法 (https://blog.csdn.net/whatday/article/details/103308922)
  • 多条语句的,不用;分割
  • 自增id,不要随便插入新的id
  • 一个sql需要执行1个小时,而且不能重复执行的,确保不能断网,最好不用本地的sql客户端,而使用tmux 后台执行

pipeline化、脚本化, 需包含语法检查、备份、执行、执行后核对等功能,解放ops的双手

dbname.tablename

其他

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2019-2024 John Doe
  • Visitors: | Views:

请我喝杯咖啡吧~