MongoDB veri deposu dizinini değiştirme


184

Şimdiye kadar bir MongoDB veri dizini belirtmedim ve sadece bir 30 GB birincil bölümüm vardı.

Az yer kaldım ve yeni bir sabit disk ekledim. Verilerimi (görünüşte olduğu gibi /var/lib/mongodb/) nasıl aktarabilirim ve MongoDB'yi mevcut kurulumumu etkilemeden her şeyin yeni diskten çıkacağı şekilde yapılandırabilirim?


Ayrıca yeni bağlama noktasındaki izinlerinizin r + x olduğundan emin olmalısınız: sudo chmod o+rx /mediaörneğin bağlama noktanız varsa media. R + x'in ilk bağlama noktasından itibaren 'diğer' gruplar ve kullanıcılar için mevcut olması gerekir.
wordsforthewise

Yanıtlar:


219

Kısa yanıt, --dbpathMongoDB'deki parametrenin MongoDB'nin verilerini okuduğu ve yazdığı dizini kontrol etmenize izin vermesidir.

mongod --dbpath / usr / local / mongodb-verileri

Mongodb'u başlatır ve dosyaları yerleştirir /usr/local/mongodb-data.

Dağıtımınıza ve MongoDB kurulumunuza bağlı olarak, mongod.confdosyayı bunu otomatik olarak yapacak şekilde de yapılandırabilirsiniz :

# Store data in /usr/local/var/mongodb instead of the default /data/db
dbpath = /usr/local/var/mongodb

Resmi 10gen Linux paketleri ( Ubuntu / Debian veya CentOS / Fedora ), temel bir yapılandırma dosyası ile birlikte gelir /etc/mongodb.confve MongoDB hizmeti başladığında bunu okur. Değişikliklerinizi burada yapabilirsiniz.


9
Benim debian kutusu üzerinde mongod.conf değil, mongodb.conf
UpTheCreek 7:12 '

12
/etc/mongodb.confBu çözüm için güncelledim . Sonra başladıktan sonra mongodbunun /data/dbkullanıldığını gördüm . Neden mongodb.conf dosyasını güncellemek mongod'un db'yi depoladığını etkilemedi? ( --dbpathTartışmanın kullanılmasının işe yaradığını unutmayın.
Kevin Meredith

Benim Fedora kutusunda /etc/mongodb.confve benim için iyi çalışıyor güncelleme.
tuxdna

4
chownHizmet başlangıç ​​komut dosyaları için yeni veri dizininin mongod kullanıcısına ait olması gerekir.
Pete Garafano

nasıl chown yaparım?
chovy

102

2 dakika kesinti süresi içinde çözüldü :)
Sadece klasörünüzü taşıyın, simge bağlantısı ekleyin ve ardından izinleri ayarlayın.

sudo service mongod stop
sudo mv mongodb /new/disk/mongodb/
sudo ln -s /new/disk/mongodb/ /var/lib/mongodb
sudo chown mongodb:mongodb /new/disk/mongodb/
sudo service mongod start

# test if mongodb user can access new location:
sudo -u mongodb -s cd /new/disk/mongodb/
# resolve other permissions issues if necessary
sudo usermod -a -G <newdisk_grp> mongodb

3
Bence bu cevap olmalı. Ben her zaman çok iyi bir çözüm olarak sembolik bağlantılar bulmak ve ben vb yapılandırma değiştirerek onları kullanan herhangi bir çözüm teşvik ..
guy mograbi

Muhtemelen usermod kullanmaya gerek yok. Dbpath ağacındaki "diğer" kullanıcılar için + x yürütülebilir iznini kaçırıyorsunuz chmod -R o+x /<home>. bkz. stackoverflow.com/a/38193187/205049
oori

Bu talimatları izleyin (başka bir diskte dbpath kullanarak), hala alıyorum Permission denied: "/var/lib/mongodb"Bu nasıl /home/../mongodb/mongodb/ şöyle görünüyor: drwxrwxr-x 3 mongodb mongodb 4096 oct 13 09:32 ../ drwxr-xr-x 2 mongodb nogroup 4096 oct 13 09:29 journal/ -rw------x 1 mongodb nogroup 67108864 sep 23 14:44 local.0* -rw------x 1 mongodb nogroup 16777216 sep 23 14:44 local.ns* -rwxr-xr-x 1 mongodb mongodb 0 oct 13 09:29 mongod.lock*
Machinerium

1
çalıştırdığınızda hangi klasörde olduğunuzu açıklığa kavuşturmanız gerekir mvkomutu , mv komutunu lib içinden çalıştırırsanız, artık mongodb'unuz lnolmayacak
Andy

1
Çözümünüzü denedim ancak uygulamayı yeniden başlattığımda şu hatayı veriyor - 2019-11-18T18: 58: 45.215 + 1100 initAndListen'de kilit dosyasının durumu belirlenemiyor: 28596 Veri dizinindeki kilit dosyasının durumu belirlenemiyor / var / lib / mongo: boost :: dosya sistemi :: durum: İzin verilmedi: "/var/lib/mongo/mongod.lock", sonlandırma
Arun chauhan

33

Varsayılan yolu değiştirmek isterseniz, aşağıdaki komut sizin için çalışacaktır. Bunu mongodb'un bin dizinine yazmanız yeterlidir.

mongod --dbpath=yourdirectory\data\db

Varolan verileri de taşımak istiyorsanız, komutu yürütmeden önce varolan data \ db dizinindeki tüm klasörleri yeni dizine kopyalamanız yeterlidir.

Ayrıca çalışan mongodb hizmetlerini de durdurun.


1
Bu Linux üzerinde de çalışır. Mondod betiğinin yanında "veri" adlı bir dizin oluşturdum ve şu şekilde çalıştırın: ./mongod --dbpath = data
cagdasalagoz 23:18

29

Eğer yoksa, MongoDB klasöründe mongod.cfg adlı bir dosya oluşturun. Benim durumumda: C: \ Kullanıcılar \ ivanbtrujillo \ MongoDB

Ardından, not defteri ile mongod.cfg dosyasını düzenleyin ve aşağıdakilerle bir satır ekleyin (özel dbpath'imiz):

dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db

Bu dosyada günlük yolunu da belirtmelisiniz. Benim mongod.cfg dosyam:

logpath=C:\Users\ivanbtrujillo\MongoDB\log\mongo.log
dbpath=C:\Users\ivanbtrujillo\MongoDB\data\db

Windows hizmeti olarak mongoDB kullanıyorsanız, bu anahtarı değiştirmeniz ve mongod.cfg dosyasını belirtmeniz gerekir.

Mongodb'u bir windows hizmeti olarak kurmak için şu komutu çalıştırın:

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" install**

Regedit.exe dosyasını açın ve aşağıdaki rotaya gidin:

HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\services\MongoDB

MongoDB hizmeti çalışmıyor, ImagePath anahtarını düzenlemeniz, içeriğini silmemiz ve aşağıdakileri koymamız gerekiyor:

**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" 
--logpath="C:\Users\ivanbtrujillo\MongoDB\log\mongo.log" service**

Mongo'ya yapılandırma dosyası ve günlük yolunu gösteririz.

Sonra mongodb servisini başlattığınızda çalışır.

İşte mongoDB'yi pencerelere yüklemek için tam bir öğretici: http://ivanbtrujillo.herokuapp.com/2014/07/24/instal-mongodb-as-a-service-windows/

Umarım yardımcı olur,


1
MongoDB 2.6 ve daha yeni sürümleri YAML yapılandırma dosyalarını kullanır. Eski biçim, geriye dönük uyumluluk için hala desteklenmektedir, ancak yenisini kullanmak isteyebilirsiniz. Ayrıntılar burada .
gronostaj

dbpath değişkeni linux için de mevcuttur. /Etc/mongod.conf dosyasına bakın.
xpros

23

İçeriğini kopyalayın /var/lib/mongodbiçin /data/db. Aradığınız dosyalar 0 ile başlayan bir sayı olmalıdır your_db_name.nsve your_dbname.nnerede nbir sayı olmalıdır. Bu tür dosyaları altında görmüyorsanız /var/lib/mongodb, dosya sisteminizde arayın.

Kopyalandıktan sonra, --dbpath=/data/dbMongoDB'yi mongodkomutla başlatırken kullanın.


sunucu her yeniden başlatıldığında bunun bir yolu var mı?
user4951

1
Bu anahtarı mongodb'yi başlatan kabuk betiğine ekleyebilirsiniz. Genellikle /etc/init.d/mongod veya /etc/init.d/mongodb şeklindedir.
lobster1234 4:12

19

İşte yaptım, umarım başkalarına yardımcı olur:

Adımlar:

  1. Mongodb kullanan hizmetlerinizi durdurun
  2. Mongod'u durdurun - bunu yapmanın yolu rc dosyamdı/etc/rc.d/rc.mongod stop , systemd gibi başka bir şey kullanırsanız, bunu nasıl yapacağınızı belgelerinizi kontrol etmelisiniz
  3. Yeni sabit diskte yeni bir dizin oluşturun -mkdir /mnt/database
  4. Mongodb'un bu dizinden okuma / yazma ayrıcalıklarına sahip olduğundan emin olun (genellikle chown mongodb:mongodb -R /mnt/database/mongodb) - thanks @DanailGabenski.
  5. Mongodb'nizin veri klasörünü yeni konuma kopyalayın -cp -R /var/lib/mongodb/ /mnt/database/
  6. Eski veritabanı klasörünü kaldırın -rm -rf /var/lib/mongodb/
  7. Yeni veritabanı klasörüne sembolik bağlantı oluşturma -ln -s /mnt/database/mongodb /var/lib/mongodb
  8. Mongod'u başlat -/etc/rc.d/rc.mongod start
  9. Mongodunuzun günlüğünü kontrol edin ve bazı sağlık kontrolü yapın ( mongoher şeyin yolunda olup olmadığını görmek için veritabanınıza bağlanmaya çalışın )
  10. 1. noktada durdurduğunuz hizmetlere başlayın

Bunu yaparken özellikle dikkatli olmanız gerektiğini söylemenize gerek yok, rm -rfama bunu yapmanın en iyi yolu olduğunu düşünüyorum.

Mongod çalışırken asla veritabanı dizinini kopyalamaya çalışmamalısınız, çünkü veritabanınızın içeriğini değiştirecek olan / okuyan hizmetler olabilir.


1
Eski bir cevap olmasına rağmen, kısmen benim için çalıştı. Mongodb kullanıcısının çalışabilmesi için yeni dizinin ve simgenin sahibi olduğundan da emin olmanız gerekir. chown mongodb:mongodb -R /mnt/database/mongodb
Danail Gabenski

3
5. noktada, cp -rp / var / lib / mongodb / / mnt / database / gibi görünmesini sağlayın.
Ketan Ghumatkar

Çözümünüzü denedim ancak uygulamayı yeniden başlattığımda şu hatayı veriyor - 2019-11-18T18: 58: 45.215 + 1100 initAndListen'de kilit dosyasının durumu belirlenemiyor: 28596 Veri dizinindeki kilit dosyasının durumu belirlenemiyor / var / lib / mongo: boost :: dosya sistemi :: durum: İzin verilmedi: "/var/lib/mongo/mongod.lock", sonlandırma
Arun chauhan

10

apt-getUbuntu 12.04 üzerinden yüklüyse unutmayın chown -R mongodb:nogroup /path/to/new/directory. Ayrıca, adresindeki yapılandırmayı değiştirin /etc/mongodb.conf.

Bir hatırlatma olarak, mongodb-10genpaket şimdi upstart üzerinden başlatıldığından yapılandırma betiği/etc/init/mongodb.conf

Ben sadece bunun üzerinden geçtim, umut googlers yararlı buluyorum :)


1

Benim için kullanıcı oldu mongodyerinemongodb

sudo chown mongod:mongod /newlocation

Hizmet başarısız olursa, günlüklerin hatalarını görebilirsiniz:

/var/log/mongodb/mongod.log


0

Debian / ubuntu dilinde, /etc/init.d/mongodb komut dosyasını düzenlemeniz gerekir. Gerçekten, bu dosya ayarları /etc/mongodb.conf'dan alıyor olmalı, ancak varsayılan dizini (muhtemelen bir hata) çekmiyor gibi görünüyor

Bu biraz hack, ancak bunları betiğe eklemek doğru bir şekilde başlamasını sağladı:

Ekle:

DBDIR=/database/mongodb

değişiklik:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --config $CONF run"}

için:

DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --dbpath $DBDIR --config $CONF run"}

veritabanını root yerine ana dizininize koymak isterseniz ne olur?
JesseBoyd
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.