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

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

Eu tenho uma instalação do MongoDB 2.0.4 no Ubuntu 12.10. Recentemente tive alguns problemas de conexão externa com o banco de dados e descobri que havia algo que impedia o MongoDB de iniciar corretamente. Conforme sugerido em várias fontes (consulte StackOverflow), removi /var/lib/mongodb/mongodb.locke executei o mongod --repair. Isso não resolveu o problema, o MongoDB não rodava e continuava criando arquivos de bloqueio que não teve o cuidado de remover posteriormente. Olhando os logs, percebi que ele não tinha acesso a alguma pasta chamada $tmpSomething, então (já que o nome sugeria uma pasta temporária) removi ela, e depois deu tudo certo... exceto o fato de que só tenho uma dos meus bancos de dados anteriores à vista, enquanto os outros ainda estão lá porque minha /var/lib/mongodb/pasta ainda está cheia de .ns .0 .1 .narquivos que pesam muito. Existe uma maneira de restaurá-los no banco de dados? (Tentei com o mongorestore, mas como esperava, ele não suporta esses arquivos).

Obrigado

Responder1

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

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

Você está certo de que mongorestorenão pode usar esses arquivos de dados diretamente, mas mongodumppode lê-los e despejar dados deles nos arquivos BSON mongorestoreesperados.

A opção que você deseja aqui écaminho do banco de dados. 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ê --repairtambém pode usar aqui para corrigir corrupção junto com as opções de consulta em circunstâncias extremas para contornar seções corrompidas (raramente, ou nunca, necessárias). As diversas opções estão descritas na mongodumppágina:

http://docs.mongodb.org/manual/reference/mongodump/

Depois de despejar os arquivos, você pode mongorestorereimportá-los para outra mongodinstância.

informação relacionada