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

2019-04-13 16:13:24 +08:00
 blakejia

需求是这样的 环境是 mysql

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

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

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

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

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

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

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

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

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

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

还要说一下,online DDL 风险很多,没有测试 QA 流程,做好备份是必须的,至少还有后悔药吃。
neoblackcap
2019-04-13 20:27:25 +08:00
@xiangyuecn 很多工具都有生成迁移 SQL 的功能,据我了解 MySQL Wrokbench 就有这样的功能。不过也就生成 SQL 而已,不要想着它会帮你想好什么回滚措施。
我非常同意 15 楼的意见,online DDL 风险大,自己首先要做好数据备份,没有备份千万不要动!
同时你还可以考虑一下 Percona toolkit 里面的 pt-online-schema-change,他们毕竟还是专家,会更好一些。不过就算这样还是要备份,备份是最重要的的
gz911122
2019-04-14 14:51:21 +08:00
@xiangyuecn
技术评审时定好改动的 sql
开发测试完毕上线时把要执行的 sql 给运维
bringyou
2019-04-15 21:20:10 +08:00
有种变更管控的思路,可以看看这个项目: https://github.com/myide/see

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/554809

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX