MongoDB mongorestore失败:区域设置::方面::_S_create_c_区域设置名称无效

MongoDB mongorestore失败:区域设置::方面::_S_create_c_区域设置名称无效,mongodb,locale,ubuntu-12.04,mongodump,mongorestore,Mongodb,Locale,Ubuntu 12.04,Mongodump,Mongorestore,我在计算机a(ubuntu 12.04服务器)上用mongodump创建了一个转储。我将它移动到计算机B(ubuntu 12.04服务器)并键入: mongorestore-db\u name——drop db\u dump\u路径 它失败了,并报告: 连接到:127.0.0.1 在抛出“std::runtime_error”实例后终止调用 what():区域设置::方面::_S_create_c_区域设置名称无效 流产 我以前成功完成过这个手术,但这种奇怪的行为从未发生过。我需要做些什么来解决

我在计算机a(ubuntu 12.04服务器)上用mongodump创建了一个转储。我将它移动到计算机B(ubuntu 12.04服务器)并键入:

mongorestore-db\u name——drop db\u dump\u路径

它失败了,并报告:

连接到:127.0.0.1
在抛出“std::runtime_error”实例后终止调用
what():区域设置::方面::_S_create_c_区域设置名称无效
流产


我以前成功完成过这个手术,但这种奇怪的行为从未发生过。我需要做些什么来解决这个问题?

实际上它与MongoDB没有严格的关系。不知何故,计算机B上的语言定义不正确。我通过键入以下内容来修复它:

sudo locale gen en_US en_US.UTF-8
sudo locale gen it\u it\u it.UTF-8
sudo locale gen xx_xx xx_xx.UTF-8…
sudo dpkg重新配置区域设置

这些命令将生成和配置所需的区域设置。 经过这些步骤之后,mongorestore恢复了正常工作。

我的发行版“locale gen”没有安装,结果我所要做的就是设置LC_all环境变量。 所以下面的命令修复了它:

export LC_ALL="en_US.UTF-8"

希望它能帮助其他人…

在没有安装locale gen(未找到命令)的情况下,在debian 7上遇到同样的问题

我这样解决:

su
apt-get install locales
dpkg-reconfigure locales # select locales you want!
现在mongodb应该启动了


如果您使用的是Mac OSX和SSH,这可能是由错误的LC\u CTYPE发出的

$ locale 
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
取消设置错误的var

$ unset LC_CTYPE 
检查区域设置是否正常工作

$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

现在mongo也应该做得很好

要使修复永久化,您可以编辑其中一个文件:

  • sudo vim/etc/default/locale
  • sudo-vim/etc/environment
并添加行
LC\u ALL=“en\u US.UTF-8”

导出
LC\u ALL=“en\u US.UTF-8”
仅在安装了
en\u US
语言环境时有效。如果要避免安装
locales
软件包(或Debian衍生产品以外的发行版上的等效软件包),则可以使用:

export LC_ALL=C.UTF-8

这将不需要任何额外的区域设置数据。

这基本上帮助了我。但是还必须编辑
/etc/locale.gen
并启用所需的区域设置(在ArchLinux上),这也解决了我的问题。这是在Lubuntu 12.04 x86上。但为什么会发生这种情况,mongodump/restore依赖于区域语言有什么具体原因吗?@MarianTheisen这也是我的罪魁祸首,我正在重新安装Arch,在尝试运行rescuetime时出错。修复
/etc/locale.gen
并运行
locale gen
是所需的全部。这在终端会话中效果很好,但如果你想找到一个永久性的解决方案,你最好检查一下谢谢@SebastienLorber,在我的例子中,我将这一行添加到了我的~/.profile或~/.bashrc中,并且它永久地工作了,在阅读之前来到这里,设置LC_ALL是非常不受欢迎的:该死,但是这个LC_ALL设置立即解决了问题,而且不需要root权限。没关系,希望以后不会有任何黑暗虫子困扰我。就像一个符咒。非常自然和快速。@user1219736你救了我一天:p这对我有用(centos,AWS c4.8XL,帮助vivado启动修复程序)