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