Как мне проще всего сделать резервную копию базы данных MongoDB GridFS? - PullRequest
8 голосов
/ 19 января 2012

Как видно из заголовка, у меня есть база данных MongoDB GridFS с целым рядом типов файлов (например, text, pdf, xls), и я хочу сделать резервную копию этой базы данных самым простым способом.

Репликация не вариант.Предпочтительно, я хотел бы сделать это обычным способом базы данных - выгрузить базу данных в файл, а затем сделать резервную копию этого файла (который можно использовать для восстановления всей базы данных на 100% позже, если это необходимо).Можно ли это сделать с mongodump?Я также хочу, чтобы резервная копия была инкрементной.Будет ли это проблемой с GridFS и mongodump?

Самое главное, это лучший способ сделать это?Я не настолько знаком с MongoDB, будет ли mongodump работать так же хорошо, как mysqldump с MySQL?Что лучше для MongoDB GridFS и инкрементных резервных копий?

Я запускаю Linux, если это что-то меняет.

1 Ответ

15 голосов
/ 19 января 2012

GridFS хранит файлы в двух коллекциях: fs.files и fs.chunks.

Дополнительную информацию об этом можно найти в документе Спецификации GridFS: http://www.mongodb.org/display/DOCS/GridFS+Specification

Резервное копирование обеих коллекций может выполняться с использованием mongodump, так же, как и любой другой коллекции.Документацию по mongodump можно найти здесь: http://www.mongodb.org/display/DOCS/Import+Export+Tools#ImportExportTools-mongodump

С терминала это будет выглядеть примерно так:

Для этой демонстрации мое имя базы данных - "gridFS":

Во-первых, mongodump используется для резервного копирования коллекций fs.files и fs.chunks в папку на моем рабочем столе:

$ bin/mongodump --db gridFS --collection fs.chunks --out /Desktop
connected to: 127.0.0.1
DATABASE: gridFS     to     /Desktop/gridFS
    gridFS.fs.chunks to /Desktop/gridFS/fs.chunks.bson
         3 objects
$ bin/mongodump --db gridFS --collection fs.files --out /Desktop
connected to: 127.0.0.1
DATABASE: gridFS     to     /Desktop/gridFS
    gridFS.fs.files to /Users/mbastien/Desktop/gridfs/gridFS/fs.files.bson
         3 objects

Теперь mongorestore используется для загрузки резервных копий вновая (для демонстрации) база данных с именем gridFScopy

$ bin/mongorestore --db gridFScopy --collection fs.chunks /Desktop/gridFS/fs.chunks.bson 
connected to: 127.0.0.1
Thu Jan 19 12:38:43 /Desktop/gridFS/fs.chunks.bson
Thu Jan 19 12:38:43      going into namespace [gridFScopy.fs.chunks]
3 objects found
$ bin/mongorestore --db gridFScopy --collection fs.files /Desktop/gridFS/fs.files.bson 
connected to: 127.0.0.1
Thu Jan 19 12:39:37 /Desktop/gridFS/fs.files.bson
Thu Jan 19 12:39:37      going into namespace [gridFScopy.fs.files]
3 objects found

Теперь запущена оболочка Mongo, чтобы можно было проверить восстановление:

$ bin/mongo
MongoDB shell version: 2.0.2
connecting to: test
> use gridFScopy
switched to db gridFScopy
> show collections
fs.chunks
fs.files
system.indexes
> 

Коллекции фс.chunks и fs.files были успешно восстановлены в новой БД.

Вы можете написать скрипт для периодического выполнения mongodump для ваших коллекций fs.files и fs.chunks.

Что касается инкрементных резервных копий, они не поддерживаются MongoDB.Поиск Google по запросу «инкрементное резервное копирование mongodb» обнаруживает хорошее обсуждение групп Google пользователя mongodb на эту тему: http://groups.google.com/group/mongodb-user/browse_thread/thread/6b886794a9bf170f

Для непрерывных резервных копий многие пользователи используют набор реплик.(Понимая, что в исходном вопросе вы указали, что это не вариант. Это включено для других членов Сообщества, которые могут читать этот ответ.) Член набора реплик может быть скрыт, чтобы гарантировать, что он никогда не станетПервичный и никогда не будет прочитан.Дополнительную информацию об этом можно найти в разделе «Параметры участника» документации по настройке набора реплик.http://www.mongodb.org/display/DOCS/Replica+Set+Configuration#ReplicaSetConfiguration-Memberoptions

...