不幸的是,正如文档所述,虽然mysqldump
会转储这些表,但不包括不可见的时间列 - 该工具只会备份表的当前状态。
幸运的是,这里有几个选项;
您可以使用mariadb-enterprise-backup
or mariabackup
which 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 备份结合使用。那么你会做什么来解决它;
- 使用上述任何一种方法备份数据库。
- 在这些备份文件上使用 rdiff-backup ( https://www.nongnu.org/rdiff-backup/ ),每天运行一次。
这将允许您获取数据库如何查看您选择的任何给定日期的精确副本。rdiff-backup 还完全支持 ssh,允许您执行以下操作,
rdiff-backup -r 10D host.net::/var/lib/mariadb /my/tmp/mariadb
这将获取 10 天前的这些备份文件的副本。