MongoDB mongorestore失败:语言环境:: facet :: __ S_create_c_locale名称无效


102

我在计算机A(ubuntu 12.04服务器)上使用mongodump创建了一个转储。我将其移至计算机B(ubuntu 12.04服务器)并输入:

mongorestore -db db_name --drop db_dump_path

它失败了,它报告:

连接到:127.0.0.1
引发'std :: runtime_error'what
()实例之后调用终止终止what():locale :: facet :: __ S_create_c_locale名称无效
已终止

我之前已经成功完成了此操作,而且从未发生过这种奇怪的行为。我需要怎么做才能解决此问题?

Answers:


256

在我的发行版中,未安装“ locale-gen”,事实证明,我要做的就是设置LC_ALL环境变量。因此,以下命令对其进行了修复:

export LC_ALL="en_US.UTF-8"

希望它将帮助别人...


3
这在终端会话中可以正常工作,但是如果您寻找永久解决方案,则宁愿查看stackoverflow.com/a/32762296/82609
Sebastien Lorber

5
感谢@SebastienLorber,就我而言,我将此行添加到〜/ .profile或〜/ .bashrc中,并且该行永久有效
keisar 2015年

嗯,来到这里之前,强烈建议不要设置LC_ALL:wiki.debian.org/Locale
dzuremar

该死的,但是这个LC_ALL设置立即并在那里解决了问题,不需要root特权。没关系,希望以后不会有任何黑臭虫困扰我。
dzuremar

52

实际上,它与MongoDB并不严格相关。由于某种原因,计算机B上的语言未正确定义。我设法通过输入来修复它:

sudo locale-gen en_US en_US.UTF-8
sudo locale-gen it_IT it_IT.UTF-8
sudo locale-gen xx_xx xx_XX.UTF-8 ...
sudo dpkg-reconfigure locales

这些命令将生成并配置所需的语言环境。经过这些步骤,mongorestore恢复了正常工作。


2
这基本上帮助了我。但还必须编辑/etc/locale.gen并启用所需的语言环境(在linux上)
Marian Theisen 2014年

这也为我解决了问题。这是在Lubuntu 12.04 x86上。
Amos Shapira 2014年

1
但是为什么会发生这种情况,mongodump / restore依赖于语言环境是否有任何特定原因?
野兽2014年

@MarianTheisen那也是我的罪魁祸首,我正在重新安装Arch,并在尝试运行救援时间时遇到错误。只需修复/etc/locale.gen和运行locale-gen
erb

17

LC_ALL="en_US.UTF-8"仅在en_US安装了语言环境后才能进行导出。如果要避免安装该locales软件包(或与Debian衍生产品不同的发行版中的等效软件包),则可以改用:

export LC_ALL=C.UTF-8

不需要任何额外的语言环境数据。


10

如果您使用的是Mac OSX和SSH,则可能由错误的LC_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=

取消设置错误的变量。

$ 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也应该做得很好。


奇迹般有效。非常原生且快速。
昂勒

@ user1219736您保存了我的一天:P
KayV '16

10

要使此修复程序永久生效,您可以编辑以下文件之一:

  • 须藤vim / etc / default / locale
  • 须藤vim / etc / environment

并添加行 LC_ALL="en_US.UTF-8"


这对我有用(centos,AWS c4.8xlarge,帮助修复了vivado)
Sergiu

9

在没有安装locale-gen(找不到命令)的debian 7上遇到了同样的问题。

我这样解决了:

su
apt-get install locales
dpkg-reconfigure locales # select locales you want!

现在,mongodb应该启动了。

资源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.