数据库存在版本管理工具么?类似代码里面的 git - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
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
blakejia
V2EX    MySQL

数据库存在版本管理工具么?类似代码里面的 git

  • &nbs;
  •   blakejia Apr 13, 2019 8117 views
    This topic created in 2571 days ago, the information mentioned may be changed or developed.

    需求是这样的 环境是 mysql

    因为多人开发。而且是项目刚起步。数据库会经常变动。每次变动 sql 语句传递比较烦人。

    18 replies    2019-04-15 21:20:10 +08:00
    liuxu
        1
    liuxu  
       Apr 13, 2019
    laravel 的 migration?
    9hills
        2
    9hills  
       Apr 13, 2019 via iPhone
    migration,很多语言都有库支持
    mmdsun
        3
    mmdsun  
       Apr 13, 2019 via Android
    navicat 有个数据库结构对比功能。可以生成差异 SQL
    本地库修改没有问题就可以用 navicat 更新到测试库。
    allanzhuo
        4
    allanzhuo  
       Apr 13, 2019
    migration 吧
    shoaly
        5
    shoaly  
       Apr 13, 2019
    虽说有, 但是个人建议 还是别把数据库弄成谁都能插一列这么随意把.... 最后删起来很伤
    janxin
        6
    janxin  
       Apr 13, 2019
    存在,migration
    具体参考你们在用的语言工具。当然也有独立工具可以使用。
    mandy0119
        7
    mandy0119  
       Apr 13, 2019
    难道。 你们的开发环境的数据库是运行在本地的?
    agoodob
        8
    agoodob  
       Apr 13, 2019
    Ruby on Rails 里 migration 的概念可以参考下
    blakejia
        9
    blakejia  
    OP
       Apr 13, 2019
    @mandy0119 #7 是的。我们开发是本地测试开发。没问题。再变更数据库
    neoblackcap
        10
    neoblackcap  
       Apr 13, 2019 via iPhone
    存在很多,但是数据库迁移不像代码,你数据库里面有数据,你改表是有可能锁表的,还是先了解数据库,然后再寻求这些解决方案。
    luozic
        11
    luozic  
       Apr 13, 2019
    database migration solutions: ruby/python 多一,Java 也有,其他的
    rayingecho
        12
    rayingecho  
       Apr 13, 2019
    flyway
    mandy0119
        13
    mandy0119  
       Apr 13, 2019
    。。。 建议你们如果没有测试环境 就把其中某一个人的电脑(长期放在公司那种 ) 作为共用的测试数据库。。。
    xiangyuecn
        14
    xiangyuecn  
       Apr 13, 2019
    [占个楼提个问] :

    好奇大家本地和生产服务器上的数据库结构存在差异时是怎么处理?

    我一直是一个表一个表手工对,累死个人

    比如:开发了个把月,积累了一定量的数据库结构变化,要上线的时候,该如何把本地的结构同步到线上生产服务器上,还能保证不能遗漏?

    ------------

    还有一个一直没搞明白的问题,新旧版本都用到的同一个表有改动,并且这个改动不兼容老版本,感觉升级过程中都要暂停服务才行,那么还怎么进行灰度发布,或者从头到尾的流程就是错的?

    @liuxu
    @9hills
    @mmdsun
    @allanzhuo
    @shoaly
    @janxin
    @mandy0119
    @agoodob
    @blakejia
    @neoblackcap
    @luozic
    @rayingecho
    tomczhen
        15
    tomczhen  
       Apr 13, 2019 via Android
    数据库有架构前移工具,MySQL 的那个官方客户端就有,SQLServer 的话 vs 里面有,可以生成变更语句。另外,SQLServer 还可以用 redgate 的工具(收费)。

    有些框架也有迁移支持,migration,比如 laravel 和 django,再有就是一些独立工具。

    要注意的是版本回退时如果牵扯到字段增加,最好人工干预生成(框架工具都有支持)回退脚本,不然字段会被删除,数据就没了。数据类型变更也会牵扯到数据丢失(长度,精度)。涉及索引还会牵扯到索引生成或重建。

    还要说一下,online DDL 风险很多,没有测试 QA 流程,做好备份是必须的,至少还有后悔药吃。
    neoblackcap
        16
    neoblackcap  
       Apr 13, 2019
    @xiangyuecn 很多工具都有生成迁移 SQL 的功能,据我了解 MySQL Wrokbench 就有这样的功能。不过也就生成 SQL 而已,不要想着它会帮你想好什么回滚措施。
    我非常同意 15 楼的意见,online DDL 风险大,自己首先要做好数据备份,没有备份千万不要动!
    同时你还可以考虑一下 Percona toolkit 里面的 pt-online-schema-change,他们毕竟还是专家,会更好一些。不过就算这样还是要备份,备份是最重要的的
    gz911122
        17
    gz911122  
       Apr 14, 2019
    @xiangyuecn
    技术评审时定好改动的 sql
    开发测试完毕上线时把要执行的 sql 给运维
    bringyou
        18
    bringyou  
       Apr 15, 2019
    有种变更管控的思路,可以看看这个项目: https://github.com/myide/see
    About     Help     Advertise     Blog     API     FAQ     Solana     1127 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 64ms UTC 18:13 PVG 02:13 LAX 11:13 JFK 14:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86