É possível recuperar bancos de dados do MongoDB de .ns e .0, .1,. … arquivos?

13

Eu tenho uma instalação do MongoDB 2.0.4 no Ubuntu 12.10. Recentemente tive alguns problemas de conexão com o banco de dados do lado de fora, e descobri que havia algo que impedia o MongoDB de iniciar corretamente. Como sugerido em várias fontes (consulte StackOverflow), eu removi /var/lib/mongodb/mongodb.lock e executei mongod --repair . Isso não resolveu o problema, o MongoDB não rodou e continuou criando arquivos de bloqueio que não foram removidos depois. Olhando os logs, percebi que não tinha acesso a uma pasta chamada $tmpSomething , então (já que o nome sugeria uma pasta temporária) eu removi, e depois tudo deu certo ... exceto o fato de que eu só tenho um dos meus bancos de dados anteriores à vista, enquanto os outros ainda estão lá porque minha pasta /var/lib/mongodb/ ainda está cheia de .ns .0 .1 .n arquivos que pesam muito. Existe uma maneira de restaurá-los no banco de dados? (Eu tentei com mongorestore, mas como eu estava esperando, ele não lida com esses arquivos).

Obrigado

    
por tunnuz 18.10.2012 / 09:54

1 resposta

16

Os arquivos .ns .0 .1 etc. são os próprios arquivos de dados. Se você iniciou uma instância mongod com um argumento --dbpath apontando para essa pasta, ou se você moveu o conteúdo para outro lugar e usou a opção para apontar para lá, o mongod tentará lê-los normalmente.

Como seus problemas sugerem corrupção e / ou algum outro problema iniciando mongod (você deve realmente postar os arquivos de log de mensagens de inicialização, talvez em uma pergunta separada para resolver esse problema), então há alternativas. Para referência, os problemas mais comuns são relacionados às permissões, especialmente quando as pessoas tentam iniciar o mongod manualmente (como elas próprias) ou com o sudo (como root) e criar permissões problemáticas nos vários diretórios.

Você está correto que mongorestore não pode usar esses arquivos de dados diretamente, mas mongodump pode lê-los e despejar dados deles nos arquivos BSON que mongorestore espera.

A opção que você deseja aqui é dbpath . Você mencionou que seu caminho é /var/lib/mongo , então você pode executar algo assim:

mongodump --dbpath /var/lib/mongo -d <database name> -o /path/to/put/files

Opcionalmente, você também pode usar --repair aqui para corrigir a corrupção junto com as opções de consulta em circunstâncias extremas para contornar as seções corrompidas (raramente, ou nunca, necessárias). As várias opções estão descritas na página mongodump :

link

Depois de descarregar os arquivos, você pode usar mongorestore para reimportá-los para outra instância mongod .

    
por 18.10.2012 / 19:35