Casual Developers Note

エンジニアやデザイナー向けの技術情報・英語学習情報・海外留学情報・海外旅行情報を提供中。世界を旅して人生を楽しもう。

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • お問い合わせ
現在の場所:ホーム / アーカイブbackup

2018年9月10日 By KD コメントを書く

MongoDBのユーザ権限設定、バックアップとリストアの方法

MongoDBのユーザ権限設定、バックアップとリストアの方法

最近はMongoDBを使う機会が増えてきましたね。今回は、MongoDBのユーザ権限設定と、バックアップとリストアの方法を紹介します。

はじめに

ドキュメント型のNoSQLといえばMongoDBです。MongoDBではデフォルトでユーザ権限の設定がされていないため、インストールするとすぐにローカルで動かすことができます。遊びで使うには良いですが、プロダクションとしてはユーサ権限の設定が必要です。そして、プロダクションではデータのバックアップも欠かせません。

今回は、プロダクションを少し意識して、MongoDBのユーザ権限設定と、バックアップとリストアの方法を紹介します。

MongoDBのインストールと初期設定

インストール

まずは、HomebrewでMongoDBをインストールしましょう。

$ brew install mongodb
$ mongo --version
MongoDB shell version v4.0.1
git version: 54f1582fc6eb01de4d4c42f26fc133e623f065fb
allocator: system
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64

初期設定

データベース用のフォルダと、mongodbの設定ファイルを編集します。

$ sudo mkdir -p /data/db
$ sudo chown -R $USER /data/db
$ vi /usr/local/etc/mongod.conf
systemLog:
  destination: file
  path: /data/db/mongo.log
  logAppend: true
storage:
  dbPath: /data/db
net:
  bindIp: 127.0.0.1

MongoDBの起動

それでは、HomebrewからMongoDBを起動しましょう。

$ brew services list
Name       Status  User          Plist
mongodb    stopped
$ brew services start mongodb
==> Successfully started `mongodb` (label: homebrew.mxcl.mongodb)
$ brew services list
Name       Status  User          Plist
mongodb    started user /Users/user/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
$ mongo
MongoDB shell version v4.0.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.1
> exit
bye

正常に起動し、ログインできました。

管理者ユーザの作成

管理者ユーザの作成

ユーザ管理用のユーザを作りましょう。

$ mongo
MongoDB shell version v4.0.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.1
> use admin
switched to db admin
> db.createUser({
... user: 'admin',
... pwd: 'admin',
... roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]
... })
Successfully added user: {
    "user" : "admin",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}
> exit
bye

ビルトインのユーザ権限に関しては公式ドキュメントを参照してください。

MongoDBの設定変更

MongoDBの設定ファイルにsecurityの項目を追加し、MongoDBを再起動します。

$ vi /usr/local/etc/mongod.conf
systemLog:
  destination: file
  path: /data/db/mongo.log
  logAppend: true
security:
  authorization: enabled
storage:
  dbPath: /data/db
net:
  bindIp: 127.0.0.1
$ brew services restart mongodb
Stopping `mongodb`... (might take a while)
==> Successfully stopped `mongodb` (label: homebrew.mxcl.mongodb)
==> Successfully started `mongodb` (label: homebrew.mxcl.mongodb)
$ mongo -u admin -p admin -authenticationDatabase admin
MongoDB shell version v4.0.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.1
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> exit
bye

管理者ユーザでログインできました。

データベースユーザの作成

データベースユーザの作成

次に、データベース用のユーザを作りましょう。例として「testdb」というデータベースのユーザ「test」を作ります。

$ mongo
MongoDB shell version v4.0.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.1
> use admin
switched to db admin
> db.auth('admin', 'admin')
1
> use testdb
switched to db testdb
> db
testdb
> db.createUser({
... user: 'test',
... pwd: 'test',
... roles: [{role: 'readWrite', db: 'testdb'}]
... })
Successfully added user: {
    "user" : "test",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "testdb"
        }
    ]
}
> db.getUsers()
[
    {
        "_id" : "testdb.test",
        "user" : "test",
        "db" : "testdb",
        "roles" : [
            {
                "role" : "readWrite",
                "db" : "testdb"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
]
> exit
bye

データの準備

次の章のバックアップとリストアに備えれ、carsコレクションを作り、データを入れて置きましょう。

$ mongo -u test -p test -authenticationDatabase testdb
MongoDB shell version v4.0.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.1
> use testdb
switched to db testdb
> db.createCollection('cars')
{ "ok" : 1 }
> show collections
cars
> db.cars.insertMany([
... { name: 'audi', price: 30000000, madeIn: 'germany' },
... { name: 'bentley', price: 29000000, madeIn: 'england' },
... { name: 'benz', price: 35000000, madeIn: 'germany' },
... { name: 'toyota suv', price: 5000000, madeIn: 'japan' }
... ])
{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("5b7e88fd243497cbcc098005"),
        ObjectId("5b7e88fd243497cbcc098006"),
        ObjectId("5b7e88fd243497cbcc098007"),
        ObjectId("5b7e88fd243497cbcc098008")
    ]
}
> db.cars.find()
{ "_id" : ObjectId("5b7e88fd243497cbcc098005"), "name" : "audi", "price" : 30000000, "madeIn" : "germany" }
{ "_id" : ObjectId("5b7e88fd243497cbcc098006"), "name" : "bentley", "price" : 29000000, "madeIn" : "england" }
{ "_id" : ObjectId("5b7e88fd243497cbcc098007"), "name" : "benz", "price" : 35000000, "madeIn" : "germany" }
{ "_id" : ObjectId("5b7e88fd243497cbcc098008"), "name" : "toyota suv", "price" : 5000000, "madeIn" : "japan" }
> exit
bye

BSON形式のバックアップとリストア

MongoDBのバックアップにはmongodumpコマンド、リストアにはmongorestoreを使います。

まずはBSON形式でバックアップして、リストアしてみましょう。

バックアップ

バックアップしましょう。

$ mkdir backup
$ mongodump -u test -p test -d testdb -o ./backup/20180423
2018-04-23T03:31:29.904-0700    writing testdb.cars to
2018-04-23T03:31:29.926-0700    done dumping testdb.cars (4 documents)
$ ls ./backup/
20180423/

リストア

データをドロップします。

$ mongo -u test -p test -authenticationDatabase testdb
MongoDB shell version v4.0.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.1
> use testdb
switched to db testdb
> db.cars.drop()
true
> db.cars.find()
> exit
bye

リストアしましょう。

$ mongorestore -u test -p test --authenticationDatabase testdb --nsInclude testdb.* --drop ./backup/20180423
2018-04-23T03:39:52.312-0700    preparing collections to restore from
2018-04-23T03:39:52.336-0700    reading metadata for testdb.cars from backup/20180423/testdb/cars.metadata.json
2018-04-23T03:39:52.473-0700    restoring testdb.cars from backup/20180423/testdb/cars.bson
2018-04-23T03:39:52.502-0700    no indexes to restore
2018-04-23T03:39:52.502-0700    finished restoring testdb.cars (4 documents)
2018-04-23T03:39:52.502-0700    done

データが元に戻っていることを確認します。

$ mongo -u test -p test -authenticationDatabase testdb
MongoDB shell version v4.0.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.1
> use testdb
switched to db testdb
> db.cars.find()
{ "_id" : ObjectId("5b7e88fd243497cbcc098005"), "name" : "audi", "price" : 30000000, "madeIn" : "germany" }
{ "_id" : ObjectId("5b7e88fd243497cbcc098006"), "name" : "bentley", "price" : 29000000, "madeIn" : "england" }
{ "_id" : ObjectId("5b7e88fd243497cbcc098007"), "name" : "benz", "price" : 35000000, "madeIn" : "germany" }
{ "_id" : ObjectId("5b7e88fd243497cbcc098008"), "name" : "toyota suv", "price" : 5000000, "madeIn" : "japan" }
> exit
bye

うまくいきました。

アーカイブ形式のバックアップとリストア

次に、アーカイブ形式でバックアップし、リストアしてみましょう。

バックアップ

バックアップしましょう。

$ mongodump -u test -p test -d testdb --gzip --archive=./backup/20180423.dump
2018-04-23T03:43:28.847-0700    writing testdb.cars to archive './backup/20180423.dump'
2018-04-23T03:43:28.873-0700    done dumping testdb.cars (4 documents)
$ ls  backup/
20180423.dump

リストア

データをドロップします。

$ mongo -u test -p test -authenticationDatabase testdb
MongoDB shell version v4.0.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.1
> use testdb
switched to db testdb
> db.cars.drop()
true
> db.cars.find()
> exit
bye

データをリストアしましょう。

$ mongorestore -u test -p test --authenticationDatabase testdb --drop --gzip --archive=./backup/20180423.dump
2018-04-23T03:47:26.174-0700    preparing collections to restore from
2018-04-23T03:47:26.249-0700    reading metadata for testdb.cars from archive './backup/20180423.dump'
2018-04-23T03:47:26.322-0700    restoring testdb.cars from archive './backup/20180423.dump'
2018-04-23T03:47:26.383-0700    no indexes to restore
2018-04-23T03:47:26.383-0700    finished restoring testdb.cars (4 documents)
2018-04-23T03:47:26.383-0700    done

データが元に戻っていることを確認しましょう。

$ mongo -u test -p test -authenticationDatabase testdb
MongoDB shell version v4.0.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.1
> use testdb
switched to db testdb
> db.cars.find()
{ "_id" : ObjectId("5b7e88fd243497cbcc098005"), "name" : "audi", "price" : 30000000, "madeIn" : "germany" }
{ "_id" : ObjectId("5b7e88fd243497cbcc098006"), "name" : "bentley", "price" : 29000000, "madeIn" : "england" }
{ "_id" : ObjectId("5b7e88fd243497cbcc098007"), "name" : "benz", "price" : 35000000, "madeIn" : "germany" }
{ "_id" : ObjectId("5b7e88fd243497cbcc098008"), "name" : "toyota suv", "price" : 5000000, "madeIn" : "japan" }
> exit
bye

ちゃんと戻っていますね。

最後に

いかがでしたか?MongoDBをより実践的に使えるようになったのではないでしょうか。それでは。

環境

  • PC: macOS High Sierra 10.13.6
  • Homebrew: 1.7.2
  • MongoDB: v4.0.1

カテゴリ : 技術 Tips & Tutorials タグ : auth, backup, mongodb, restore

ブログ更新情報や海外の関連情報などを配信する無料メルマガ

Sponsored Links

About Author

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。

https://casualdevelopers.com/

最近の投稿

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    2019年10月30日
  • BashからZshに移行する方法(Mac編)

    BashからZshに移行する方法(Mac編)

    2019年10月21日
  • Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    2019年9月30日

カテゴリ

  • 技術 Tips & Tutorials (100)
  • 技術塾 (6)
  • ライフハック (26)
  • 海外留学 (12)
  • 英語学習 (3)
  • コラム (6)

アーカイブ

最高の学習のために

人気記事ランキング

  • MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
    MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
  • Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
    Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
  • SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
    SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
  • バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
    バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
  • Amazon EC2インスタンスにSSHできなくなった時の対処法
    Amazon EC2インスタンスにSSHできなくなった時の対処法
  • Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
    Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
  • TumblrからWordPressにブログ移転する最適な方法
    TumblrからWordPressにブログ移転する最適な方法
  • SpringBootのProfile毎にプロパティを使い分ける3つの方法
    SpringBootのProfile毎にプロパティを使い分ける3つの方法
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~
    今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~
  • バンクーバー留学豆知識: バンクーバーのカジノを攻略せよ!必勝法を公開します!
    バンクーバー留学豆知識: バンクーバーのカジノを攻略せよ!必勝法を公開します!

Bitcoin寄付 / BTC Donation

Bitcoinを寄付しよう

BTC
Select Payment Method
Personal Info

Donation Total: BTC 0.0010

このブログの運営のためにBitcoinでの寄付を募集しています。お気持ち程度の寄付を頂けると管理者の励みになります。

Bitcoin寄付について知りたい方はこちらの記事へ

ビットコイン取引ならここ

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • サイトマップ
  • タグ一覧
  • プライバシーポリシー
  • お問い合わせ

Copyright © 2023 KD - Casual Developers Notes