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
有用的链接:
- https://www.monetdb.org/Documentation/UserGuide/DumpRestore
- https://www.monetdb.org/Documentation/msqldump-man-page
- https://www.monetdb.org/Documentation/monetdbd-man-page
- https://www.monetdb.org/Documentation/monetdb-man-page
更新: 从 2020 年 6 月版 (11.37.7) 开始,“热备份”功能允许在不停止数据库的情况下拍摄二进制快照:https://www.monetdb.org/Documentation/ServerAdministration/Backup/HotBackup
如果我在 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
有用的链接:
- https://www.monetdb.org/Documentation/UserGuide/DumpRestore
- https://www.monetdb.org/Documentation/msqldump-man-page
- https://www.monetdb.org/Documentation/monetdbd-man-page
- https://www.monetdb.org/Documentation/monetdb-man-page
更新: 从 2020 年 6 月版 (11.37.7) 开始,“热备份”功能允许在不停止数据库的情况下拍摄二进制快照:https://www.monetdb.org/Documentation/ServerAdministration/Backup/HotBackup