MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Synchronizuj MongoDB przez ssh

Możesz to osiągnąć za pomocą tunelowania SSH, konfigurując zdalną instancję MongoDB tak, aby działała na jednym z portów lokalnych. Domyślnie MongoDB działa na 27017, więc w poniższym przykładzie wybrałem mapowanie mojej zdalnej instancji MongoDB na mój lokalny port 27018.

Jeśli próbujesz skopiować bazę danych z SERWERA1 do LOCALHOST, możesz uruchomić to polecenie na LOCALHOST:

ssh -L27018:localhost:27017 SERVER1

(Oczywiście zastąp SERWER1 swoim rzeczywistym serwerem lub aliasem ssh)

Spowoduje to otwarcie połączenia SSH z serwerem SERVER1, ale także mapuje port 27018 na LOCALHOST na zdalny port 27017 na serwerze SERVER1. Nie zamykaj tego połączenia SSH, a teraz spróbuj połączyć się z MongoDB na komputerze lokalnym z portem 27018, w ten sposób:

mongo --port 27018

Zauważysz, że teraz są to dane na serwerze SERVER1, z wyjątkiem tego, że uzyskujesz do nich dostęp z komputera lokalnego.

Po prostu normalnie działa MongoDB:

mongo (lub mongo --port 27107 )

Będzie twoją lokalną maszyną.

Teraz, ponieważ technicznie masz (na swoim LOCALHOST, gdzie uruchomiłeś tunel SSH):

  • MongoDB (LOCALHOST) na 27017
  • MongoDB (SERWER1) na 27018

Możesz po prostu użyć db.copyDatabase() funkcja wewnątrz MongoDB (LOCALHOST) do kopiowania danych.

Z LOCALHOST NA PORTU 27017 (wykonywanie na żywo spowoduje UPUSZCZENIE TWOICH DANE)

// Use the right DB
use DATABASENAME; 
// Drop the Existing Data on LOCALHOST
db.dropDatabase();
// Copies the entire database from 27018
db.copyDatabase("DATABASENAME", "DATABASENAME", "localhost:27018");

Powinieneś być w stanie zamknąć to wszystko w skrypcie powłoki, który może wykonać wszystkie te polecenia za ciebie. Sam mam taki, ale w rzeczywistości ma kilka dodatkowych kroków, które prawdopodobnie sprawiłyby, że byłoby trochę bardziej zagmatwane :)

Wykonanie tego i użycie natywnej funkcji db.copyDatabase() MongoDB zapobiegnie konieczności zrzutu/zipu/przywrócenia. Oczywiście, jeśli nadal chcesz iść tą drogą, uruchomienie mongodump nie będzie zbyt trudne , wyeksportuj dane, tar/gzip je, a następnie użyj scp TARGETSERVER:/path/to/file /local/path/to/file ściągnąć go i uruchomić mongorestore na nim.

Po prostu wydaje się, że to więcej pracy!

Edytuj - Oto plik SH i JS, które razem tworzą skrypt powłoki, z którym można to uruchomić. Uruchom je na swoim LOCALHOST , nie uruchamiaj ich na żywo lub zrobi to db.dropDatabase na żywo. Umieść te dwa pliki w tym samym folderze i zastąp NAZWA SERWERA w pull-db.sh z aliasem domain/ip/ssh, a następnie w pull-db.js zmień DBNAMEHERE na dowolną nazwę bazy danych.

Zwykle tworzę folder o nazwie scripts w moich projektach i używając Textmate, wystarczy nacisnąć ⌘+R mając pull-db.sh otwórz do edycji, aby go wykonać.

pull-db.sh

ssh -L27018:localhost:27017 YOURSERVERNAME '
    echo "Connected on Remote End, sleeping for 10"; 
    sleep 10; 
    exit' &
echo "Waiting 5 sec on local";
sleep 5;
echo "Connecting to Mongo and piping in script";
cat pull-db.js | mongo

pull-db.js

use DBNAMEHERE;
db.dropDatabase();
use DBNAMEHERE;
db.copyDatabase("DBNAMEHERE","DBNAMEHERE","localhost:27018");

Dodałem dodatkowy kod do skryptu powłoki, aby powtórzyć to, co robi (sorta). Zegary uśpienia w skrypcie mają po prostu dać połączeniom SSH czas na połączenie przed uruchomieniem następnej linii. Zasadniczo dzieje się tak:

  1. Pierwszy wiersz kodu tworzy tunel na twoim komputerze i wysyła ECHO, SLEEP, a następnie EXIT do zdalnej sesji SSH.
  2. Następnie czeka 5 sekund, co pozwala na połączenie sesji SSH w kroku 1.
  3. Następnie przesyłamy plik pull-db.js do lokalnej powłoki mongo. (Krok nr 1 należy wykonać w ciągu 5 sekund...)
  4. Pull-db.js powinien teraz działać w mongo, a terminal SSH w kroku #1 prawdopodobnie działał przez 10 sekund po otwarciu połączenia, a EXIT jest wysyłany do jego sesji. Wydano polecenie, JEDNAK sesja SSH pozostanie otwarta do czasu zakończenia czynności z kroku 3.
  5. Gdy tylko skrypt pull-db.js zakończy ściąganie wszystkich danych ze zdalnego serwera, polecenie EXIT wydane w kroku #1 na zdalnym serwerze może w końcu zamknąć połączenie, rozłączając powiązanie 27108 na lokalnym hoście.

Powinieneś teraz mieć wszystkie dane ze zdalnej bazy danych na swoim lokalnym hoście.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Przestaw wiersze na kolumny w MongoDB

  2. Zwróć wyniki mangusty w zapytaniu wyszukiwania do zmiennej

  3. Przewodnik programisty dotyczący shardingu MongoDB

  4. Jakie uprawnienia użytkownika MongoDB są potrzebne, aby dodać użytkownika do nowej/innej bazy danych Mongo?

  5. Usuń styl kaskadowy w Mongoose