V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
seanlook
V2EX  ›  MySQL

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

  •  
  •   seanlook · 2016-12-06 12:08:05 +08:00 · 6804 次点击
    这是一个创建于 2908 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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