MonetDB 备份 - 方法论?

MonetDB Backups - methodology?

如果我在 RHEL 上有一个 MonetDB 数据库 运行,它在数亿行(数百 GB)的区域中有几十个(但不是数百个)table 并且我'我有兴趣为它实施一个像样的备份策略,特别是关于这样做的机制。

到目前为止,我一直在使用 bash 脚本迭代调用 msqldump,在数据库中每个 table 调用一次,并将数据通过管道传输到文件中,例如:

msqldump -u [username] -t [tablename] -d [dbname] > /path/[tablename].sql.gz

我已经设置了一个 .monetdb 文件,因此在每次调用 msqldump 时都不会提示我输入密码,因此可以调用此脚本并允许其在无人值守的情况下完成。

就我得到一组文件而言,这似乎有效,其中包含将这些 table 恢复到 MonetDB 数据库所需的所有数据和模式,但它看起来确实很粗糙(而且执行起来很费时间),所以我想知道是否有"better"方式?

例如,如果数据库内容在 msqldump 操作期间发生变化,我是否应该担心会发生什么情况?是否有更干净的 and/or 更快的方法来获取 MonetDB 数据库的完整备份,也许是通过停止 db/farm 并只复制数据文件本身,如果是这样,实现的确切方法是什么这个?是否有 people/organisations 以任何类型的大规模或企业方式使用 MonetDB?它们如何实现可能为 MSSQL 数据库或类似数据库实施的相同类型的备份策略?

我已经在网上和 Whosebug 上进行了大量搜索,但未能找到有关此主题的指导方式,所以我希望这里有人可以提供帮助。

提前致谢。

msqldump 是将干净的数据库快照放入序列化 SQL 脚本中的首选方法。不过,您可能更愿意为整个数据库只调用一次,而不是每个 table 调用一次。如果您的数据库架构随时间发生变化,这会更快但更重要的是更一致。

您也可以按照您的提示制作二进制格式的数据库物理副本。每个数据库都存储在 <dbfarm location>/<dbname> 中同名的文件夹下。这需要停止 (monetdb stop) 并锁定 (monetdb lock) 数据库以防止用户自动启动它。要恢复数据库,只需将其复制回 <dbfarm location> 并解锁 (monetdb release)。不需要进一步的数据库注册/设置。如果您想用不同的名称恢复它,只需更改其文件夹的名称即可。

序列化和二进制是您的两种策略,请考虑以下几点:

  • 序列化在各个版本中更加稳健。二进制数据库通常会自动转换为所需的版本,但前提是存储的版本不太旧。
  • 序列化更安全,因为它可以根据需要进行编辑
  • 序列化不需要停机。关于您的具体问题:不用担心转储期间的更新。转储发生在一个孤立的快照上。相反,二进制备份需要停止并锁定数据库
  • 二进制通常更快
  • 两者都不能执行增量备份

我的首选方法是假设生产数据库使用得相当频繁,这与您提出的建议相同,但是一次针对整个数据库(并将其通过管道传输到 gzip,您忘记了例子):

msqldump -u [username] -d [dbname] | gzip > /path/[databasename].sql.gz

有用的链接:

更新: 从 2020 年 6 月版 (11.37.7) 开始,“热备份”功能允许在不停止数据库的情况下拍摄二进制快照:https://www.monetdb.org/Documentation/ServerAdministration/Backup/HotBackup