ArangoDB升级丢失数据
ArangoDB upgrade loses data
我觉得我在 ArangoDB 升级过程中做错了什么。升级的最终结果是我的数据库存在,我的用户存在,我的集合存在,但我的集合中没有文档。显然这是一个问题。我遇到过两次这个问题,在 Windows 中从 2.3.1 -> 2.3.4 和 2.3.4 -> 2.4 升级。我在这两种情况下都使用了相同的程序:
- 停止了 ArangoDB 服务
- 从 Program Files 备份我的 ArangoDB 目录
- 安装新版ArangoDB
- 将数据库文件夹的内容从旧的ArangoDB目录复制到新的目录,不包括系统数据库(我觉得这是我出错的地方......)
- 然后我打开 bin 目录的命令提示符和 运行 arangod --upgrade
升级输出对我来说似乎是正确的,它找到旧数据库并升级它们,它们与集合一起存在的事实证明了这一点。但是如前所述,这些集合都是空的。值得庆幸的是,这是在开发环境中,但我担心升级我的生产环境。我做错了什么还是这是一个错误?
我尝试使用 x64 A运行go 包
通过步骤 2.3.5 到 2.4.1 重现此问题
我做了什么:
首先,运行来自 shell 的一个运行god 在程序目录之外有自己的数据库目录:
bin\arangod.exe c:\ee --console
创建了一个 collection,插入了数据(就像 js/server/tests/aql-optimizer-rule-use-index-for-sort.js setUp() 函数那样)
然后安装了新版本,运行
bin\arangod.exe c:\ee --upgrade
然后
bin\arangod.exe c:\ee --console
AQL_EXECUTE("for u in UnitTestsAqlOptimizeruse_index_for_sort_XX return u")
它给了我所有 100 个文件,我将它们放入 collection。
接下来我尝试使用 运行ing 运行god 服务,var\lib 文件夹位于 Porgram Files 文件夹中。我使用 运行gosh 连接,再次将文档插入 collection,用
验证
db._query("for u in UnitTestsAqlOptimizeruse_index_for_sort_XX return u").toArray();
所有数据都在那里。
然后停了服务,安装了2.4.1,停了服务,用explorer把A运行goDB 2.4.1\var\lib[=37复制过来=] 目录,运行 a运行god --upgrade 成功重启服务,并使用 运行gosh 成功重新验证 collection 及其文档。
因此,由于这看起来与您所做的相似,您能否尝试使用最少的数据集重现此内容并将您的 var\lib 目录发送给我们?
事实证明问题与复制有关。我将从生产数据库复制数据以在开发期间使用。然后,当我升级或停止开发数据库上的 Arango 服务时,所有文档都会消失。但是当我使用 arango 备份和恢复来复制生产数据库数据时,一切都按预期进行。最新版本的Arango应该已经解决了这个问题,但是我还没来得及测试。
我觉得我在 ArangoDB 升级过程中做错了什么。升级的最终结果是我的数据库存在,我的用户存在,我的集合存在,但我的集合中没有文档。显然这是一个问题。我遇到过两次这个问题,在 Windows 中从 2.3.1 -> 2.3.4 和 2.3.4 -> 2.4 升级。我在这两种情况下都使用了相同的程序:
- 停止了 ArangoDB 服务
- 从 Program Files 备份我的 ArangoDB 目录
- 安装新版ArangoDB
- 将数据库文件夹的内容从旧的ArangoDB目录复制到新的目录,不包括系统数据库(我觉得这是我出错的地方......)
- 然后我打开 bin 目录的命令提示符和 运行 arangod --upgrade
升级输出对我来说似乎是正确的,它找到旧数据库并升级它们,它们与集合一起存在的事实证明了这一点。但是如前所述,这些集合都是空的。值得庆幸的是,这是在开发环境中,但我担心升级我的生产环境。我做错了什么还是这是一个错误?
我尝试使用 x64 A运行go 包
通过步骤 2.3.5 到 2.4.1 重现此问题我做了什么:
首先,运行来自 shell 的一个运行god 在程序目录之外有自己的数据库目录:
bin\arangod.exe c:\ee --console
创建了一个 collection,插入了数据(就像 js/server/tests/aql-optimizer-rule-use-index-for-sort.js setUp() 函数那样) 然后安装了新版本,运行
bin\arangod.exe c:\ee --upgrade
然后
bin\arangod.exe c:\ee --console
AQL_EXECUTE("for u in UnitTestsAqlOptimizeruse_index_for_sort_XX return u")
它给了我所有 100 个文件,我将它们放入 collection。
接下来我尝试使用 运行ing 运行god 服务,var\lib 文件夹位于 Porgram Files 文件夹中。我使用 运行gosh 连接,再次将文档插入 collection,用
验证db._query("for u in UnitTestsAqlOptimizeruse_index_for_sort_XX return u").toArray();
所有数据都在那里。
然后停了服务,安装了2.4.1,停了服务,用explorer把A运行goDB 2.4.1\var\lib[=37复制过来=] 目录,运行 a运行god --upgrade 成功重启服务,并使用 运行gosh 成功重新验证 collection 及其文档。
因此,由于这看起来与您所做的相似,您能否尝试使用最少的数据集重现此内容并将您的 var\lib 目录发送给我们?
事实证明问题与复制有关。我将从生产数据库复制数据以在开发期间使用。然后,当我升级或停止开发数据库上的 Arango 服务时,所有文档都会消失。但是当我使用 arango 备份和恢复来复制生产数据库数据时,一切都按预期进行。最新版本的Arango应该已经解决了这个问题,但是我还没来得及测试。