【问题标题】:How to keep remote MariaDB schema synced with local如何保持远程 MariaDB 架构与本地同步
【发布时间】:2020-08-21 21:42:14
【问题描述】:

我正在为我的网站开发一个 MariaDB 数据库,它每天都会看到列名、数据类型、触发器、事件和例程的许多变化。

如何保持整个架构同步,以允许和平部署新网站代码?

当然,保持远程数据完整(仅同步架构)并最好将停机时间降至最低是至关重要的。

【问题讨论】:

    标签: database synchronization mariadb


    【解决方案1】:

    使用复制。

    请注意,复制TRIGGERs 可能有害——主节点运行触发器,该触发器插入一个新行。如果 Replica 也运行触发器并创建另一行,那么现在您在 Replica 上有一个额外的行(或错误)。

    【讨论】:

      【解决方案2】:

      如果您的 Web 应用程序代码需要更改数据库,则需要一个库来为您的数据库编写迁移。部署新网站代码时,必须运行迁移代码:部署迁移代码,执行迁移。

      例如,如果您已经在 php 中编码,则可以使用 phinx 编写迁移,但是有 other options,有些可能链接到您的 framework, doctrine for instance

      您可以将迁移代码与您的网站代码一起发布,部署如下所示:部署代码、停止服务器、执行迁移、重新启动服务器。

      如果您不想停机,那么您的网站代码必须能够在两个版本的数据库上运行:迁移之前和之后(您可以使用数据库检查每个功能的数据库版本以检查当前版本)。

      一些ALTER 仍会锁定数据库以进行一些更改。您可以使用一些工具来避免这种情况:

      A nice presentation about ONLINE DDL, pt-online-schema-change and gh-ost

      如果你有一个 Web 服务器集群和一个数据库集群,事情可能会更复杂,而 gh-ost 似乎是我目前看到的唯一选择,但如果你问这个问题,我假设您有一台 Web 服务器和一个数据库,只需编写一些脚本并跟踪您的数据库版本(以避免运行两次相同的迁移)就可以了。

      您应该在将迁移代码部署到生产服务器之前对其进行测试,以避免出现意外行为,就像您编写的每个代码一样。

      【讨论】:

        猜你喜欢
        • 2012-03-14
        • 2021-01-10
        • 2014-03-21
        • 1970-01-01
        • 2018-09-09
        • 2013-05-11
        • 1970-01-01
        • 1970-01-01
        • 2010-11-30
        相关资源
        最近更新 更多