一种记录生产环境数据库表结构变更历史的方法

2016-12-06 12:08:05 +08:00
 seanlook

不知道大家是怎样做的,生产环境 mysql 表结构会经常变更,做完 DDL 就没了记录,除非有专门的运维平台。

我自己想了个办法,通过 gitlab 仓库去保存表结构,每天收集,这样就可以看到所有变更差异。

实现的地址分享一下 https://github.com/seanlook/DBschema_gather/tree/master/schema_structure

不知道是否有其它更好的办法

6768 次点击
所在节点    MySQL
19 条回复
neoblackcap
2016-12-06 12:16:59 +08:00
数据库变更不进版本库?版本库又不是仅仅开发能用
EXE
2016-12-06 12:20:33 +08:00
flywaydb
tony1016
2016-12-06 13:23:52 +08:00
ddl 文件不是也应该走变更管理吗?
seanlook
2016-12-06 13:38:55 +08:00
@tony1016 那也得有个地方记录历史变更。不知道你所说的变更管理指啥,邮件吗?
seanlook
2016-12-06 13:43:42 +08:00
@neoblackcap 我们有 java, php ,c++各种开发语言,都有变更数据库结构的需求,有什么版本库能够同时达到效果吗?

又比如, DBA 要优化索引,这些记录在哪
seanlook
2016-12-06 13:46:56 +08:00
@EXE 我们如果限制,开发业务账号,不允许有 ddl 权限呢
hanyouchun66
2016-12-06 13:56:18 +08:00
laravel migrate
seanlook
2016-12-06 14:02:44 +08:00
@hanyouchun66 站在 DBA 的角度来看,各个端( go, php,java )都用自己的 migrate 的话,我要从总体上审核把关怎么做呢?

另外,数据库业务账号不希望有 ddl 的权限,开发人员水平不一,怕乱动数据库
tony1016
2016-12-06 14:08:02 +08:00
@seanlook 版本库啊。我的意思是,ddl 文件,也像源代码一样管理啊。
seanlook
2016-12-06 14:09:15 +08:00
@neoblackcap 再者是,对 MySQL 来讲, ddl 是一种昂贵的操作(大表),可能会锁表,或影响线上业务。跟代码版本库里一起发布,风险不很大吗

又在有多个数据库实例做分库的情况下,版本库可以有结构更改记录, @EXE @hanyouchun66 所说想迁就 改 ?
seanlook
2016-12-06 14:15:27 +08:00
@tony1016 那其实跟我实现的思路差不多,但开发人员那么多,比较零散,自己弄出来的 ddl 可能还有语法错误。特别是开发环境原表结构很生产 /测试的并不一样,你要生成的目标表结构 ddl 还需要调整。也就是版本库里面提交的,可能跟真实修改的还不一样

我把它定义为方便 dba 的工具
qwer1234asdf
2016-12-06 16:26:45 +08:00
需要修改时,提 issue ,专人修改,查看 issue 不就可以了
hanyouchun66
2016-12-06 16:44:17 +08:00
@seanlook 可能我们这边开发有 db 操作权限.但是各个端的 migrate 都是放在一个地方的.
neoblackcap
2016-12-06 17:10:00 +08:00
@seanlook 我的意思是, DDL 变更是放在一个独立的又运维人员维护的版本库里面,开发人员又没有库的合并权限。开发人员可以提 merge request
publicAdmin
2016-12-06 21:59:15 +08:00
说起这个数据库,第一反映是之前看过的国内财务行业某友公司,那数据库简直惨不忍睹。。- -放眼忘去一张表少则几个字段,多则几十个字段,然后字段名也奇葩,例如 username_v1 , username_v2..... 或者,直接预留个 5~10 个不等的冗余字段为后期扩展埋伏笔。- -
Bairrfhoinn
2016-12-07 09:02:44 +08:00
数据库表结构发生变化也是可以用版本控制系统记录的,团队内部按照壹定的规则记录 DDL 语句到文件就可以实现需求。
seanlook
2016-12-07 09:03:34 +08:00
@publicAdmin 冗余字段备用,这个 oracle ERP 也会做,这类系统业务太庞大了,不像我们平常所认知的互联网企业,敏捷
seanlook
2016-12-07 09:05:38 +08:00
@Bairrfhoinn 嗯,你说的是主动推 设计好的 ddl ,我所考虑的是延迟去拉 真实的结构。都是可以的
publicAdmin
2016-12-07 15:02:52 +08:00
@seanlook 冗余字段这个我觉得可以接受,然而那什么加个字段 xxx_v1 , xxx_v2 这种玩法就受不了了。- -

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/325614

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX