Do tej pory nie określałem katalogu danych MongoDB i miałem tylko jedną partycję podstawową o pojemności 30 GB.
Właśnie skończyło mi się miejsce i dodałem nowy dysk twardy. Jak mogę przenieść moje dane (które najwyraźniej są w /var/lib/mongodb/
) i skonfigurować MongoDB tak, aby wszystko działało z nowego dysku bez wpływu na moją istniejącą instalację?
mongodb
filepath
data-files
Mark Gill
źródło
źródło
sudo chmod o+rx /media
na przykład, jeśli twój punkt montowania tomedia
. R + x musi być dostępny dla „innych” grup i użytkowników z pierwszego punktu montowania.Odpowiedzi:
Krótka odpowiedź jest taka, że
--dbpath
parametr w MongoDB pozwoli ci kontrolować, z jakiego katalogu MongoDB odczytuje i zapisuje swoje dane.Uruchomi mongodb i umieści pliki w
/usr/local/mongodb-data
.W zależności od dystrybucji i instalacji MongoDB możesz również skonfigurować
mongod.conf
plik, aby robił to automatycznie:# Store data in /usr/local/var/mongodb instead of the default /data/db dbpath = /usr/local/var/mongodb
Oficjalne pakiety 10gen Linux ( Ubuntu / Debian lub CentOS / Fedora ) są dostarczane z podstawowym plikiem konfiguracyjnym, który jest umieszczany w
/etc/mongodb.conf
, a usługa MongoDB odczytuje to podczas uruchamiania. Tutaj możesz dokonać zmiany.źródło
/etc/mongodb.conf
według tego rozwiązania. Potem, po uruchomieniumongod
, zobaczyłem, że/data/db
został użyty. Dlaczego aktualizacja mongodb.conf nie wpłynęła na to, gdzie mongod zapisał bazę danych? (Zauważ, że użycie--dbpath
argumentu zadziałało./etc/mongodb.conf
i aktualizacja, która działa dobrze dla mnie.chown
udostępniony użytkownikowi mongod dla skryptów uruchamiania usługi.Rozwiązany w 2 minuty przestoju :)
Po prostu przenieś folder, dodaj łącze symboliczne, a następnie dostosuj uprawnienia.
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
źródło
chmod -R o+x /<home>
. patrz: stackoverflow.com/a/38193187/205049Permission denied: "/var/lib/mongodb"
Tak wygląda /home/../mongodb/mongodb/: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*
mv
polecenia, jeśli uruchomisz polecenie mv z poziomu lib, nie masz już mongodbln
doPoniższe polecenie zadziała, jeśli chcesz zmienić domyślną ścieżkę. Po prostu wpisz to w katalogu bin mongodb.
Jeśli chcesz przenieść również istniejące dane, po prostu skopiuj wszystkie foldery z istniejącego katalogu data \ db do nowego katalogu przed wykonaniem polecenia.
Zatrzymaj także istniejące usługi mongodb, które są uruchomione.
źródło
Utwórz plik o nazwie mongod.cfg w folderze MongoDB, jeśli go nie masz. W moim przypadku: C: \ Users \ ivanbtrujillo \ MongoDB
Następnie edytuj plik mongod.cfg za pomocą notatnika i dodaj wiersz z następującym (nasza niestandardowa ścieżka dbpath):
W tym pliku należy również określić ścieżkę logowania. Mój plik mongod.cfg to:
Jeśli używasz mongoDB jako usługi systemu Windows, musisz zmienić ten klucz i określić plik mongod.cfg.
Aby zainstalować mongodb jako usługę systemu Windows, uruchom następujące polecenie:
**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" –install**
Otwórz regedit.exe i przejdź do następującej trasy:
Usługa MongoDB nie działa, musimy wyedytować klucz ImagePath, usunąć jego zawartość i wstawić:
**"C:\Users\ivanbtrujillo\MongoDB\bin\mongod.exe" --config "C:\Users\ivanbtrujillo\MongoDB\mongod.cfg" --logpath="C:\Users\ivanbtrujillo\MongoDB\log\mongo.log" –service**
Wskazujemy mongo plik konfiguracyjny i jego ścieżkę logowania.
Wtedy, kiedy uruchomisz usługę mongodb, będzie działać.
Oto pełny samouczek dotyczący instalacji mongoDB w systemie Windows: http://ivanbtrujillo.herokuapp.com/2014/07/24/installing-mongodb-as-a-service-windows/
Mam nadzieję, że to pomoże,
źródło
Skopiuj zawartość
/var/lib/mongodb
do/data/db
. Pliki, których powinieneś szukać, powinny mieć nazwy takie jakyour_db_name.ns
iyour_dbname.n
gdzien
jest liczba zaczynająca się od 0. Jeśli nie widzisz takich plików pod/var/lib/mongodb
, poszukaj ich w swoim systemie plików.Po skopiowaniu użyj
--dbpath=/data/db
podczas uruchamiania MongoDB za pomocąmongod
polecenia.źródło
Oto, co zrobiłem, mam nadzieję, że pomoże to komukolwiek innemu:
Kroki:
/etc/rc.d/rc.mongod stop
, jeśli używasz czegoś innego, np.systemd, powinieneś sprawdzić swoją dokumentację, jak to zrobićmkdir /mnt/database
chown mongodb:mongodb -R /mnt/database/mongodb
) - dzięki @DanailGabenski.cp -R /var/lib/mongodb/ /mnt/database/
rm -rf /var/lib/mongodb/
ln -s /mnt/database/mongodb /var/lib/mongodb
/etc/rc.d/rc.mongod start
mongo
połączyć się z bazą danych, aby sprawdzić, czy wszystko jest w porządku)Nie musisz mówić, że powinieneś być ostrożny, kiedy to robisz, szczególnie w przypadku
rm -rf
ale myślę, że to najlepszy sposób na zrobienie tego.Nigdy nie powinieneś próbować kopiować katalogu bazy danych podczas działania mongod, ponieważ mogą istnieć usługi, które zapisują / odczytują z niego, co zmieni zawartość Twojej bazy danych.
źródło
chown mongodb:mongodb -R /mnt/database/mongodb
Jeśli jest zainstalowany przez
apt-get
Ubuntu 12.04, nie zapomnijchown -R mongodb:nogroup /path/to/new/directory
. Zmień również konfigurację w/etc/mongodb.conf
.Przypominamy, że
mongodb-10gen
pakiet jest teraz uruchamiany przez upstart, więc skrypt konfiguracyjny jest w formacie/etc/init/mongodb.conf
Właśnie to przejrzałem, mam nadzieję, że pracownicy Google uznają to za przydatne :)
źródło
Dla mnie użytkownik był
mongod
zamiastmongodb
sudo chown mongod:mongod /newlocation
Możesz zobaczyć dzienniki błędów, jeśli usługa nie powiedzie się:
/var/log/mongodb/mongod.log
źródło
W debian / ubuntu musisz edytować skrypt /etc/init.d/mongodb. Naprawdę, ten plik powinien pobierać ustawienia z /etc/mongodb.conf, ale nie wydaje się, aby pobierał domyślny katalog (prawdopodobnie błąd)
To trochę hack, ale dodanie ich do skryptu sprawiło, że zaczął się poprawnie:
Dodaj:
DBDIR=/database/mongodb
zmiana:
DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --config $CONF run"}
do:
DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --dbpath $DBDIR --config $CONF run"}
źródło
Znalazłem specjalny przypadek, który powoduje, że linki symboliczne nie działają:
Wykonałem standardową instalację mongodb w przedsiębiorstwie, ale zmieniłem / var / lib / mongodb na dowiązanie symboliczne, ponieważ chciałem użyć systemu plików XFS dla mojego folderu bazy danych i trzeciego systemu plików dla folderu dziennika.
$ sudo systemctl start mongod (kończy się niepowodzeniem z komunikatem bez pozwolenia na zapis do mongodb.log) .. ale zakończyło się sukcesem, gdy zacząłem z tym samym plikiem konfiguracyjnym:
.. jako właściciel dysków zewnętrznych (ziggy) mogłem uruchomić $ mongod --config /etc/mongodb.conf --fork
W końcu odkryłem, że ... dowiązania symboliczne wskazywały na inny system plików, a mongodb (użytkownik) nie miał uprawnień do przeglądania folderu, do którego odnosi się dowiązanie symboliczne. Zarówno dowiązania symboliczne, jak i foldery, do których odnosiły się dowiązania symboliczne, miały prawa ekspansywne dla użytkownika mongod, więc nie miało to sensu?
/ var / log / mongodb został zmieniony (z instalacji standardowej) na dowiązanie symboliczne ORAZ sprawdziłem wcześniej:
$ ll / var / log / mongodb lrwxrwxrwx 1 mongodb mongodb 38 28 października 21:58 / var / log / mongodb -> / media / ziggy / XFS_DB / mongodb / log /
$ ll -d / media / ziggy / Ext4DataBase / mongodb / log drwxrwxrwx 2 mongodb mongodb 4096 1 listopada 12:05 / media / ashley / XFS_DB / mongodb / log /
.. Ale więc wydawało się to bez sensu .. oczywiście użytkownik mongodb miał dostęp rwx do łącza, folderu i pliku mongodb.log .. ale nie mógł go znaleźć za pośrednictwem dowiązania symbolicznego, ponieważ folder BASE nośnika nie mógł być wyszukiwane przez mongodb.
WIĘC ... WCZEŚNIEJ ZROBIŁEM TO: $ ll / media / ziggy /. . drwx ------ 5 ziggy ziggy 4096 28 października 21:49 XFS_DB /
i znalazłem obraźliwe brakujące uprawnienia x.
$ chmod a + x / media / ziggy / XFS_DB rozwiązało problem
Z perspektywy czasu wydaje się głupi, ale żadne poszukiwania nie przyniosły niczego pożytecznego.
źródło