Ä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?

Mark Gill
quelle
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.

Brendan W. McAdams
quelle
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
DmitrySandalov
quelle
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.

Yogesh Sanchihar
quelle
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,

ivanbtrujillo
quelle
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 .

Hummer1234
quelle
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.

drinchev
quelle
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 :)

Roberto
quelle
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

IP
quelle
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"}
FGiorlando
quelle
Was ist, wenn Sie die Datenbank in Ihrem Home-Verzeichnis anstelle von root ablegen möchten?
JesseBoyd