MongoDB数据文件夹在不同版本的Mongo之间进行备份和还原

时间:2018-08-02 13:39:58

标签: mongodb database-backups

某些背景:我们构建并发布了Mongo应用程序,客户可以在其位置或选择的云中进行安装

我们为客户提供了一种备份和还原其数据的方法。 mongo非常庞大,因此mongodump和restore都不可行。因此,我们开始直接复制mongo数据文件夹并还原。这似乎工作正常,但是稍后在新版本中我们升级了mongo版本,如果我们让客户直接使用旧版本的data文件夹进行还原,看来这将永远无法正常工作?

我发现很少有线程会说它是否行得通,但这只是运气,尽管有很多方法可以恢复,例如旋转旧版本并升级mongo并将数据文件夹带入新版本(但这将是一个艰难的过程)< / p>

有什么方法可以保证流程看起来很顺利吗?像mongo本身可以检测到旧数据并进行升级还是通过放置一些兼容性标志?

2 个答案:

答案 0 :(得分:0)

我将从一个假设开始,因为您说最近您升级了MongoDB 3.6版(或4.0版)。

哪个很棒,但是没有设置some admin flags,该版本与3.4不兼容。 Here are the compatibility changes in detail

现在在这种情况下要做的是您必须进行设置,以使数据库与3.4兼容:

testing(){
    let testarr = this.state.songList;
    let testsongs = this.state.songs;

    for(var i = 0; i < testsongs.length; i++){
      for(var j = 0; j < testarr.length; j++){
        if(testsongs[i] === testarr[j].songname){
          testarr[j].count += 1;
          testarr.push({
            songname: 'hej',
            count: 1
          });
        }
      }
    }

    clearInterval(this.interval);
    console.log("songlist ");
    console.log(this.state.songList);
    console.log("songs " + this.state.songs);
    console.log("tessong " + testsongs);
    console.log("testarr ");
    console.log(testarr);
}

这将使其与以前的版本一起使用,但以不使用3.6功能为代价。

您可以看到自己正在使用db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

featureCompatibilityVersion

如果这有帮助,并且您现在已完成所需的更改,则可以通过这次用`db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )` 值执行相同的3.6命令来撤消setFeatureCompatibilityVersion兼容性。现在,此功能已经过测试,可以在3.4至3.6之间正常运行,反之亦然。如果您的版本较低,仍然值得尝试:)。

从文档中了解在3.6上完成后的操作:

  

如果在MongoDB 3.6部署上进行设​​置,则禁用3.6功能   持久存储与MongoDB 3.4不兼容的数据。

总而言之,我假设我们正在谈论3.6到3.4,但是对于4.0到3.6等仍然适用。您仍然必须尝试一下,看看它是否对您有任何好处。希望这会有所帮助。

答案 1 :(得分:0)

注意事项

将mongodb从一个版本升级到另一个版本必须遵循以下直接链接到数据兼容性的checks

  • 通过复制文件将数据文件从版本A恢复到版本B时,数据是否兼容?
  • 有时升级涉及change in the index或设置协议版本,需要手动验证才能解决冲突。
  • 功能兼容版本:当降级的可能性最小时,某些较新的版本需要设置setFeatureCompatibilityVersion标志以利用向后兼容功能。
  • 从一个版本升级到另一个版本之前,是否需要任何中间版本?例如,要将mongodb版本从2.6升级到3.2,并且需要将intermediate升级到3.0,
  • db.upgradeCheck():此工具非常方便,可以帮助您了解支票。

方法

考虑到您的用例,您的用户可以控制mongodb部署,您可以:

  • 当新版本可用时(因为升级不太频繁),通过将文件从一个版本复制到另一个版本来评估mongodb数据兼容性。
  • 评估在index updates之类的情况下是否需要任何手动操作
  • 生成一个兼容性矩阵,该矩阵可指导您的用户从一个版本到另一个版本的数据兼容性
  • 此外,如果需要设置任何标志以将数据从一个版本还原到另一个版本,则可以创建升级文档以确保无忧的数据还原