您如何准备SQL增量?您是将每个更改架构的SQL手动保存到增量文件夹中,还是有某种自动差异化过程?
我对用于对数据库架构和源代码进行版本控制的约定感兴趣。也许是一个预先提交的钩子,可以与架构进行区分?
编辑:看到答案,我想澄清一下,我熟悉使用增量运行数据库迁移的标准方案。我的问题是最好自己自动创建增量。
同样,版本控制适用于PHP和MySQL(如果有所帮助)。(请没有Ruby解决方案)。
您如何准备SQL增量?您是将每个更改架构的SQL手动保存到增量文件夹中,还是有某种自动差异化过程?
我对用于对数据库架构和源代码进行版本控制的约定感兴趣。也许是一个预先提交的钩子,可以与架构进行区分?
编辑:看到答案,我想澄清一下,我熟悉使用增量运行数据库迁移的标准方案。我的问题是最好自己自动创建增量。
同样,版本控制适用于PHP和MySQL(如果有所帮助)。(请没有Ruby解决方案)。
Answers:
看到
和杰夫的文章
我感到您很痛苦,希望有一个更好的答案。这可能更接近您想要的。
总的来说,我觉得没有足够的,可以接受的解决方案,因此我会在这一领域做出自己的贡献。
您可能会看到另一个类似的线程:如何在SVN中对MS SQL数据库进行版本控制?。
如果您仍在寻找选项,请访问neXtep Designer。这是一个基于版本控制概念的免费GPL数据库开发环境。在环境中,您始终使用版本控制的实体,并且可以专注于数据模型开发。发布完成后,版本控制系统上插入的SQL生成引擎可以生成两个版本之间所需的任何增量,并在需要时为您提供一些交付机制。
除其他外,您可以在开发期间同步和反向同步数据库,创建数据模型图,使用集成的SQL客户端查询数据库等。
看看Wiki了解更多信息:http : //www.nextep-softwares.com/wiki
它当前支持Oracle,MySql和PostgreSql,并且使用Java语言,因此该产品可在Windows,Linux和Mac上运行。
我不管理三角洲。我对主数据库进行了更改,并且有一个工具可以基于主数据库创建基于XML的构建脚本。
当需要升级现有数据库时,我有一个程序可以使用基于XML的构建脚本来创建新数据库和裸表。然后,我使用INSERT INTO x SELECT FROM y从旧数据库复制数据,然后应用所有索引,约束和触发器。
新表,新列,已删除列都将自动处理,并有一些小技巧来调整复制例程,我可以处理列重命名,列类型更改和其他基本重构。
我不建议在具有大量数据的数据库上使用此解决方案,但我会定期更新具有400个表的1GB以上的数据库。
您没有提到要使用哪个RDBMS,但如果是MS SQL Server,则在创建对象创建脚本之间的增量时,Red-Gate的SQL Compare对我们来说是必不可少的。
我不是要吹牛,而是开发了一个内部Web应用程序来跟踪对数据库架构的更改并创建版本化的更新脚本。
该工具称为巴西,现已根据MIT许可开放源代码。巴西是基于Ruby的Ruby,并且支持将更改部署到Ruby DBI支持的任何数据库(MySQL,ODBC,Oracle,Postgres,SQLite)。
计划支持将更新脚本置于版本控制中。
http://bitbucket.org/idler/mmp-用于MySQL的架构版本控制工具,用PHP编写
我使用Firebird数据库进行大多数开发,并使用FlameRobin管理工具。它有一个不错的选项来记录所有更改。它可以将所有内容记录到一个大文件,或每个数据库更改一个文件。我使用第二个选项,然后将每个脚本存储在版本控制软件中-之前使用Subversion,现在使用Git。
我假设您会找到一些MySQL工具,该工具具有与FlameRobin用于Firebird相同的日志记录功能。
在一个数据库表中,我存储了数据库结构的版本号,因此我可以轻松升级任何数据库。我还编写了一个简单的PHP脚本,该脚本在任何目标数据库上一个接一个地执行这些SQL脚本(数据库路径和用户名/密码在命令行中提供)。
还有一个选项可以记录所有DML(插入,更新删除)语句,我在修改每个数据库包含的一些“默认”数据时将其激活。
我写了一篇不错的白皮书,详细介绍了如何进行所有这些操作。您可以从此处下载.pdf格式的文件以及示例PHP脚本。
我还开发了一套PHP脚本,开发人员可以在其中将其deltasql脚本提交到中央存储库。
在一个数据库表(称为TBSYNCHRONIZE)中,我存储了最新执行的脚本的版本号,因此我可以使用Web界面或为Eclipse专门开发的客户端来轻松升级任何数据库。
Web界面允许管理多个项目。它还支持数据库“分支”。
您可以在http://www.gpu-grid.net/deltasql上测试该应用程序(如果以admin身份使用密码testdbsync登录)。该应用程序是开源的,可以在这里下载:http : //sourceforge.net/projects/deltasql
deltasql在瑞士和印度广泛使用,在日本很流行。
几个月前,我搜索了用于对MySQL模式进行版本控制的工具。我发现了许多有用的工具,例如Doctrine迁移,RoR迁移以及一些用Java和Python编写的工具。
但是没有人满足我的要求。
我的要求:
我开始写迁移工具,今天我有beta版。
如果您对此主题感兴趣,请尝试一下。请向我发送以后的请求和错误报告。
源代码:bitbucket.org/idler/mmp/src英文概述:bitbucket.org/idler/mmp/wiki/俄语首页:antonoff.info/development/mysql-migration-with-php-project
当我进入新的数据库时:
首先,我检查结构:
mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB1_NAME__ | sed 's/ AUTO_INCREMENT=[0-9]*//g' > FILENAME_1.sql mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB2_NAME__ | sed 's/ AUTO_INCREMENT=[0-9]*//g' > FILENAME_2.sql diff FILENAME_1.sql FILENAME_2.sql > DIFF_FILENAME.txt cat DIFF_FILENAME.txt | less
感谢stackoverflow用户,我可以编写此快速脚本来查找结构差异。
src:https : //stackoverflow.com/a/8718572/4457531&https : //stackoverflow.com/a/26328331/4457531
在第二步中,我使用逐表检查数据mysqldiff
。这有点陈旧,但是基于information_schema
数据的php循环肯定可以完成工作
对于版本控制,我使用相同的方式,但是我使用diff结果格式化SQL更新脚本(用于升级或回滚),并且使用版本号约定(经过多次修改,版本号看起来像ip地址)。
initial version : 1.0.0
^ ^ ^
| | |
structure change: - | |
datas added: -------- |
datas updated: --------
我正在使用数据库模式的严格版本控制(在单独的表中跟踪)。脚本存储在版本控制中,但是它们都将在进行任何更改之前验证当前架构的版本。
这是SQL Server的完整实现(如果需要,可以为MySQL开发相同的解决方案):如何维护SQL Server数据库架构版本
经过长时间的调查,我发现有些第三者工具或Visual Studio项目类型不满足我的要求,或者只是有关该理论的博客但没有实现。因此,我实现了一个工作系统,该系统使用了将近一年,并在此处进行了说明:
http://nalgorithm.com/2015/11/09/database-versioning-part-1/
根据兴趣,会继续写更多。