Чи можливо відновити бази даних MongoDB з .ns і .0, .1,. … Файли?


14

У мене встановлення MongoDB 2.0.4 на Ubuntu 12.10. Нещодавно у мене виникли проблеми з підключенням до бази даних ззовні, і я зрозумів, що є щось, що заважає MongoDB запуститися правильно. Як було запропоновано з кількох джерел (див. StackOverflow), я видалив /var/lib/mongodb/mongodb.lockі побіг mongod --repair. Це не вирішило проблему, MongoDB не запускався і не створював файли блокування, які він не піклувався про видалення після цього. Переглянувши журнали, я зрозумів, що він не має доступу до якоїсь папки, що називається $tmpSomething, тому (оскільки назва запропонувала тимчасову папку) я видалив її, а згодом усе працювало ... за винятком того, що у мене є лише один моїх попередніх баз даних на виду, а інші все ще є, тому що моя /var/lib/mongodb/папка ще повна.ns .0 .1 .nфайли, які важать багато. Чи є спосіб відновити їх у базі даних? (Я намагався з mongorestore, але, як я очікував, він не обробляє ці файли).

Спасибі

Відповіді:


19

Ці та .ns .0 .1т.д. файли даних самі файли. Якщо ви запустили mongodекземпляр з --dbpathаргументом, який вказує на цю папку, або якщо ви перемістили вміст кудись і застосували опцію для вказівки на нього, mongod спробує прочитати їх як звичайні.

Оскільки ваші проблеми пропонують корупцію та / або якусь іншу проблему, яка починається mongod(ви дійсно повинні розміщувати файли журналів повідомлень про запуск, можливо, в окремому запитанні, щоб вирішити цю проблему), існують альтернативи. Для довідки, найпоширеніші проблеми стосуються дозволів, особливо коли люди намагаються запустити mongod вручну (як самі) або з sudo (як root) та створити проблемні дозволи в різних каталогах.

Ви правильні, що mongorestoreне можете використовувати ці файли даних безпосередньо, але mongodumpможете прочитати їх і скинути дані з них у файли BSON, які mongorestoreочікують.

Тут потрібна опція dbpath . Ви згадуєте, що ваш шлях є /var/lib/mongo, тому ви можете запустити щось подібне:

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

За бажанням ви також можете використовувати --repairтут, щоб виправити корупцію разом із варіантами запиту в екстремальних обставинах, щоб обійти пошкоджені секції (рідко, якщо взагалі, це потрібно). На mongodumpсторінці описані різні параметри :

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

Щойно ви скидаєте файли, ви зможете mongorestoreповторно імпортувати їх до іншого mongodекземпляра.



2
З Mongo 3.0 можливістю запустити сервер mongo із заданими файлами: mongod --dbpath ./а потім продовжити mongodump без--dbpath
Shwaydogg

3
Лише зауважте, якщо ви працюєте з Mongo 3.0 і mongod --dbpath ./не надає вам базу даних у .ns .0файлах, можливо, двигун пам’яті дефолт до нового двигуна WiredTiger замість старого двигуна MMapV1. Спробуйте mongod --storageEngine mmapv1 --dbpath ./замість цього підключитися за допомогою старого двигуна.
вогник

1
Хтось може допомогти мені перенести дані з файлів .ns, .0 та .1 до mongo 3.0
Mandeep Singh

1
Як сказав @flamebaud, двигун за замовчуванням змінився. Перевірте зміну двигуна зберігання за замовчуванням у документації Mongo. Ви також можете ознайомитись із початком документа на WiredTiger Storage Engine
Людовик Куті
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.