Euquid Blog.

WEBエンジニアの技術ブログ。主に個人開発で学んだことの備忘録です。

MongoDBのバックアップ/リストア

Cover Image for MongoDBのバックアップ/リストア

Node.js からデータを投入

db.collection.initializeOrderedBulkOp() を使う。

const MongoClient = require('mongodb').MongoClient;

const url = 'mongodb://user:password@127.0.0.1:27017/sample'; // db名: "sample"

const connectOption = {
  useNewUrlParser: true,
  useUnifiedTopology: true,
};

MongoClient.connect(url, connectOption, (err, client) => {
  if (err) {
    return;
  }

  const db = client.db('sample');

  const bulk = db.collection('products').initializeOrderedBulkOp(); // collection名: "products"
  bulk.insert({ name: 'pen', price: 120 });
  bulk.insert({ name: 'note', price: 120 });
  bulk.insert({ name: 'eraser', price: 100 });
  bulk.insert({ name: 'paste', price: 180 });
  bulk.insert({ name: 'ciseaux', price: 320 });
  bulk.insert({ name: 'cellophanetape', price: 80 });
  bulk.execute((err, result) => {
    client.close();
  });
});

登録されたか確認する

$ mongo
...
> use sample
...
> db.auth({ user: "user", pwd: "password" })
...
> db.products.find()
{ "_id" : ObjectId("5ebb8d1e24bd920f0a3ad569"), "name" : "pen", "price" : 120 }
{ "_id" : ObjectId("5ebb8d1e24bd920f0a3ad56a"), "name" : "note", "price" : 120 }
{ "_id" : ObjectId("5ebb8d1e24bd920f0a3ad56b"), "name" : "eraser", "price" : 100 }
{ "_id" : ObjectId("5ebb8d1e24bd920f0a3ad56c"), "name" : "paste", "price" : 180 }
{ "_id" : ObjectId("5ebb8d1e24bd920f0a3ad56d"), "name" : "ciseaux", "price" : 320 }
{ "_id" : ObjectId("5ebb8d1e24bd920f0a3ad56e"), "name" : "cellopharentape", "price" : 80 }

bson 形式でバックアップ

バックアップ

$ mongodump -u user -p password -d sample -o /home/vagrant/workspace/mongo01/backup
2020-05-13T15:24:24.439+0900	writing sample.products to
2020-05-13T15:24:24.458+0900	done dumping sample.products (6 documents)

リストア

$ mongorestore -u user1 --authenticationDatabase sample --nsInclude sample.* /home/vagrant/workspace/mongo01/backup
Enter password:

2020-05-13T15:26:39.243+0900	preparing collections to restore from
2020-05-13T15:26:39.250+0900	reading metadata for sample.products from /home/vagrant/workspace/mongo01/backup/sample/products.metadata.json
2020-05-13T15:26:39.290+0900	restoring sample.products from /home/vagrant/workspace/mongo01/backup/sample/products.bson
2020-05-13T15:26:39.293+0900	no indexes to restore
2020-05-13T15:26:39.294+0900	finished restoring sample.products (6 documents, 0 failures)
2020-05-13T15:26:39.295+0900	6 document(s) restored successfully. 0 document(s) failed to restore.

アーカイブ形式でバックアップ

バックアップ

$ mongodump -u user1 -p password -d sample --gzip --archive=/home/vagrant/workspace/mongo01/backup/archive.dump
2020-05-13T15:37:17.867+0900	writing sample.products to archive '/home/vagrant/workspace/mongo01/backup/archive.dump'
2020-05-13T15:37:17.873+0900	done dumping sample.products (6 documents)

リストア

$ mongorestore -u user1 --authenticationDatabase sample --drop --gzip --archive=/home/vagrant/workspace/mongo01/backup/archive.dump
Enter password:

2020-05-13T15:39:20.584+0900	preparing collections to restore from
2020-05-13T15:39:20.595+0900	reading metadata for sample.products from archive '/home/vagrant/workspace/mongo01/backup/archive.dump'
2020-05-13T15:39:20.635+0900	restoring sample.products from archive '/home/vagrant/workspace/mongo01/backup/archive.dump'
2020-05-13T15:39:20.638+0900	no indexes to restore
2020-05-13T15:39:20.638+0900	finished restoring sample.products (6 documents, 0 failures)
2020-05-13T15:39:20.638+0900	6 document(s) restored successfully. 0 document(s) failed to restore.