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
blakejia
V2EX  ›  MySQL

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

  •  
  •   blakejia · 2019-04-13 16:13:24 +08:00 · 7472 次点击
    这是一个创建于 2084 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求是这样的 环境是 mysql

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

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

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

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

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

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

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

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

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

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

    还要说一下,online DDL 风险很多,没有测试 QA 流程,做好备份是必须的,至少还有后悔药吃。
    neoblackcap
        16
    neoblackcap  
       2019-04-13 20:27:25 +08:00
    @xiangyuecn 很多工具都有生成迁移 SQL 的功能,据我了解 MySQL Wrokbench 就有这样的功能。不过也就生成 SQL 而已,不要想着它会帮你想好什么回滚措施。
    我非常同意 15 楼的意见,online DDL 风险大,自己首先要做好数据备份,没有备份千万不要动!
    同时你还可以考虑一下 Percona toolkit 里面的 pt-online-schema-change,他们毕竟还是专家,会更好一些。不过就算这样还是要备份,备份是最重要的的
    gz911122
        17
    gz911122  
       2019-04-14 14:51:21 +08:00
    @xiangyuecn
    技术评审时定好改动的 sql
    开发测试完毕上线时把要执行的 sql 给运维
    bringyou
        18
    bringyou  
       2019-04-15 21:20:10 +08:00
    有种变更管控的思路,可以看看这个项目: https://github.com/myide/see
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1025 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:35 · PVG 04:35 · LAX 12:35 · JFK 15:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.