CentOS7でのMongoDBのインストールと基本的な操作方法
インストール環境の説明
システム環境の説明
[root@master ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@master ~]# uname -r
3.10.0-693.el7.x86_64
[root@master ~]# hostname -I
192.168.174.200 192.168.122.1
ソフトウェアバージョン
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.3.tgz
インストール方法
ユーザーの作成
groupadd -g 800 mongodb
useradd -u 806 -g mongodb mongodb
パスワードの変更
echo 123456 |passwd --stdin mongodb
ディレクトリを作成する
mkdir -p /usr/local/mongodb/27017/ &&\
cd /usr/local/mongodb/27017/ &&\
mkdir -p bin conf log data
プログラムのダウンロード
cd /usr/local/mongodb/27017/
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.3.tgz
プログラムの解凍
tar xf mongodb-linux-x86_64-rhel70-3.6.3.tgz
cd mongodb-linux-x86_64-rhel70-3.6.3/bin/ &&\
cp * /usr/local/mongodb/27017/bin
プログラムのプロパティを変更する
chown -R mongodb:mongodb /usr/local/mongodb/27017
環境変数の設定
su - mongod
cat >> .bash_profile <<'EOF'
export PATH=/usr/local/mongodb/27017/bin:$PATH
EOF
source .bashprofile
If the .bashprofile does not exist, run vim .bashprofile
Start: mongod --dbpath=/usr/local/mongodb/27017/data --logpath=/usr/local/mongodb/27017/log/mongodb.log --port=27017 --logappend
Shutdown: mongod --shutdown --dbpath=/usr/local/mongodb/27017/data --logpath=/usr/local/mongodb/27017/log/mongodb.log --port=27017 --logappend
この時点で、インストールは完了です
MongoDBの管理
--logpath Log file path
--master Specifies the master machine
--slave Specifies the slave machine
--source Specify the IP address of the master machine
--pologSize Specify that the log file size should not exceed 64M. Since resync is very operational and time consuming, it is best to avoid resync by setting a large enough oplog size (the default oplog size is 5% of the free disk size).
--logappend Add at the end of the log file
--port Enable port number
--fork to run in the background
--only Specify which database to copy only
--slavedelay Specify the time interval from replication detection
--auth whether to authenticate the login (username and password)
-h [ --help ] show this usage information
--version show version information
-f [ --config ] arg configuration file specifying additional options
--port arg specify port number
--bind_ip arg local ip address to bind listener - all local ips
bound by default
-v [ --verbose ] be more verbose (include multiple times for more
verbosity e.g. -vvvvv)
--dbpath arg (=/data/db/) directory for datafiles Specify the data storage directory
--quiet quieter output silent mode
--logpath arg file to send all output to instead of stdout Specify the logging directory
--logappend appnd to logpath instead of over-writing Specify whether the logs are written to the log file as append or overwrite
--fork fork server process to run as a child process
--cpu periodically show cpu and iowait utilization periodically show cpu and io usage
--noauth run without security run in no-authentication mode
--auth run with security authentication mode
--objcheck inspect client data for validity on receipt
--quota enable db quota management Start database quota management
--quotaFiles arg number of files allower per db, requires --quota specify the number of files allowed per database
--appsrvpath arg root directory for the babble app server
--nocursors diagnostic/debugging option debug diagnostic option
--nohints ignore query hints ignore query hits
--nohttpinterface disable http interface disable http interface, default is 28017
--noscripting disable scripting engine disable scripting engine
--noprealloc disable data file preallocation disable database file size preallocation
--smallfiles use a smaller default file size Use a smaller default file size
--nssize arg (=16) .ns file size (in MB) for new databases default size of ns file for new databases
--diaglog arg 0=off 1=W 2=R 3=both 7=W+some reads provide the way to read only, write only, or read/write, or mostly write + some read mode
--sysinfo print some diagnostic system information print system diagnostic information
--upgrade upgrade db if needed
--repair run repair on all dbs repair all databases
--notablescan do not allow table scans
--syncdelay arg (=60) seconds between disk syncs (0 for never) System synchronization time to refresh disks, default is 60s
Replication options:
--master master mode master replication mode
--slave slave mode slave replication mode
--source arg when slave: specify master as <server:port> specify master's address and port when slave
--only arg when slave: specify a single database to replicate When slave, specify the single database to be replicated from the master
--pairwith arg address of server to pair with
--arbiter arg address of arbiter server used in master-master and pair with
--autoresync automatically resync if slave data is stale automatically synchronize slave data
--opl
パラメータの説明
<テーブル<スパン パラメータ
<スパン パラメータの説明
--dbpath
データ保存パス
--ログパス
ログファイルのパス
--ログアペンド
ログ出力方法
--ポート
ポート番号の有効化
--フォーク
バックグラウンドで動作している
--auth
ログイン許可(ユーザー名とパスワード)の確認が必要であるかどうか
--バインドIP
ipへのアクセスを制限する
--シャットダウン
データベースを閉じる
mongo
データベースへのログイン
cd /usr/local/mongodb/27017/conf
vim mongodb.conf
dbpath=/usr/local/mongodb/27017/data
logpath=/usr/local/mongodb/27017/log/mongodb.log
port=27017
logappend=1
設定ファイルのアプローチでデータベースを管理する
Start: mongod -f mongodb.conf
Shutdown: mongod -f mongodb.conf --shutdown
設定ファイルによる起動・終了
mongod -f mongodb.conf &
設定ファイルを使ってバックグラウンドで実行する
vim mongodb.yaml
systemLog:
destination: file
path: "/usr/local/mongodb/27017/log/mongodb.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/usr/local/mongodb/27017/data"
net:
port: 27017
Start: mongod -f mongodb.yaml
Backend: mongod -f mongodb.yaml &
Shutdown: mongod -f mongodb.yaml --shutdown
バージョン3.Xでは、YAML形式の設定ファイルを使用することが公式に推奨されています。
mongo
use admin
db.shutdownServer()
Notes.
The mongod process receives the SIGINT signal or SIGTERM signal and does some processing
> Close all open connections
> Force flush memory data to disk
> The current operation is executed
> Safe stop
Do not kill -9
Database shutdown directly, data loss, data file loss, repair database (costly and risky)
Use kill command to shut down the process
$ kill -2 PID
Principle: -2 means send SIGINT signal to mongod process.
Or
$ kill -4 PID
Principle: -4 means send SIGTERM signal to mognod process.
vim /etc/init.d/mongod
#! /bin/bash
#!
#MongoDB service management
#################################
MONGODIR=/usr/local/mongodb/27017/
MONGOD=$MONGODIR/bin/mongod
MONGOCONF=$MONGODIR/conf/mongodb.conf
InfoFile=/tmp/start.mongo
. /etc/init.d/functions
status(){
PID=`awk 'NR==2{print $NF}' $InfoFile`
Run_Num=`ps -p $PID|wc -l`
if [ $Run_Num -eq 2 ]; then
echo "MongoDB is running"
else
echo "MongoDB is shutdown"
return 3
fi
}
start() {
status &>/dev/null
if [ $? -ne 3 ];then
action "Starting MongoDB, service is running... " /bin/false
exit 2
fi
sudo su - mongodb -c "$MONGOD -f $MONGOCONF" >$InfoFile 2>/dev/null
if [ $? -eq 0 ];then
action "Start MongoDB" /bin/true
else
action "Start MongoDB" /bin/false
fi
}
stop() {
sudo su - mongodb -c "$MONGOD -f $MONGOCONF --shutdown" &>/dev/null
if [ $? -eq 0 ];then
action "Stop MongoDB" /bin/true
else
action "Stop MongoDB" /bin/false
fi
}
case "$1" in
start)
start
;;
stop)
stop
stop ;;
restart)
stop
sleep 2
start
start;;
status)
status
status ;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac
[root@master ~]# mongo 192.168.174.200:27017/admin
MongoDB shell version v3.4.13
connecting to: mongodb://192.168.174.200:27017/admin
MongoDB server version: 3.4.13
Server has startup warnings:
2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten]
2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten]
2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten]
2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten]
2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-04-09T01:23:25.364+0800 I CONTROL [initandlisten]
> db
admin
> db.version()
3.4.13
>
でのデータベースのシャットダウン
> use test;
switched to db test
> db
test
> db
test
> db.getName();
test
スクリプトによるサービスの管理
> show dbs;
admin 0.000GB
local 0.000GB
> show databases;
admin 0.000GB
local 0.000GB
> db.getMongo()
connection to 192.168.174.200:27017
MongDBの基本操作
クエリーの操作
データベースへの接続
> use mydb;
switched to db mydb
データベースのバージョンを見る
Creating a database.
When use is used, the system automatically creates a database.
If no collection is created after use. The system then deletes this database.
> show dbs;
admin 0.000GB
local 0.000GB
mydb 0.000GB
> use mydbs;
switched to db mydbs
> db.dropDatabase()
{ "ok" : 1 }
データベースの切り替え
> use mydbs;
switched to db mydbs
> db.dropDatabase()
{ "ok" : 1 }
現在のデータベースを表示する
Deleting databases.
If no database is selected, the default test database is deleted
すべてのデータベースを表示する
> db.createCollection('a')
{ "ok" : 1 }
> db.createCollection('b')
{ "ok" : 1 }
現在のデータベース・マシンの接続アドレスを表示する
> show collections
a
b
> show getCollectionNames()
2018-04-09T16:41:33.145+0800 E QUERY [thread1] Error: don't know how to show [getCollectionNames()] :
shellHelper.show@src/mongo/shell/utils.js:919:11
shellHelper@src/mongo/shell/utils.js:672:15
@(shellhelp2):1:1
> db.getCollectionNames();
[ "a", "b" ]
>
運用管理
データベースの作成
Description: A collection is automatically created when a document is inserted.
> db.c.insert({name:'test1','age':123})
WriteResult({ "nInserted" : 1 })
> db.c.insert({address:'haerbin'})
WriteResult({ "nInserted" : 1 })
説明
> db.c.find()
{ "_id" : ObjectId("5acb28b94a893f4e9544610e"), "name" : "test1", "age" : 123 }
{ "_id" : ObjectId("5acb29444a893f4e9544610f"), "address" : "haerbin" }
>
> db.c.renameCollection("d")
{ "ok" : 1 }
> show collections;
a
b
d
>
> db.a.drop();
true
> show collections;
b
d
>
データベースを削除する
> for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date& quot;:new Date()}); }
WriteResult({ "nInserted" : 1 })
> db.log.find();
説明
> DBQuery.shellBatchSize=50; # Display 50 records per page
50
> db.log.findOne() # View the 1st record
> db.log.count() # Query the total number of records
> db.log.find({uid:100}); # Query data with UUID of 100
コレクションを作成する
方法1.
{
user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>",
db: "<database>" } | "<role>",
...
]
}
コレクションを表示する
user field: the user's name;
pwd field: the user's password;
cusomData field: any content, e.g. the user's full name can be introduced;
roles field: specifies the roles of the user, an empty array can be used to set empty roles for new users.
roles field: you can specify built-in roles and user-defined roles.
方法2
use admin
db.createUser(
{
user: "root",
pwd: "root",
roles: [ { role: "root", db: "admin" } ]
}
)
コレクションの中身を見る
When you create an administrator role user, you must create it under admin.
When deleting, you must also go to the appropriate library.
コレクションの名前を変更する
> show tables;
system.users # Where users are stored
system.version
コレクションを削除する
> show users
{
"_id" : "admin.root",
"user" : "root",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
>
500行のデータを一括挿入
> db.auth("root","root")
1 # Returns 1 for success
注:デフォルトでは1ページに20行表示されるので、それ以上表示できない場合は、it iterationコマンドで次のページのデータを照会することができます。
cat >>/usr/local/mongodb/27017/conf/mongodb.yaml<<-'EOF'
security:
authorization: enabled
EOF
MongoBDのユーザー管理
ユーザー権限の説明
<テーブル
<スパン アクセス権
<スパン 説明
読む
指定されたデータベースの読み込みを許可する
リードライト
指定されたデータベースに対するユーザーの読み書きを許可する
dbAdmin
インデックスの作成、削除、統計情報の表示、システムプロファイルへのアクセスなど、指定されたデータベースにおける管理機能の実行を許可する。
ユーザーアドミニストレータ
指定されたデータベースのユーザーを作成、削除、管理するための system.users コレクションへのユーザーの書き込みを許可します。
クラスタアドミニストレータ
管理者データベースでのみ利用可能で、ユーザーにすべてのスライスおよびレプリカセット関連機能の管理者権限を与えます。
readAnyDatabase
管理者データベースでのみ利用可能で、すべてのデータベースへの読み取り権限を付与します。
readWriteAnyDatabase
管理者データベースでのみ利用可能で、すべてのデータベースへの読み取りと書き込みのアクセス権をユーザーに与える
userAdminAnyDatabase
管理データベースでのみ利用可能で、すべてのデータベースの userAdmin 権限をユーザーに付与します
dbAdminAnyDatabase
管理データベースでのみ利用可能で、ユーザーdbAdminにすべてのデータベースへのアクセス権限を与えます。
ルート
管理者データベースでのみ利用可能です。スーパーアカウント、スーパー権限
ユーザー権限の詳細については、https://docs.mongodb.com/manual/core/security-built-in-roles/ を参照してください。
ユーザー作成構文
{
user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>",
db: "<database>" } | "<role>",
...
]
}
構文説明
user field: the user's name;
pwd field: the user's password;
cusomData field: any content, e.g. the user's full name can be introduced;
roles field: specifies the roles of the user, an empty array can be used to set empty roles for new users.
roles field: you can specify built-in roles and user-defined roles.
admin ユーザーの作成
管理者データベースへのアクセス
use admin
root権限を持つadminユーザーを作成します。
db.createUser(
{
user: "root",
pwd: "root",
roles: [ { role: "root", db: "admin" } ]
}
)
備考
When you create an administrator role user, you must create it under admin.
When deleting, you must also go to the appropriate library.
作成されたユーザーのコレクションを表示する
> show tables;
system.users # Where users are stored
system.version
作成された管理者ユーザーを表示する
> show users
{
"_id" : "admin.root",
"user" : "root",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
>
ユーザーが利用可能であることを確認する
> db.auth("root","root")
1 # Returns 1 for success
ユーザーを作成した後、設定ファイルでユーザー認証を有効にします。
cat >>/usr/local/mongodb/27017/conf/mongodb.yaml<<-'EOF'
security:
authorization: enabled
EOF
SQLとMongoDBの言語比較
SQL言語とCRUD言語の比較
<テーブルSQLスキーマステートメント
MongoDB スキーマステートメント
CREATE TABLE users (
id MEDIUMINT NOT NULL
auto_incrementを指定します。
user_id Varchar(30)。
年齢番号
ステータス char(1),
PRIMARY KEY (id)
)
最初の insert() 操作で暗黙的に作成されます。
キー _id は、_id フィールドが指定されていない場合、自動的に追加されます。
db.users.insert( { <未定義
user_id: "abc123",
年齢 55,
ステータス: "A"。
} )
しかし、明示的にコレクションを作成することもできます。
db.createCollection("users")
ALTER TABLE users
ADD join_date DATETIME
Collectionレベルではデータ構造の概念はない。しかし、ドキュメントレベルでは、データ構造を $set で作成することができます。
update操作で、ドキュメントにカラムを追加します。
db.users.update()
{ },
{ $set: { join_date: new Date() }. },
{ multi: true }.
)
ALTER TABLE users
DROP COLUMN join_date
コレクションレベルでは、データ構造の概念はありません。しかし、ドキュメントレベルでは、データ構造は$unsetによって変更することができます。
を使用すると、ドキュメントからカラムを削除することができます。
db.users.update()
{ },
{ $unset: { join_date: "" }.
{マルチ: true }.
)
CREATE INDEX idx_user_id_asc
ON users(user_id)
db.users.createIndex( { user_id: 1 } )
CREATE INDEX
idx_user_id_asc_age_desc
ON users(user_id, age DESC)
db.users.createIndex( { user_id: 1, age: -1 } ) になります。
DROP TABLE users
db.users.drop()
挿入・削除・更新文の比較
<テーブルSQLステートメント
<スパン MongoDBステートメント
INSERT INTO
users(user_id,
年齢
ステータス)
VALUES("bcd001"。
45,
A"A")。
db.users.insert()
{ user_id: "bcd001", age:
45, ステータス: "A" }.
)
DELETE FROM users
WHERE status = "D"。
db.users.remove( { status: "D" } ) を実行します。
DELETE FROM users
db.users.remove({})
UPDATEユーザー
SET ステータス = "C"
WHERE 年齢 > 25
db.users.update()
{年齢: { $gt: 25 }. },
{ $set: { status: "C" }.
{ multi: true }.
)
UPDATEユーザー
SET age = age + 3
WHERE status = "A"。
db.users.update()
{ status: "A" }. ,
{ $inc: { age: 3 } }. }
{マルチ: true }.
)
クエリクラス操作の比較
<テーブルSQL SELECTステートメント
MongoDB の find() ステートメント
SELECT *を選択します。
FROM ユーザー
db.users.find()
SELECT ID。
user_id。
ステータス
FROMユーザー
db.users.find()
{ },
{ user_id: 1, ステータス: 1、_id: 0 }
)
SELECT user_id, status
FROM ユーザー
db.users.find()
{ },
{ user_id: 1, ステータス: 1 }
)
SELECT *を選択します。
FROM ユーザー
WHERE status = "A"。
db.users.find()
{ status: "A" }.
)
SELECT user_id, status
FROM ユーザー
WHERE status = "A"。
db.users.find()
{ status: "A" },
{ user_id: 1, ステータス: 1、_id: 0 }
)
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン