MongoDB セットアップ手順
シングル構成の MongoDB セットアップ手順をメモとして残します。
検証環境
- CentOS 7.2
- MongoDB 3.4
インストール
リポジトリ情報の作成
標準リポジトリには含まれていないため、新しく作成します。
上手くインストールできない場合は 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 -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()
ダンプとリストア
ダンプ
Bash の mongodump
コマンドでカレントディレクトリに 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