Backup MongoDB

BACKUP

Najprostszym poleceniem wykonującym backup bazy MongoDB jest MongoDump.

Na początek stwórzmy sobie folder na backupy

[root@localhost /]# mkdir /mongobackup

Aby uruchomić backup wpisujemy po prostu

[root@localhost ~]# mongodump --out /mongobackup

2017-11-13T17:25:28.653+0100    writing admin.system.version to
2017-11-13T17:25:28.655+0100    done dumping admin.system.version (1 document)

W folderze /mongobackup powstał podfolder admin a w nim

-rw-r--r--. 1 root root 59 Nov 13 17:25 system.version.bson
-rw-r--r--. 1 root root 92 Nov 13 17:25 system.version.metadata.json

Dla pokazania jak to działa w praktyce tworzymy bazę i jakąś tam tabelę

> use MyDB
> db.movie.insert({name:"Wojna Domowa", year:1976})
> db.movie.find()

po backupie usuniemy bazę
> db.dropDatabase()

Jeśli chcemy wykonać backup tylko jednej bazy MyDB wykonujemy

[root@localhost /]# mongodump --db MyDB --out /mongobackup

2017-11-13T17:30:19.564+0100    writing MyDB.movie to
2017-11-13T17:30:19.565+0100    done dumping MyDB.movie (1 document)

W folderze /mongobackup/MyDB powstały pliki

-rw-r--r--. 1 root root 59 Nov 13 17:30 movie.bson
-rw-r--r--. 1 root root 82 Nov 13 17:30 movie.metadata.json

Lub polecenie backupu z pełną ścieżka z podanym userem bazą itd

[root@localhost /]# mongodump --host 10.0.1.7 --port 27017 --username admin --password somepassword --db mydb --out /backup/db/

backup pojedynczej kolekcji (tabeli) Przykładowo MOVIE

$ mongodump --collection movie --db MyDB --out /mongobackup

2017-11-13T17:32:54.644+0100    writing MyDB.movie to
2017-11-13T17:32:54.646+0100    done dumping MyDB.movie (1 document)

RESTORE

Usuwamy bazę MyDB
> use MyDB
> db.dropDatabase()

{ "dropped" : "MyDB", "ok" : 1 }

Baza usunięta. Teraz ją odtworzymy z backupu (Opcja –drop usuwa bazę jeśli już taka istnieje (owerwrite).

[root@localhost mongobackup]# mongorestore --db MyDB --drop /mongobackup/MyDB

2017-11-13T17:40:12.118+0100    the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2017-11-13T17:40:12.119+0100    building a list of collections to restore from /mongobackup/MyDB dir
2017-11-13T17:40:12.119+0100    reading metadata for MyDB.movie from /mongobackup/MyDB/movie.metadata.json
2017-11-13T17:40:12.128+0100    restoring MyDB.movie from /mongobackup/MyDB/movie.bson
2017-11-13T17:40:12.130+0100    no indexes to restore
2017-11-13T17:40:12.130+0100    finished restoring MyDB.movie (1 document)
2017-11-13T17:40:12.130+0100    done

Sprawdzamy kolekcję (tabelę)

> use MyDB

switched to db MyDB


> db.movie.find()

{ "_id" : ObjectId("5a09c7c457c8ec9038641806"), "name" : "Wojna Domowa", "year" : 1976 }

Baza MyDB się odtworzyła

Próba odtworzenia bazy MyDB z backupu pełnego nie udała się (potem rozgryzę co jest powodem) 🙂

[root@localhost mongobackup]# mongorestore --db MyDB --drop /mongobackup/admin

2017-11-13T17:44:36.818+0100    the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2017-11-13T17:44:36.818+0100    building a list of collections to restore from /mongobackup/admin dir
2017-11-13T17:44:36.819+0100    reading metadata for MyDB.system.version from /mongobackup/admin/system.version.metadata.json
2017-11-13T17:44:36.820+0100    Failed: MyDB.system.version: error creating collection MyDB.system.version: error running create command: cannot write to 'MyDB.system.version'

Puszczenie odzyskiwania całej bazy też nie bardzo chce iść (???)

[root@localhost admin]# mongorestore --drop /mongobackup/admin

2017-11-13T17:47:20.152+0100    preparing collections to restore from
2017-11-13T17:47:20.152+0100    don't know what to do with file "/mongobackup/admin/system.version.bson", skipping...
2017-11-13T17:47:20.152+0100    don't know what to do with file "/mongobackup/admin/system.version.metadata.json", skipping...
2017-11-13T17:47:20.152+0100    done

Możemy też stworzyć skrypt w Crontabie który będzie wykonywał cyklicznie backupy

$ vi /backup/mongo-backup.sh

#!/bin/sh
 
TODAY=`date +%d%b%Y`
BACKUP_DIR=/backup/db
 
mkdir -p ${BACKUP_DIR}/${TODAY}
 
mongodump -h  -d  -u  -p  --out ${BACKUP_DIR}/${TODAY}/

Ustawienia w crontab

0 2 * * * /backup/mongo-backup.sh

Ten wpis został opublikowany w kategorii MongoDB i oznaczony tagami . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz