mongodb export — процесс выгрузки информации из базы в файл с возможнжостью загрузки из него в дальнейшем на том же сервере или на другом. Выполняется с помощью инструментов mongoexport (mongoimport) и mongodump (mongorestore).
Последние значительно лучше поскольку сохраняют данные в формате BSON, именно с ним работает MongoDB. mongoimport / mongoexport сохраняют в JSON — он практически идентичен, но не полностью из-за чего возможны некоторые непредвиденные ситуации. ниже рассмотрены все инструментами для работы с дампами.
mongodb export: инструменты для создания дампа
Установим пакет на сервер с Ubuntu, затем создадим тестовую базу, collection и на их примере рассмотрим способы создания дампа.
apt-get install mongodb
Имя сервиса в системе — mongodb. Проверим статус выполнив systemctl status mongodb
Заходим в оболочку MongoDB
mongo
MongoDB shell version: 2.6.10
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type «help».
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
show dbs
admin (empty) local 0.078GB
По умолчанию есть 2 базы, создаем новую firstdb
use firstdb
switched to db firstdb
Увидеть ее можно будет только после добавления Collection
show dbs
admin (empty) local 0.078GB
Это аналог таблицы в реляционных базах данных
db.createCollection("firstone")
{ "ok" : 1 }
show dbs
admin (empty) firstdb 0.078GB local 0.078GB
Теперь нужно поместить в базу какие-то данные. Все они создаются в виде JS объектов, которые затем сохраняются в Collection выбранной базы
someobject = {value: "test", index: "1"};
{ "value" : "test", "index" : "1" }
Сохранение выполняется так
db.firstone.save(someobject)
WriteResult({ "nInserted" : 1 })
Т.е. db.COLLECTION_NAME.save(RECORD_NAME), важно при этом использовать именно ту базу, в которой сохраняются данные
Выходим из шел MongoDB CTRL + C
bye
Утилиты mongoexport и mongoimport
Отличительная особенность — данные сохраняются в формате JSON
mongoexport -d firstdb -c firstone -o firstone.json
connected to: 127.0.0.1
exported 1 records
Так выглядит результат:
mcedit firstone.json
{ "_id" : { "$oid" : "5b0959d1d83dd6a998d72750" }, "value" : "test", "index" : "1" }
Поменяем индекс на 2 чтобы отследить, что измененный дамп успешно загрузится в дальнейшем
Теперь снова зайдем в шел и удалим созданную для демонстрации базу
mongo
db.dropDatabase()
{ "dropped" : "firstdb", "ok" : 1 }
Запрашиваем содержимое Collection firstone
db.firstone.find()
Команда вернет пустой результат
Снова создаем базу и Collection
use firstdb
db.createCollection(
"firstone"
)
{ "ok" : 1 }
Покидаем шел CTRL + C
bye
Теперь в созданную структуру можно загрузить данные из файла
mongoimport -d firstdb -c firstone firstone.json
connected to: 127.0.0.1
2018-05-26T13:07:19.760+0000 imported 1 objects
mongo
db.firstone.find()
{ "_id" : ObjectId("5b0959d1d83dd6a998d72750"), "value" : "test", "index" : "2" }
Информация снов в базе, индекс при этом равен двум. Это то значение, которое установили в JSON файле перед его загрузкой.
MongoDB export и утилита mongodump
Инструменты mongodump / mongorestore для сохранения базы в файл и загрузки из него соответственно более совершенны. Они работают с BSON и наиболее деликатно экспортируют и импортируют данные.
Создаем отдельный каталог и переходим в него
mkdir dump && cd dump/
При выгрузке дампа указывается имя базы
mongodump --db firstdb
connected to: 127.0.0.1
2018-05-26T13:09:10.012+0000 DATABASE: firstdb to dump/firstdb
2018-05-26T13:09:10.013+0000 firstdb.system.indexes to dump/firstdb/system.indexes.bson
2018-05-26T13:09:10.013+0000 firstdb.firstone to dump/firstdb/firstone.bson
2018-05-26T13:09:10.014+0000 1 documents
2018-05-26T13:09:10.014+0000 Metadata for firstdb.firstone to dump/firstdb/firstone.metadata.json
На выходе имеем файл firstone.bson
~/dump# ls -la dump/firstdb/firstone.*
total 20
drwxr-xr-x 2 root root 4096 май 26 13:09 .
drwxr-xr-x 3 root root 4096 май 26 13:09 ..
-rw-r—r— 1 root root 51 май 26 13:09 firstone.bson
-rw-r—r— 1 root root 98 май 26 13:09 firstone.metadata.json
Снова для проверки удаляем тестовую базу
mongo
MongoDB shell version: 2.6.10
connecting to: test
use firstdb
switched to db firstdb
switched to db firstdb
db.dropDatabase()
{ "dropped" : "firstdb", "ok" : 1 }
^C
bye
Находясь в каталоге с дампом запускаем загрузку mongorestore
mongorestore
connected to: 127.0.0.1
2018-05-26T13:11:40.961+0000 dump/firstdb/firstone.bson
2018-05-26T13:11:40.961+0000 going into namespace [firstdb.firstone]
1 objects found
2018-05-26T13:11:40.962+0000 Creating index: { key: { _id: 1 }, name: «_id_», ns: «firstdb.firstone» }
mongo
MongoDB shell version: 2.6.10
connecting to: test
use firstdb
switched to db firstdb
switched to db firstdb
db.firstone.find()
{ "_id" : ObjectId("5b0959d1d83dd6a998d72750"), "value" : "test", "index" : "2" }
{ "_id" : ObjectId("5b0959d1d83dd6a998d72750"), "value" : "test", "index" : "2" }
Восстановление выполнено успешно, для mongorestore не понадобилось воссоздавать структуру базы. Этот инструмент использовать для экспортирования удобнее всего.
Читайте статью про Collections и базы данных в MongoDB