› 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 · Dec 6, 2016 · 8001 views
    This topic created in 3586 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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