sobota, 24 lutego 2018

MongoDB - kopie zapasowe i odzyskiwanie danych

W MongoDB możemy tworzyć kopie zapasowe poprzez utworzenie migawki lub stosując dedykowane do tego narzędzia.

Jeżeli chodzi o tworzenie migawki bazowych plików z danymi to musimy mieć w pliku konfiguracyjnym włączone księgowanie (z ang. "journaling"):
storage:
   journal:
      enabled: true
Dziennik zaś musi być umieszczony na tym samym logicznym wolumenie co pliki z danymi bazy. Jeżeli system nie wspiera księgowania to możesz zastosować zwykłe kopiowanie danych, ale uprzednio zastopuj wszystkie operacje zapisu do bazy.

Jeżeli chcesz stworzyć migawkę to musisz zatrzymać usługę MongoDB, a przywracanie z niej wartości nadpisuje wszystkie istniejące dane.

Jeżeli chodzi o inną metodę aniżeli migawka to stosujemy tutaj narzędzia mongodump i mongorestore.

mongodump domyślnie tworzy kopię w katalogu "dump", którym znajdują się pliki z nazwą w formacie "nazwa_bazy.bson".

Podstawowe wywołanie umożliwiające zapis w konkretnym katalogu to:
"mongodump --out nazwa_katalogu".

Możemy dokonać zrzutu konkretnej bazy:
"mongodump --db nazwa_bazy"
lub konkretnej kolekcji:
"mongodump --db nazwa_bazy --collection nazwa_kolekcji".

Jeżeli chcemy dokonać archiwizacji plików kopii w locie to stosujemy wywołanie jak np:
"mongodump --collection nazwa_kolekcji --db nazwa_bazy --gzip --archive=nazwa_pliku.gz".

Przywracanie danych w podstawowej postaci wygląda jak następuje (opcja "-d" jest konieczna od wersji 3 MongoDB):
"mongorestore -d nazwa_bazy_do_ktorej_chcemy_przywrocic_dane katalog_ze_zrzutem_bazy".

Jeżeli chcemy usunąć inne kolekcje aniżeli te, które są w kopii zapasowej to stosujemy wywołanie:
"mongorestore katalog_ze_zrzutem_bazy --drop".

Chcąc odzyskać konkretną kolekcję wprowadzamy w linii poleceń:
"mongorestore --db nazwa_bazy_do_ktorej_chcemy_przywrocic --collection nazwa_kolekcji katalog_ze_zrzutem_bazy/nazwa_bazy/nazwa_kolekcji.bson".

Jeżeli w docelowym serwerze nie ma bazy, która jest określona przez opcję "--db" to narzędzie ją utworzy.

Przywracanie z archiwum odbywa się identycznie jak tworzenie kopii tj.:
"mongorestore --db nazwa_bazy_do_ktorej_chcemy_przywrocic --gzip --archive=nazwa_pliku.gz".

mongorestore pozwala tylko na wprowadzanie danych, a nie na uaktualnienie czy scalanie. Jeżeli istniejące dane posiadają ten sam identyfikator w docelowej bazie to nie zostaną one podmienione.

Jeżeli posiadasz uwierzytelnianie to do wywołania mongodump lub mongorestore musisz dodać:
"--username nazwa_uzytkownika --password haslo --authenticationDatabase nazwa_bazy".