Ändern des MongoDB-Datenspeicherverzeichnisses


183

Bis jetzt habe ich kein MongoDB-Datenverzeichnis angegeben und hatte nur eine 30-GB-Primärpartition.

Ich habe gerade keinen Speicherplatz mehr und eine neue Festplatte hinzugefügt. Wie kann ich meine Daten (die anscheinend in sind /var/lib/mongodb/) übertragen und MongoDB so konfigurieren, dass alles von der neuen Festplatte abläuft, ohne meine vorhandene Installation zu beeinträchtigen?


Sie sollten auch sicherstellen, dass Ihre Berechtigungen für den neuen Einhängepunkt r + x haben: sudo chmod o+rx /mediaZum Beispiel, wenn Ihr Einhängepunkt ist media. Das r + x muss ab dem ersten Einhängepunkt für die 'anderen' Gruppen und Benutzer verfügbar sein.
Worte für den

Antworten:


219

Die kurze Antwort lautet, dass Sie mit dem --dbpathParameter in MongoDB steuern können, aus welchem ​​Verzeichnis MongoDB seine Daten liest und schreibt.

mongod --dbpath / usr / local / mongodb-data

Würde mongodb starten und die Dateien einfügen /usr/local/mongodb-data.

Abhängig von Ihrer Distribution und MongoDB-Installation können Sie die mongod.confDatei auch so konfigurieren , dass dies automatisch geschieht:

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

Die offiziellen 10gen Linux-Pakete ( Ubuntu / Debian oder CentOS / Fedora ) werden mit einer grundlegenden Konfigurationsdatei geliefert, die abgelegt /etc/mongodb.confwird. Der MongoDB-Dienst liest diese beim Start. Sie können hier Ihre Änderung vornehmen.


9
Auf meiner Debian-Box ist es mongodb.conf, nicht mongod.conf
UpTheCreek

12
Ich habe /etc/mongodb.confgemäß dieser Lösung aktualisiert . Dann, nachdem mongodich angefangen hatte , sah ich, dass /data/dbdas benutzt wurde. Warum hat das Aktualisieren von mongodb.conf keinen Einfluss darauf, wo mongod die Datenbank gespeichert hat? (Beachten Sie, dass die Verwendung des --dbpathArguments funktioniert.
Kevin Meredith

Auf meiner Fedora-Box ist es /etc/mongodb.confund Aktualisierung, die für mich gut funktioniert.
Tuxdna

4
Das neue Datenverzeichnis muss chowndem Mongod-Benutzer für die Dienststart-Skripte übergeben werden.
Pete Garafano

Wie mache ich Chown?
Chovy

101

Es wurde in 2 Minuten Ausfallzeit behoben :)
Verschieben Sie einfach Ihren Ordner, fügen Sie einen Symlink hinzu und optimieren Sie die Berechtigungen.

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
Ich denke, das sollte die Antwort sein. Ich finde symbolische Links immer eine sehr gute Lösung und ich
bewerbe

Wahrscheinlich keine Notwendigkeit zu verwenden. Ihnen fehlt die ausführbare Berechtigung + x für "andere" Benutzer im Baum des Datenbankpfads chmod -R o+x /<home>. siehe: stackoverflow.com/a/38193187/205049
oori

Ich folge diesen Anweisungen (mit dbpath auf einer anderen Festplatte), ich bekomme immer noch Permission denied: "/var/lib/mongodb"So sieht /home/../mongodb/mongodb/ aus: 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
Sie müssen klären, wo sich in welchem ​​Ordner Sie befinden, wenn Sie den mvBefehl ausführen . Wenn Sie den Befehl mv in lib ausführen, müssen Sie nicht mehr mongodb lnto
Andy

1
Ich habe Ihre Lösung ausprobiert, aber wenn ich die Anwendung neu starte, wird folgende Fehlermeldung angezeigt: 2019-11-18T18: 58: 45.215 + 1100 I STORAGE [initandlisten] -Ausnahme in initAndListen: 28596 Status der Sperrdatei im Datenverzeichnis / kann nicht ermittelt werden var / lib / mongo: boost :: filesystem :: status: Berechtigung verweigert: "/var/lib/mongo/mongod.lock", beendet
Arun chauhan

32

Der folgende Befehl funktioniert für Sie, wenn Sie den Standardpfad ändern möchten. Geben Sie dies einfach in das bin-Verzeichnis von mongodb ein.

mongod --dbpath=yourdirectory\data\db

Wenn Sie auch vorhandene Daten verschieben möchten, kopieren Sie einfach alle Ordner aus dem vorhandenen Verzeichnis data \ db in ein neues Verzeichnis, bevor Sie den Befehl ausführen.

Und stoppen Sie auch vorhandene Mongodb-Dienste, die ausgeführt werden.


1
Dies funktioniert auch unter Linux. Ich habe ein Verzeichnis namens "data" neben dem Mondod-Skript erstellt und es folgendermaßen ausgeführt: ./mongod --dbpath = data
cagdasalagoz

29

Erstellen Sie eine Datei mit dem Namen mongod.cfg im MongoDB-Ordner, falls Sie diese nicht haben. In meinem Fall: C: \ Users \ ivanbtrujillo \ MongoDB

Bearbeiten Sie dann mongod.cfg mit dem Editor und fügen Sie eine Zeile mit der folgenden Zeile hinzu (unser benutzerdefinierter Datenbankpfad):

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

In dieser Datei sollten Sie auch den Protokollpfad angeben. Meine mongod.cfg-Datei lautet:

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

Wenn Sie mongoDB als Windows-Dienst verwenden, müssen Sie diesen Schlüssel ändern und die Datei mongod.cfg angeben.

Führen Sie den folgenden Befehl aus, um mongodb als Windows-Dienst zu installieren:

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

Öffnen Sie regedit.exe und gehen Sie zur folgenden Route:

HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\services\MongoDB

Der MongoDB-Dienst funktioniert nicht. Wir müssen den ImagePath-Schlüssel bearbeiten, seinen Inhalt löschen und Folgendes eingeben:

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

Wir geben Mongo die Konfigurationsdatei und den Protokollpfad an.

Wenn Sie dann den Mongodb-Dienst starten, funktioniert er.

Hier ist ein vollständiges Tutorial zum Installieren von mongoDB unter Windows: http://ivanbtrujillo.herokuapp.com/2014/07/24/installing-mongodb-as-a-service-windows/

Ich hoffe es hilft,


1
MongoDB 2.6 und höher verwenden YAML-Konfigurationsdateien. Das alte Format wird aus Gründen der Abwärtskompatibilität weiterhin unterstützt, Sie können jedoch das neue verwenden. Details hier .
Gronostaj

Die Variable dbpath existiert auch für Linux. Schauen Sie in /etc/mongod.conf nach.
Xpros

23

Kopieren Sie den Inhalt von /var/lib/mongodbnach /data/db. Die Dateien, nach denen Sie suchen sollten, sollten Namen wie your_db_name.nsund your_dbname.nwo neine Zahl beginnt, die mit 0 beginnt. Wenn Sie solche Dateien nicht unter sehen /var/lib/mongodb, suchen Sie sie in Ihrem Dateisystem.

Nach dem Kopieren verwenden Sie diese --dbpath=/data/dbOption , wenn Sie MongoDB über den mongodBefehl starten .


Gibt es eine Möglichkeit, dies bei jedem Neustart des Servers zu erreichen?
user4951

1
@ JimThio Sie können diesen Schalter dem Shell-Skript hinzufügen, das mongodb startet. Normalerweise ist es /etc/init.d/mongod oder /etc/init.d/mongodb.
Hummer1234

19

Ich habe Folgendes getan, hoffe, es ist für alle anderen hilfreich:

Schritte:

  1. Stoppen Sie Ihre Dienste , die Mongodb verwenden
  2. Stop mongod - meine Art dies zu tun war mit meiner RC-Datei /etc/rc.d/rc.mongod stop. Wenn Sie etwas anderes verwenden, wie systemd, sollten Sie Ihre Dokumentation überprüfen, wie das geht
  3. Erstellen Sie ein neues Verzeichnis auf der neuen Festplatte -mkdir /mnt/database
  4. Stellen Sie sicher, dass Mongodb (normalerweise chown mongodb:mongodb -R /mnt/database/mongodb) die Berechtigung zum Lesen / Schreiben aus diesem Verzeichnis hat - danke @DanailGabenski.
  5. Kopieren Sie den Datenordner Ihres Mongodb an den neuen Speicherort -cp -R /var/lib/mongodb/ /mnt/database/
  6. Entfernen Sie den alten Datenbankordner -rm -rf /var/lib/mongodb/
  7. Erstellen Sie einen symbolischen Link zum neuen Datenbankordner -ln -s /mnt/database/mongodb /var/lib/mongodb
  8. Start mongod -/etc/rc.d/rc.mongod start
  9. Überprüfen Sie das Protokoll Ihres Mongods und führen Sie eine Überprüfung der Gesundheit durch (versuchen Sie mongo, eine Verbindung zu Ihrer Datenbank herzustellen, um festzustellen , ob alles in Ordnung ist).
  10. Starten Sie Ihre Dienste , die Sie in Punkt 1 gestoppt haben

Es ist nicht nötig zu sagen, dass Sie vorsichtig sein sollten, wenn Sie dies tun, insbesondere mit rm -rf aber ich denke, dies ist der beste Weg, dies zu tun.

Sie sollten niemals versuchen, das Datenbankverzeichnis zu kopieren, während mongod ausgeführt wird, da möglicherweise Dienste darauf schreiben / lesen, die den Inhalt Ihrer Datenbank ändern.


1
Obwohl eine alte Antwort, hat es teilweise für mich funktioniert. Sie müssen auch sicherstellen, dass der Mongodb-Benutzer das neue Verzeichnis und das Symlik besitzt, damit es funktioniert. chown mongodb:mongodb -R /mnt/database/mongodb
Danail Gabenski

3
Geben Sie an Punkt 5 den Befehl so ein, dass er wie cp -rp / var / lib / mongodb / / mnt / database / aussieht. Dadurch bleiben Besitz und Berechtigung des Ordners erhalten.
Ketan Ghumatkar

Ich habe Ihre Lösung ausprobiert, aber wenn ich die Anwendung neu starte, wird folgende Fehlermeldung angezeigt: 2019-11-18T18: 58: 45.215 + 1100 I STORAGE [initandlisten] -Ausnahme in initAndListen: 28596 Status der Sperrdatei im Datenverzeichnis / kann nicht ermittelt werden var / lib / mongo: boost :: filesystem :: status: Berechtigung verweigert: "/var/lib/mongo/mongod.lock", beendet
Arun chauhan

10

Bei Installation über apt-getUbuntu 12.04 nicht vergessen chown -R mongodb:nogroup /path/to/new/directory. Ändern Sie auch die Konfiguration unter /etc/mongodb.conf.

Zur Erinnerung, das mongodb-10genPaket wird jetzt über Upstart gestartet, sodass sich das Konfigurationsskript befindet/etc/init/mongodb.conf

Ich habe das gerade durchgemacht, hoffe, Googler finden es nützlich :)


1

Für mich war der Benutzer mongodstattmongodb

sudo chown mongod:mongod /newlocation

Sie können die Protokolle auf Fehler anzeigen, wenn der Dienst fehlschlägt:

/var/log/mongodb/mongod.log


0

In debian / ubuntu müssen Sie das Skript /etc/init.d/mongodb bearbeiten. Eigentlich sollte diese Datei die Einstellungen aus /etc/mongodb.conf abrufen, aber sie scheint nicht das Standardverzeichnis abzurufen (wahrscheinlich ein Fehler).

Dies ist ein kleiner Hack, aber durch Hinzufügen dieser zum Skript wurde es korrekt gestartet:

hinzufügen:

DBDIR=/database/mongodb

Veränderung:

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

zu:

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

Was ist, wenn Sie die Datenbank in Ihrem Home-Verzeichnis anstelle von root ablegen möchten?
JesseBoyd
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.