如果我有一个运行在RHEL上的MonetDB数据库,它大约有数亿行(数百GB),有几十个(但不是几百个)表,而且我有兴趣为它实现一个体面的备份策略,特别是在这样做的机制方面。
到目前为止,我一直在使用bash脚本迭代地调用msqldump,每次在数据库中每个表调用一次,并将数据输出到如下文件:
msqldump -u [username] -t [tablename] -d [dbname] > /path/[tablename].sql.gz我已经设置了一个.monetdb文件,所以在执行对msqldump的每个调用时,不会提示我输入密码,这样就可以调用这个脚本并允许它在无人值守的情况下完成。
在我获得一组包含将这些表还原到MonetDB数据库所需的所有数据和模式的文件的范围内,这似乎是可行的,但是执行起来确实很粗糙(而且很费时),所以我想知道是否有一种“更好”的方法?
例如,当数据库的内容在msqldump操作期间发生更改时,我是否应该担心发生了什么?是否有一种更干净和/或更快的方法来获得MonetDB数据库的完整备份,也许可以通过停止db/场内并仅获取数据文件的副本,如果是的话,实现这一目标的确切方法是什么?有没有人/组织以任何大规模或企业级的方式使用MonetDB,他们如何实现同样的备份策略,而这种备份策略可能用于MSSQL数据库或类似的数据库?
我在网上搜索了很多,在StackOverflow上也找过很多,也没能找到很多关于这个主题的指导,所以我希望这里的人能帮上忙。
提前谢谢。
发布于 2015-12-25 18:52:38
msqldump是将干净的数据库快照放入序列化的SQL脚本中的首选方法。但是,您可能更倾向于只对整个数据库调用一次,而不是对每个表调用一次。如果数据库模式随着时间的推移发生变化,这将更快,但更重要的是更加一致。
您还可以按您的提示,以二进制格式制作数据库的物理副本。每个数据库都存储在同名的文件夹下,存储在<dbfarm location>/<dbname>中。这需要停止数据库(monetdb stop)和锁定(monetdb lock),以防止用户自动启动它。要还原数据库,只需将其复制回<dbfarm location>并解锁它(monetdb release)即可。不需要进一步的数据库注册/安装。如果要用不同的名称还原它,只需更改其文件夹的名称即可。
将序列化和二进制作为两种策略,请考虑以下几点:
我喜欢的方法(假设生产数据库使用得相当频繁)与您建议的方法相同,但对整个数据库而言(并将其输送到gzip,您在示例中忘记了这一点):
msqldump -u [username] -d [dbname] | gzip > /path/[databasename].sql.gz有用的链接:
更新:从Jun2020发布开始的 (11.37.7)一个“热备份”功能允许在不停止数据库的情况下获取二进制快照:https://www.monetdb.org/Documentation/ServerAdministration/Backup/HotBackup
https://stackoverflow.com/questions/34227003
复制相似问题