你是如何准备你的SQL差分文件的?你是手动保存每个改变模式的SQL到一个差分文件夹中,还是有一些自动化的差分过程?
我对将数据库模式版本化的惯例很感兴趣。也许有一个预提交钩子来进行模式差异比较?
此外,除DbDeploy之外,还有什么差分差异选项可用呢?
编辑:看到答案后,我想澄清一下,我熟悉使用差分文件运行数据库迁移的标准方案。我的问题是关于自动生成差分文件,最好是自动化的。
另外,如果涉及到PHP和MySQL,则与Ruby解决方案无关。
你是如何准备你的SQL差分文件的?你是手动保存每个改变模式的SQL到一个差分文件夹中,还是有一些自动化的差分过程?
我对将数据库模式版本化的惯例很感兴趣。也许有一个预提交钩子来进行模式差异比较?
此外,除DbDeploy之外,还有什么差分差异选项可用呢?
编辑:看到答案后,我想澄清一下,我熟悉使用差分文件运行数据库迁移的标准方案。我的问题是关于自动生成差分文件,最好是自动化的。
另外,如果涉及到PHP和MySQL,则与Ruby解决方案无关。
请参阅:
以及杰夫的文章
我理解您的困境,并希望有更好的答案。可能以下内容更接近您所需。
通常,我认为在这个领域没有足够的、被广泛接受的解决方案,我会自己动手解决。
您没有提到使用哪种关系型数据库管理系统,但如果是MS SQL Server,Red-Gate的SQL Compare在我们创建对象创建脚本之间的差异方面非常重要。
当我进入一个新的数据库时:
首先,我会检查其结构:
在第二步中,我使用
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
Thanks to stackoverflow users I could write this quick script to find structure differences.
src : https://dev59.com/43VC5IYBdhLWcg3wpS3g#8718572 & https://dev59.com/vWUo5IYBdhLWcg3w7jEq#26328331
mysqldiff
逐表检查数据。虽然有点古老,但基于information_schema
数据的php循环可以确保工作顺利。initial version : 1.0.0
^ ^ ^
| | |
structure change: - | |
datas added: -------- |
datas updated: --------
我还开发了一套PHP脚本集,让开发人员可以将他们的deltasql脚本提交到一个中央代码库中。
在一个名为TBSYNCHRONIZE的数据库表中,我存储了最新执行脚本的版本号,因此我可以使用Web界面或为Eclipse专门开发的客户端轻松升级任何数据库。
Web界面允许管理多个项目。它还支持数据库“分支”。
您可以通过http://www.gpu-grid.net/deltasql(如果您以密码testdbsync登录管理员帐户)测试该应用程序。 该应用程序是开源的,可在此处下载: http://sourceforge.net/projects/deltasql
deltasql已经在瑞士和印度投入生产,并在日本很受欢迎。