ChatGPT解决这个技术问题 Extra ChatGPT

MongoDB mongorestore 失败:locale::facet::_S_create_c_locale 名称无效

我在计算机 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 name not valid Aborted

我之前已经成功完成过这个操作,从来没有出现过这种奇怪的行为。我需要做什么来解决这个问题?


k
keisar

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

export LC_ALL="en_US.UTF-8"

希望它会帮助别人......


这在终端会话中运行良好,但如果您寻找永久解决方案,您宁愿检查 stackoverflow.com/a/32762296/82609
谢谢@SebastienLorber,在我的情况下,我将此行添加到我的 ~/.profile 或 ~/.bashrc 中并且它永久有效
嗯,在阅读强烈建议不要设置 LC_ALL 之前来到这里:wiki.debian.org/Locale
该死的,但是这个 LC_ALL 设置立即解决了问题,无需 root 权限。没关系,希望以后不会有任何黑暗虫子困扰我。
L
Luca Anceschi

实际上它与 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 恢复了正常工作。


这基本上帮助了我。但还必须编辑 /etc/locale.gen 并启用所需的语言环境(在 arch linux 上)
这也为我解决了这个问题。这是在 Lubuntu 12.04 x86 上。
但是为什么会发生这种情况,mongodump / restore 依赖于语言环境有什么具体原因吗?
@MarianTheisen 这也是我的罪魁祸首,我正在重新安装 Arch 并在尝试运行救援时间时出错。只需修复 /etc/locale.gen 并运行 locale-gen
j
josch

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

export LC_ALL=C.UTF-8

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


A
Alex

如果您使用的是 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
S
Sebastien Lorber

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

须藤 vim /etc/default/locale

须藤 vim /etc/环境

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


这对我有用(centos,AWS c4.8xlarge,帮助 vivado 启动修复)
D
Daniele Vrut

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

我这样解决了:

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

现在 mongodb 应该启动了。

Source