首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MonetDB备份-方法论?

MonetDB备份-方法论?
EN

Stack Overflow用户
提问于 2015-12-11 15:29:42
回答 1查看 530关注 0票数 0

如果我有一个运行在RHEL上的MonetDB数据库,它大约有数亿行(数百GB),有几十个(但不是几百个)表,而且我有兴趣为它实现一个体面的备份策略,特别是在这样做的机制方面。

到目前为止,我一直在使用bash脚本迭代地调用msqldump,每次在数据库中每个表调用一次,并将数据输出到如下文件:

代码语言:javascript
复制
msqldump -u [username] -t [tablename] -d [dbname] > /path/[tablename].sql.gz

我已经设置了一个.monetdb文件,所以在执行对msqldump的每个调用时,不会提示我输入密码,这样就可以调用这个脚本并允许它在无人值守的情况下完成。

在我获得一组包含将这些表还原到MonetDB数据库所需的所有数据和模式的文件的范围内,这似乎是可行的,但是执行起来确实很粗糙(而且很费时),所以我想知道是否有一种“更好”的方法?

例如,当数据库的内容在msqldump操作期间发生更改时,我是否应该担心发生了什么?是否有一种更干净和/或更快的方法来获得MonetDB数据库的完整备份,也许可以通过停止db/场内并仅获取数据文件的副本,如果是的话,实现这一目标的确切方法是什么?有没有人/组织以任何大规模或企业级的方式使用MonetDB,他们如何实现同样的备份策略,而这种备份策略可能用于MSSQL数据库或类似的数据库?

我在网上搜索了很多,在StackOverflow上也找过很多,也没能找到很多关于这个主题的指导,所以我希望这里的人能帮上忙。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-25 18:52:38

msqldump是将干净的数据库快照放入序列化的SQL脚本中的首选方法。但是,您可能更倾向于只对整个数据库调用一次,而不是对每个表调用一次。如果数据库模式随着时间的推移发生变化,这将更快,但更重要的是更加一致。

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

将序列化和二进制作为两种策略,请考虑以下几点:

  • 跨版本的序列化更健壮。二进制DB通常会自动转换为所需的版本,但只有在存储版本不太旧的情况下才会自动转换。
  • 序列化更安全,因为它可以在需要时进行编辑。
  • 序列化不需要停机时间。关于你的具体问题:不要担心转储过程中的更新。转储发生在一个独立的快照上。相反,二进制备份要求停止并锁定数据库。
  • 二进制通常更快
  • 两者都不能执行增量备份。

我喜欢的方法(假设生产数据库使用得相当频繁)与您建议的方法相同,但对整个数据库而言(并将其输送到gzip,您在示例中忘记了这一点):

代码语言:javascript
复制
msqldump -u [username] -d [dbname] | gzip > /path/[databasename].sql.gz

有用的链接:

更新:从Jun2020发布开始的 (11.37.7)一个“热备份”功能允许在不停止数据库的情况下获取二进制快照:https://www.monetdb.org/Documentation/ServerAdministration/Backup/HotBackup

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34227003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档