总的来说,我对时态数据库特性感到兴奋。
但是,数据库导出和还原不支持mysqldump。
我在文档中找不到任何资源(链接到上面),说明哪些备份和恢复方法对这种类型的数据库是安全的。谷歌搜索似乎没有帮助。
有人对在生产环境中使用这些MariaDB时态数据库有什么见解吗?或者更具体地说,在开发环境中使用它们,然后将数据库转移到生产环境并仍然保持数据库历史的完整性?
我理解这是一个开发-运营问题,但它似乎是一个非常核心的问题,即如何使用和围绕这个新特性工作。有人对移动这些数据库并在生产中依赖该过程有什么见解吗?只是想知道这项技术有多成熟,因为这个问题(似乎是非常核心的)没有在文档中涉及。
2条答案
按热度按时间bn31dyow1#
不幸的是,正如文档所述,虽然
mysqldump
将转储这些表,但不包括不可见的时态列-该工具将只备份表的当前状态。幸运的是,这里有两个选项;
您可以使用
mariadb-enterprise-backup
或mariabackup
,它们应该支持临时数据的新格式并正确地备份它(这些工具执行二进制备份,而不是表转储);https://mariadb.com/docs/usage/mariadb-enterprise-backup/#mariadb-enterprise-backup 例如
不幸的是,我们发现这个工具有些不可靠--尤其是在使用MyRocks存储引擎的时候。然而,它在不断改进。
为了解决这个问题,在我们的生产服务器中,我们利用了从复制--它使所有节点上的临时数据(以及其他所有数据)保持完整。然后,我们通过关闭从节点并直接复制数据库数据文件来进行辅助备份。有关如何设置复制的更多信息,请参阅文档;
https://mariadb.com/kb/en/library/setting-up-replication/
因此,您可以设置带有复制功能的数据库的dev-copy,然后从那里复制数据,但是,在您的情况下,
mariabackup
也可以实现这一点。不管你怎么做,当设置复制或者在系统之间移动这些文件时,要注意系统时钟。当时钟不同步时(或者如果系统在不同的时区),你可能会遇到一些问题。也有一些关于这个主题的官方文档(和缓解措施);
https://mariadb.com/kb/en/library/temporal-data-tables/#use-in-replication-and-binary-logs
看看你的其他评论-我不知道有任何方法来获得一个数据库的完整图像,因为它在一个给定的日期看(包括时态数据),直接从MariaDB本身。我不认为这些信息是以一种使这成为可能的方式存储的。然而,即使这样也有一个变通方法。2你可以将上述方法与增量rdiff备份结合使用。那么你要解决这个问题的方法就是
1.使用上述任一方法备份数据库。
1.对这些备份文件使用rdiff-backup(https://www.nongnu.org/rdiff-backup/),每天运行一次。
这将允许您获取数据库在您选择的任何给定日期的精确副本。rdiff-backup还完全支持ssh,允许您执行以下操作:
rdiff-backup -r 10D host.net::/var/lib/mariadb /my/tmp/mariadb
这将获取这些备份文件的副本,因为他们看起来10天前。
yhxst69z2#
有关未来规划,请参见https://mariadb.com/kb/en/system-versioned-tables/#limitations:
在MariaDB 10.11之前,mariadb-dump不从版本化表读取历史行,因此不会备份历史数据。此外,无法恢复时间戳,因为它们不能由a insert/a用户定义。在MariaDB 10.11中,使用-H或--dump-history选项来包括历史。
10.11在撰写此答案时仍在开发中。