MongoDB セットアップ手順

シングル構成の MongoDB セットアップ手順をメモとして残します。

検証環境

インストー

リポジトリ情報の作成

標準リポジトリには含まれていないため、新しく作成します。
上手くインストールできない場合は gpgcheck=0 にして gpgkey=… の行を除いてください。

# vi /etc/yum.repos.d/mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

パッケージインストー

yum でパッケージをインストールします。

# yum -y install mongodb-org

バージョン 3.4 がインストールされたことを確認します。

# mongo --version
MongoDB shell version v3.4.4
git version: 888390515874a9debd1b6c5d36559ca86b44babd
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
allocator: tcmalloc
modules: none
build environment:
    distmod: rhel70
    distarch: x86_64
    target_arch: x86_64

サービスの起動と自動起動の設定を有効にします。

# systemctl start mongod
# systemctl enable mongod

設定変更

3.x 系は設定ファイルを YAML で記述します。
ローカルホスト以外からの接続を許可する設定を有効にします。

# vi /etc/mongod.conf

net:
  port: 27017
  bindIp: 0.0.0.0
  http:
    enabled: true

上記の設定の再読み込みをします。

# systemctl restart mongod

ユーザまわりの設定

ユーザ追加

mongo コマンドで対話型シェル起動し、admin ユーザを作成します。

# mongo --host localhost --port 27017
> use admin
> db.createUser(
    {
      user: "admin",
      pwd: "password",
      roles: [ { role: "root", db: "admin" } ]
    }
  )

test-user ユーザを作成します。
role: "readOnly" にすると権限を読み込み限定に設定できます。

> use test-db
> db.createUser(
    {
      user: "test-user",
      pwd: "password",
      roles: [ { role: "readWrite", db: "test-db" } ]
    }
  )

作成したユーザを確認します。

> use admin
> db.system.users.find()

認証の有効化

ユーザ認証機能を有効にします。

# vi /etc/mongod.conf

security:
  authorization: enabled

設定を再読み込みし、ユーザ認証が有効化されたことを確認します。

# systemctl restart mongod
# mongo --host localhost --port 27017
> use admin
> db.system.users.find()

認証を行わない状態でユーザ一覧を出そうとするとエラーが返ってきます。

> db.auth("admin","password")
> db.system.users.find()

作成した admin と test-user が表示されていれば認証成功です。

ユーザの削除

DB 名を指定し、以下の remove() コマンドを実行します。

> use test-db
> db.dropUser("test-user")

データベースの操作

コレクション作成

test-db に test というコレクションを作成します。

> use test-db
> db.auth("test-user","password")
> db.createCollection("test")
> show collections

ドキュメント追加

適当な値を test コレクションに追加します。

> db.test.insert( { "foo" : "bar" } )
> db.test.find( { "foo" : "bar" } )

ドキュメントの件数カウント

コレクションのドキュメント数は count() で件数を表示できます。
find() と同様に括弧内にクエリを書くことで条件を絞ることも可能です。

> db.test.count()

削除系コマンド

ドキュメントを削除します。
括弧内に指定が無いとコレクション内のドキュメントが全件消去されます。

> db.test.remove( { "foo": "bar" } )

コレクションを削除します。

> db.test.drop()

データベース自体を削除します。

> use test-db
> db.dropDatabase()

ダンプとリストア

ダンプ

Bashmongodump コマンドでカレントディレクトリに dump を出力します。

# mongodump --db test-db --collection test --authenticationDatabase test-db --username test-user --password password --out ./dump

# ls ./dump/test-db/
test.bson  test.metadata.json

–db を指定しないと全てのデータベースを対象に BSON からリストアされます。

リストア

復元前に test コレクションを削除します。

> use test-db
> db.auth("test-user","password")
1
> db.test.drop()

mongodump と同様の指定方法で mongorestore します。

# mongorestore --db test-db --collection test --authenticationDatabase test-db --username test-user --password password ./dump/test-db/test.bson

消したコレクション・ドキュメントが復元されていればリストア完了です。

# mongo --host localhost --port 27017
> use test-db
> db.auth("test-user", "password)
> db.test.count()
1

参考サイト