MongoDB veritabanlarını .ns ve .0, .1, 'den kurtarmak mümkün mü? … Dosyalar?


14

Ubuntu 12.10 üzerinde bir MongoDB 2.0.4 kurulumum var. Son zamanlarda dışarıdan veritabanına bağlanmada bazı problemler yaşadım ve MongoDB'nin doğru şekilde başlamasını engelleyen bir şey olduğunu anladım. Birkaç kaynakta önerildiği gibi (bkz. StackOverflow) Kaldırdım /var/lib/mongodb/mongodb.lockve koştum mongod --repair. Bu sorunu çözmedi, MongoDB çalışmayacak ve daha sonra kaldırmaya özen göstermediği kilit dosyaları oluşturmaya devam edecekti. Günlüklere bakarak, adı verilen bir klasöre erişemediğini anladım, bu $tmpSomethingyüzden (ad geçici bir klasör önerdiğinden) onu kaldırdım ve daha sonra hepsi işe yaradı ... sadece bir tane olması dışında önceki veritabanlarımın birçoğu görünürken, diğerleri veritabanım /var/lib/mongodb/hala dolu olduğu için hala orada.ns .0 .1 .nçok ağır olan dosyalar. Onları veritabanına geri yüklemenin bir yolu var mı? (Mongorestore ile denedim, ama beklediğim gibi, bu dosyaları işlemez).

Teşekkürler

Yanıtlar:


19

.ns .0 .1Vb dosyaları veri dosyalarının kendilerini vardır. Bu klasörü işaret eden mongodbir --dbpathargümanla bir örnek başlattıysanız veya içeriği başka bir yere taşıdıysanız ve oraya yönlendirme seçeneğini kullandıysanız, mongod bunları normal şekilde okumaya çalışır.

Sorunlarınız yolsuzluk ve / veya başka bir sorunun başlamasını önerdiğinden mongod(başlangıç ​​iletilerinin günlük dosyalarını, belki de bu sorunu ele almak için ayrı bir soruda göndermelisiniz), alternatifler vardır. Referans olarak, en yaygın problemler, özellikle insanlar mongodu manuel olarak (kendileri gibi) veya sudo (kök olarak) ile başlatmaya ve çeşitli dizinlerde sorunlu izinler oluşturmaya çalıştıklarında izinlerdir.

mongorestoreBu veri dosyalarını doğrudan kullanamayacağınız doğrudur , ancak mongodumpbunları okuyabilir ve bu verilerden beklenen BSON dosyalarına dökebilir mongorestore.

Burada istediğiniz seçenek dbpath . Yolunuzdan bahsediyorsunuz /var/lib/mongo, böylece böyle bir şey çalıştırabilirsiniz:

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

İsteğe bağlı olarak --repairburada, bozuk durumlarda dolaşmak için aşırı durumlarda sorgu seçenekleriyle birlikte yolsuzluğu düzeltmek için de kullanabilirsiniz (nadiren, gerekirse). Çeşitli seçenekler mongodumpsayfada açıklanmıştır :

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

Dosyaları çıkardıktan sonra, mongorestorebaşka bir mongodörneğe yeniden aktarmak için kullanabilirsiniz .



2
Mongo 3.0 ile bir seçenek, mongo sunucusunu belirtilen dosyalarla başlatmaktır: mongod --dbpath ./ve daha sonra mongodump ile--dbpath
Shwaydogg

3
Sadece bir not, Mongo 3.0 çalıştırıyorsanız ve mongod --dbpath ./size .ns .0dosyalarda veritabanı vermezseniz , depolama motoru varsayılan olarak eski MMapV1 motoru yerine yeni WiredTiger motorunu kullanıyor olabilir. mongod --storageEngine mmapv1 --dbpath ./Bunun yerine eski motoru kullanarak bağlanmayı deneyin .
flamebaud

1
Herkes verileri .ns, .0 ve .1 dosyalarından mongo 3.0'a taşımama yardımcı olabilir mi
Mandeep Singh

1
@Flamebaud'un dediği gibi, varsayılan motor değişti. Lütfen Mongo belgelerindeki Varsayılan Depolama Motoru Değişikliğini kontrol edin . Ayrıca, WiredTiger Depolama Motoru
Ludovic Kuty
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.