【问题标题】:Using version control (Git) on a MySQL database在 MySQL 数据库上使用版本控制 (Git)
【发布时间】:2012-11-28 15:35:55
【问题描述】:

我是一名 WordPress 设计师/开发人员,他越来越多地参与使用版本控制,尤其是 Git,尽管我确实在某些项目中使用 SVN。我目前正在将 Beanstalk 用于我的远程仓库。

将所有 WordPress 文件添加到我的 repo 没有问题,如果我想知道我可以 .gitignore wp-config 文件,但由于我是目前唯一的开发人员,而且这些项目是闭源的,这真的没什么意义。

与任何 CMS 一样,WordPress 严重依赖数据库来保存文本内容,以及许多设置,具体取决于我使用的特定插件/主题配置。我想知道在数据库上使用版本控制的最佳方式是什么,如果可能的话。我想我可以做一个 SQL 转储,尽管我的 MySQL 服务器在 Windows 上运行(读作:我不知道该怎么做),然后将 SQL 转储添加到我的存储库中。但是当我推送一些内容时,这会带来巨大的安全威胁。

这样做有公认的做法吗?

【问题讨论】:

  • 我转储数据库并将其检入版本控制。但我不会在 Wordpress 项目上推送到服务器(git 在共享主机上并不总是可用)。所以通常我通过 FTP 手动上传,虽然很糟糕。有兴趣听听一些使用 git 部署时的正确做法。
  • 另外,您可以将数据库签入develop 分支,并使用技术here 排除数据库合并到master。然后只从master 部署。从理论上讲,这应该可行。
  • 我在 Google 上快速搜索了“Wordpress 版本控制”,并找到了这个 Wordpress 插件列表:wordpress.org/extend/plugins/tags/version-control它们中的任何一个有用吗?

标签: mysql git version-control


【解决方案1】:

您可以在 git 存储库中备份您的数据库。当然,如果您将数据以二进制形式放入 git,您将失去 git 使用差异(更改)有效存储数据的所有能力。所以第一个最佳实践是:以文本序列化格式存储数据。

mysqldump 是一个合适的程序来帮助你做到这一点。虽然它并不完美。如果有任何东西扰乱了项目的序列化顺序(例如,由于创建新表等),那么人为的中断将进入差异。这会降低存储效率。您可以编写一个自定义序列化程序来仅序列化更改 - 但是您正在做 git 已经擅长的艰苦工作。只需使用 sql 转储即可。

话虽如此,当开发人员谈论将数据库放入 git 时,您想要做的并不是他们通常的意思。例如,如果您阅读@eggyal (link to codinghorror) 发布的链接,您将看到实际放置在 git 中的是生成初始数据库所需的脚本。可能还有其他脚本,例如用干净状态填充数据库数据或用测试数据填充它的脚本。所有这些 sql 脚本都是文本文件,并且与您从 mysqldump 获得的 sql 转储格式几乎相同。因此,您也没有理由不能对您的日常数据进行这种处理。

【讨论】:

  • 对于大多数企业应用程序,只需将生成数据库所需的脚本置于版本控制之下即可。但是对于像 WordPress 这样的内容管理系统,数据库中的很多东西实际上是代码和配置,而不是最终用户数据。代码和配置需要受版本控制,即使它们作为数据存储在 SQL 表的行中。 WordPress 对您来说并不容易。
  • @Catcall 我同意。当我说某些 sql 脚本可能会以干净的初始状态填充数据库时,这就是我所说的。如果您想根据一些预先配置的状态快速部署几个 wordpress 站点,所描述的策略将非常有效,例如具有所需插件的首选初始配置等。
【解决方案2】:

MySQL 和 MongoDB 等版本控制数据库可用的软件并不多。

但一个正在开发中,测试版即将推出。查看Klonio - Version Control for databases

【讨论】:

    【解决方案3】:

    文章How to Sync A Local & Remote WordPress Blog Using Version Control 提供了有关如何使用 Mercurial 在 WordPress 博客的两个实例(开发、生产)之间自动同步的建议。提到对于这种情况,Git 和 Mercurial 非常相似。

    第 4 步(同步数据库)在这里很有趣。

    数据库内容将被导出到一个由修订控制跟踪的文件。每次我们拉取更改时,数据库内容都会被此文件替换,从而使我们的数据库保持最新。

    然后,它详细说明了冲突和工作的脚本部分。

    有一个version control tutorial in Mercurial,如果你不熟悉的话。

    【讨论】:

      【解决方案4】:

      如果您只对版本控制下的架构更改感兴趣,有一个不错的东西SqlRog。它将架构提取到可以放在 git 下的项目文件中。

      【讨论】:

        【解决方案5】:

        请注意,Wordpress 将所有新闻提要内容存储在数据库中,因此即使您不进行任何更改,也会有很多更改的内容。

        【讨论】:

        • 自动提交怎么样?
        猜你喜欢
        • 2012-07-12
        • 1970-01-01
        • 2012-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-04
        • 1970-01-01
        • 2023-03-24
        相关资源
        最近更新 更多