
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.lock
e 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 .n
arquivos 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 .1
arquivos etc. são os próprios arquivos de dados. Se você iniciou uma mongod
instância com um --dbpath
argumento 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 mongorestore
não pode usar esses arquivos de dados diretamente, mas mongodump
pode lê-los e despejar dados deles nos arquivos BSON mongorestore
esperados.
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ê --repair
també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 mongodump
página:
http://docs.mongodb.org/manual/reference/mongodump/
Depois de despejar os arquivos, você pode mongorestore
reimportá-los para outra mongod
instância.