1. 邏輯結(jié)構(gòu)
Mongodb 邏輯結(jié)構(gòu) MySQL邏輯結(jié)構(gòu)
庫database 庫
集合(collection) 表
文檔(document) 數(shù)據(jù)行
2. 安裝部署
1、系統(tǒng)準(zhǔn)備
(1)redhat或cnetos6.2以上系統(tǒng)
(2)系統(tǒng)開發(fā)包完整
(3)ip地址和hosts文件解析正常
(4)iptables防火墻&SElinux關(guān)閉
(5)關(guān)閉大頁內(nèi)存機(jī)制
root用戶下
cat >>/etc/rc.local <<EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
[root@standby opt]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@standby opt]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
其他系統(tǒng)關(guān)閉參照官方文檔:
https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/
3. mongodb安裝配置
1\. 創(chuàng)建所需用戶和組
groupadd -g 800 mongod
useradd -u 801 -g mongod mongod
passwd mongod
2\. 創(chuàng)建mongodb所需目錄結(jié)構(gòu)
mkdir -p /mongodb/bin
mkdir -p /mongodb/conf
mkdir -p /mongodb/log
mkdir -p /mongodb/data
3\. 上傳并解壓軟件到指定位置
上傳到:
cd /opt/
解壓:
tar xf mongodb-linux-x86_64-rhel70-3.4.16.tgz
4\. 設(shè)置目錄結(jié)構(gòu)權(quán)限
chown -R mongod:mongod /mongodb
5\. 設(shè)置用戶環(huán)境變量
su - mongod
cat >> .bash_profile << EOF
export PATH=/mongodb/bin:$PATH
EOF
source .bash_profile
6\. 啟動(dòng)mongodb
mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork
7\. 登錄mongodb
[mongod@server2 ~]$ mongo
注:連接之后會(huì)有warning,需要修改(使用root用戶)
vim /etc/security/limits.conf
#* - nofile 65535
reboot重啟生效
8\. 使用配置文件
vim /mongodb/conf/mongodb.conf
logpath=/mongodb/log/mongodb.log
dbpath=/mongodb/data
port=27017
logappend=true
fork=true
9\. 關(guān)閉mongodb
mongod -f /mongodb/conf/mongodb.conf --shutdown
10\. 使用配置文件啟動(dòng)mongodb
mongod -f /mongodb/conf/mongodb.conf
YAML模式的配置文件
--
NOTE:
YAML does not support tab characters for indentation: use spaces instead.
--系統(tǒng)日志有關(guān)
systemLog:
destination: file
path: "/mongodb/log/mongodb.log" --日志位置
logAppend: true --日志以追加模式記錄
--數(shù)據(jù)存儲(chǔ)有關(guān)
storage:
journal:
enabled: true
dbPath: "/mongodb/data" --數(shù)據(jù)路徑的位置
-- 進(jìn)程控制
processManagement:
fork: true --后臺(tái)守護(hù)進(jìn)程
pidFilePath: <string> --pid文件的位置,一般不用配置,可以去掉這行,自動(dòng)生成到data中
--網(wǎng)絡(luò)配置有關(guān)
net:
bindIp: <ip> -- 監(jiān)聽地址,如果不配置這行是監(jiān)聽在0.0.0.0
port: <port> -- 端口號(hào),默認(rèn)不配置端口號(hào),是27017
-- 安全驗(yàn)證有關(guān)配置
security:
authorization: enabled --是否打開用戶名密碼驗(yàn)證
YAML例子
cat >> /mongodb/conf/mongo.conf << EOF
systemLog:
destination: file
path: "/mongodb/log/mongodb.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/mongodb/data/"
processManagement:
fork: true
net:
port: 27017
EOF
4. mongodb常用基本操作
-
啟動(dòng), 關(guān)閉, 配置文件啟動(dòng)
啟動(dòng): mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --for 關(guān)閉: mongod -f mongodb.conf --shutdown 配置文件啟動(dòng): mongod -f /mongodb/conf/mongo.conf -
mongodb 默認(rèn)存在的庫
test: 登錄時(shí)默認(rèn)存在的庫 管理mongodb有關(guān)的系統(tǒng)庫 admin庫: 系統(tǒng)預(yù)留庫,mongodb系統(tǒng)管理庫 local庫: 本地預(yù)留庫,存儲(chǔ)關(guān)鍵日志 -
命令分類
庫(database) show databases show dbs use oldguo db 表(collection集合) show tables show collections 數(shù)據(jù)行(document) db.表名.insert() 復(fù)制集有關(guān)(replication set): rs. 分片集群(sharding cluster) sh. 幫助 .help() db.help() db.a.help() rs.help() sh.help() -
常用操作
查看當(dāng)前db版本 db.version() 顯示當(dāng)前數(shù)據(jù)庫 db 查詢所有數(shù)據(jù)庫 show dbs 切換數(shù)據(jù)庫 use local 查看所有的collection show tables; 顯示當(dāng)前數(shù)據(jù)庫狀態(tài) use local db.stats() 查看當(dāng)前數(shù)據(jù)庫的連接機(jī)器地址 db.getMongo() -
mongo與mysql對(duì)應(yīng)關(guān)系
mongo mysql
庫 -----> 庫
集合 -----> 表
文檔 -----> 數(shù)據(jù)行 -
庫的操作:
創(chuàng)建數(shù)據(jù)庫: 當(dāng)use的時(shí)候,系統(tǒng)就會(huì)自動(dòng)創(chuàng)建一個(gè)數(shù)據(jù)庫。 如果use之后沒有創(chuàng)建任何集合。 系統(tǒng)就會(huì)刪除這個(gè)數(shù)據(jù)庫。 刪除數(shù)據(jù)庫 如果沒有選擇任何數(shù)據(jù)庫,會(huì)刪除默認(rèn)的test數(shù)據(jù)庫 db.dropDatabase() -
集合的操作:
方法1: db.createCollection('a') 方法2:當(dāng)插入一個(gè)文檔的時(shí)候,一個(gè)集合就會(huì)自動(dòng)創(chuàng)建。 db.stu.insert({id:101,name:"zhangsan",age:20,gender:"m"}) -
查詢數(shù)據(jù):
db.stu.find({}).pretty() db.stu.find({id:101}).pretty(); -
刪除集合
db.stu.drop() 重命名集合 , 把log改名為log1
```
db.log.renameCollection("log1")
```
- 批量插入數(shù)據(jù)
```
for(i=0;i<10000;i++){db.log.insert({"uid":i,
"name":"mongodb","age":6,"date":new Date()})}
```
5. 用戶管理
注意:
驗(yàn)證庫,建立用戶時(shí)use到的庫,在使用用戶時(shí),要加上驗(yàn)證庫才能登陸。
對(duì)于管理員用戶,必須在admin下創(chuàng)建.
use admin
mongo 10.0.0.200/admin
db.createUser
{
user: "<name>",
pwd: "<cleartext password>",
roles: [
{ role: "<role>",
db: "<database>" } | "<role>",
...
]
}
基本語法說明:
user:用戶名
pwd:密碼
roles:
role:角色名
db:作用對(duì)象
role:root, readWrite,read
驗(yàn)證數(shù)據(jù)庫:
mongo -u oldguo -p 123 10.0.0.200/oldguo
總結(jié):
1、在創(chuàng)建普通用戶時(shí),一般事先use 到想要設(shè)置權(quán)限的庫下;或者所有普通用戶使用同一個(gè)驗(yàn)證庫,比如test
2、root角色的創(chuàng)建,要在admin下進(jìn)行創(chuàng)建
3、創(chuàng)建用戶時(shí)你use到的庫,在將來登錄時(shí)候,使用以下方式登錄,否則是登錄不了的
-
創(chuàng)建超級(jí)管理員:管理所有數(shù)據(jù)庫(必須use admin再去創(chuàng)建)
$ mongo use admin db.createUser( { user: "root", pwd: "root123", roles: [ { role: "root", db: "admin" } ] } ) 驗(yàn)證用戶 db.auth('root','root123') 配置文件中,加入以下配置 security: authorization: enabled 重啟mongodb mongod -f /mongodb/conf/mongo.conf --shutdown mongod -f /mongodb/conf/mongo.conf 登錄驗(yàn)證 mongo -uroot -proot123 admin mongo -uroot -proot123 10.0.0.200/admin 查看用戶: use admin db.system.users.find().pretty() -
創(chuàng)建庫管理用戶
mongo -uroot -proot123 admin use app db.createUser( { user: "admin", pwd: "admin", roles: [ { role: "dbAdmin", db: "app" } ] } ) db.auth('admin','admin') 登錄測(cè)試 mongo -uadmin -padmin 10.0.0.200/app -
創(chuàng)建對(duì)app數(shù)據(jù)庫,讀、寫權(quán)限的用戶app01:
(1)超級(jí)管理員用戶登陸 mongo -uroot -proot123 admin (2)選擇一個(gè)驗(yàn)證庫 use app (3)創(chuàng)建用戶 db.createUser( { user: "app01", pwd: "app01", roles: [ { role: "readWrite" , db: "app" } ] } ) mongo -uapp01 -papp01 app -
創(chuàng)建app數(shù)據(jù)庫讀寫權(quán)限的用戶并對(duì)test數(shù)據(jù)庫具有讀權(quán)限:
mongo -uroot -proot123 10.0.0.200/admin use app db.createUser( { user: "app03", pwd: "app03", roles: [ { role: "readWrite", db: "app" }, { role: "read", db: "test" } ] } ) -
查詢mongodb中的用戶信息
mongo -uroot -proot123 10.0.0.200/admin db.system.users.find().pretty() -
刪除用戶(root身份登錄,use到驗(yàn)證庫)
刪除用戶 mongo -uroot -proot123 10.0.0.200/admin use app db.dropUser("app01")