9

通常,我对Temporal Database功能感到兴奋。

但是,数据库导出和还原不支持 mysqldump。

我在文档(链接到上面)中找不到任何资源来指示哪些备份和还原方法可以安全地用于此类数据库。谷歌搜索似乎没有帮助。

有人对在生产环境中使用这些 MariaDB 时态数据库有任何见解吗?或者更具体地说,在开发环境中使用它们,然后将数据库转移到生产环境并仍然保持数据库的历史完整?

我理解这是一个开发运维问题,但如何使用和围绕这个新功能似乎是一个非常核心的问题。是否有人对移动这些数据库并在生产中依赖该过程有见解?只是想知道这项技术有多成熟,因为文档中没有涵盖这个问题(这似乎很重要)。

4

1 回答 1

5

不幸的是,正如文档所述,虽然mysqldump会转储这些表,但不包括不可见的时间列 - 该工具只会备份表的当前状态。

幸运的是,这里有几个选项;

您可以使用mariadb-enterprise-backupor mariabackupwhich should support the new format of the temporal data 并正确备份(这些工具进行二进制备份而不是表转储);

https://mariadb.com/docs/usage/mariadb-enterprise-backup/#mariadb-enterprise-backup https://mariadb.com/kb/en/library/full-backup-and-restore-with-mariabackup/

不幸的是,我们发现该工具有些不可靠——尤其是在使用 MyRocks 存储引擎时。但是,它在不断改进。

为了解决这个问题,在我们的生产服务器中,我们利用了从属复制——它在我们所有的节点上保持时间数据(和其他所有内容)完好无损。然后,我们通过关闭从节点并直接复制数据库数据文件来进行二级备份。有关如何设置复制的更多信息,请参阅文档;

https://mariadb.com/kb/en/library/setting-up-replication/

因此,您可能会设置具有复制功能的数据库的开发副本,然后从那里复制数据。但是,在您的情况下,mariabackup也可以解决问题。

无论您如何操作,在设置复制或在系统之间移动这些文件时都要注意系统时钟。当时钟不同步(或者系统位于不同的时区)时,您可能会遇到一些问题。还有一些关于这个主题的官方文档(和缓解措施);

https://mariadb.com/kb/en/library/temporal-data-tables/#use-in-replication-and-binary-logs

查看您的附加评论 - 我不知道有任何方法可以直接从 MariaDB 本身获取数据库的完整图像,因为它查看给定日期(包括时间数据)。我不认为这些信息的存储方式使这成为可能。但是,即使是这样,也有一种解决方法。您可以将上述方法与增量 rdiff 备份结合使用。那么你会做什么来解决它;

  1. 使用上述任何一种方法备份数据库。
  2. 在这些备份文件上使用 rdiff-backup ( https://www.nongnu.org/rdiff-backup/ ),每天运行一次。

这将允许您获取数据库如何查看您选择的任何给定日期的精确副本。rdiff-backup 还完全支持 ssh,允许您执行以下操作,

rdiff-backup -r 10D host.net::/var/lib/mariadb /my/tmp/mariadb

这将获取 10 天前的这些备份文件的副本。

于 2019-07-24T15:06:33.333 回答