MongoDB mongorestore失败:locale :: facet :: _ S_create_c_locale名称无效

时间:2013-09-30 17:56:30

标签: mongodb locale ubuntu-12.04 mongodump mongorestore

我在计算机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():locale :: facet :: _ S_create_c_locale名称无效
  中止

我之前成功完成了此操作,这种奇怪的行为从未发生过。我需要做些什么来解决这个问题?

6 个答案:

答案 0 :(得分:251)

在我的发行版“locale-gen”上没有安装,事实证明我所要做的就是设置LC_ALL环境变量。 所以以下命令修复了它:

export LC_ALL="en_US.UTF-8"
希望它会帮助别人......

答案 1 :(得分:49)

实际上它并不与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 :(得分:15)

导出LC_ALL="en_US.UTF-8"仅在安装了en_US语言环境时才有效。如果您想避免安装locales软件包(或其在Debian衍生产品以外的发行版上的等价物),那么您可以改为使用:

export LC_ALL=C.UTF-8

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

答案 3 :(得分:10)

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

  • sudo vim / etc / default / locale
  • sudo vim / etc / environment

添加第RewriteEngine On RewriteCond %{REMOATE_ADDR} !=123.123.123.123 RewriteCond %{REQUEST_URI} !^/folder [NC] RewriteRule .* /folder [R=302,L]

答案 4 :(得分:9)

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

我这样解决了:

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

现在mongodb应该开始。

Source

答案 5 :(得分:9)

如果您使用的是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=

取消设置错误的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也应该做得很好。