103

I created a dump with mongodump on computer A (ubuntu 12.04 server). I moved it to computer B (ubuntu 12.04 server) and typed:

mongorestore -db db_name --drop db_dump_path

It failed and it reported:

connected to: 127.0.0.1
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Aborted

I've successfully accomplished this operation before and this strange behavior has never occurred. What do I need to do to fix this?

Raedwald
  • 46,613
  • 43
  • 151
  • 237
Luca Anceschi
  • 2,257
  • 3
  • 19
  • 24

6 Answers6

259

On my distro "locale-gen" was not installed and it turned out all I had to do is set the LC_ALL environment variable. so the following command fixed it:

export LC_ALL="en_US.UTF-8"

hopefully it will help someone else...

keisar
  • 5,266
  • 5
  • 28
  • 28
  • 3
    This works fine in a terminal session, but if you look for a permanent solution you'd rather check http://stackoverflow.com/a/32762296/82609 – Sebastien Lorber Sep 24 '15 at 13:14
  • 5
    Thanks @SebastienLorber, in my case I added this line to my ~/.profile or ~/.bashrc and it worked permanently – keisar Sep 24 '15 at 16:23
  • Hmmm, came here just prior to reading that setting LC_ALL is strongly discouraged: https://wiki.debian.org/Locale – dzuremar Dec 07 '17 at 13:08
  • Damn, but this LC_ALL setting solved the problem right and there, instantly and without requiring root privileges. Nevermind, hopefully there won't be any darkness bugs haunting me later. – dzuremar Dec 07 '17 at 13:27
52

Actually it isn't strictly related to MongoDB. Somehow the language on computer B was not defined correctly. I managed to fix it by typing:

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

These commands will generate and configure the needed locales. After those steps mongorestore got back working as usual.

Luca Anceschi
  • 2,257
  • 3
  • 19
  • 24
  • 2
    this basically helped me. but also had to edit `/etc/locale.gen` and enable the needed locales (on arch linux) – Marian Theisen Jan 28 '14 at 16:27
  • This solved the problem for me too. This is on Lubuntu 12.04 x86. – Capt. Crunch Apr 07 '14 at 03:09
  • 1
    But why is this happening, is there any specific reasons that mongodump / restore depends on locale languages ? – Beast Jul 16 '14 at 05:18
  • @MarianTheisen That was the culprit for me as well, I'm on a fresh Arch install and got the error while trying to run rescuetime. Fixing `/etc/locale.gen` and running `locale-gen` was all that was required. – erb Jan 15 '16 at 18:21
17

Exporting LC_ALL="en_US.UTF-8" only works if you have the en_US locale installed. If you want to avoid installing the locales package (or its equivalent on distributions other than Debian derivatives), then you can instead use:

export LC_ALL=C.UTF-8

which will not require any extra locale data.

josch
  • 6,716
  • 3
  • 41
  • 49
10

If you are using a Mac OSX and SSH this might be issued by wrong 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 the wrong var.

$ unset LC_CTYPE 

Check whether locale is working fine.

$ 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=

Now mongo also should do fine.

Alex
  • 327
  • 5
  • 8
10

To make the fix permanent you can edit one of those files:

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

And add the line LC_ALL="en_US.UTF-8"

Sebastien Lorber
  • 89,644
  • 67
  • 288
  • 419
9

Got same problem on debian 7 without locale-gen (command not found) installed.

I solved this way:

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

Now mongodb should start.

Source

Daniele Vrut
  • 2,835
  • 2
  • 22
  • 32