不知道大家是怎样做的,生产环境 mysql 表结构会经常变更,做完 DDL 就没了记录,除非有专门的运维平台。
我自己想了个办法,通过 gitlab 仓库去保存表结构,每天收集,这样就可以看到所有变更差异。
实现的地址分享一下 https://github.com/seanlook/DBschema_gather/tree/master/schema_structure
不知道是否有其它更好的办法
1
neoblackcap 2016-12-06 12:16:59 +08:00
数据库变更不进版本库?版本库又不是仅仅开发能用
|
2
EXE 2016-12-06 12:20:33 +08:00
flywaydb
|
3
tony1016 2016-12-06 13:23:52 +08:00
ddl 文件不是也应该走变更管理吗?
|
5
seanlook OP |
7
hanyouchun66 2016-12-06 13:56:18 +08:00
laravel migrate
|
8
seanlook OP @hanyouchun66 站在 DBA 的角度来看,各个端( go, php,java )都用自己的 migrate 的话,我要从总体上审核把关怎么做呢?
另外,数据库业务账号不希望有 ddl 的权限,开发人员水平不一,怕乱动数据库 |
10
seanlook OP @neoblackcap 再者是,对 MySQL 来讲, ddl 是一种昂贵的操作(大表),可能会锁表,或影响线上业务。跟代码版本库里一起发布,风险不很大吗
又在有多个数据库实例做分库的情况下,版本库可以有结构更改记录, @EXE @hanyouchun66 所说想迁就 改 ? |
11
seanlook OP @tony1016 那其实跟我实现的思路差不多,但开发人员那么多,比较零散,自己弄出来的 ddl 可能还有语法错误。特别是开发环境原表结构很生产 /测试的并不一样,你要生成的目标表结构 ddl 还需要调整。也就是版本库里面提交的,可能跟真实修改的还不一样
我把它定义为方便 dba 的工具 |
12
qwer1234asdf 2016-12-06 16:26:45 +08:00
需要修改时,提 issue ,专人修改,查看 issue 不就可以了
|
13
hanyouchun66 2016-12-06 16:44:17 +08:00
@seanlook 可能我们这边开发有 db 操作权限.但是各个端的 migrate 都是放在一个地方的.
|
14
neoblackcap 2016-12-06 17:10:00 +08:00
@seanlook 我的意思是, DDL 变更是放在一个独立的又运维人员维护的版本库里面,开发人员又没有库的合并权限。开发人员可以提 merge request
|
15
publicAdmin 2016-12-06 21:59:15 +08:00
说起这个数据库,第一反映是之前看过的国内财务行业某友公司,那数据库简直惨不忍睹。。- -放眼忘去一张表少则几个字段,多则几十个字段,然后字段名也奇葩,例如 username_v1 , username_v2..... 或者,直接预留个 5~10 个不等的冗余字段为后期扩展埋伏笔。- -
|
16
Bairrfhoinn 2016-12-07 09:02:44 +08:00 via Android
数据库表结构发生变化也是可以用版本控制系统记录的,团队内部按照壹定的规则记录 DDL 语句到文件就可以实现需求。
|
17
seanlook OP @publicAdmin 冗余字段备用,这个 oracle ERP 也会做,这类系统业务太庞大了,不像我们平常所认知的互联网企业,敏捷
|
18
seanlook OP @Bairrfhoinn 嗯,你说的是主动推 设计好的 ddl ,我所考虑的是延迟去拉 真实的结构。都是可以的
|
19
publicAdmin 2016-12-07 15:02:52 +08:00
@seanlook 冗余字段这个我觉得可以接受,然而那什么加个字段 xxx_v1 , xxx_v2 这种玩法就受不了了。- -
|