標籤:mongodb
最近公司有個項目要用mongodb,之前沒搞過,今天臨時磨刀上陣,花了半天時間研究,中間有遇到幾個坑寫出來分享給大家。
tar -zxf mongodb-linux-x86_64-v3.6.3.tgz
cp -pr mongodb-linux-x86_64-v3.6.3 /usr/local/mongodb
mkdir -p /data/mongodb/logs
touch /data/mongodb/logs/mongodb.log
vi /data/mongodb/bin/mongodb.conf
dbpath=/data/mongodb/data
logpath=/data/mongodb/logs/mongodb.log
port=27017
fork=true
auth=true
logappend=true
nojournal=true
nohttpinterface=true
/usr/local/mongodb/bin/mongod --bind_ip 172.31.31.63 -f /usr/local/mongodb/conf/mongodb.conf
echo "export PATH=/usr/local/mongodb/bin:$PATH" >> /etc/profile
source /etc/profile
串連到mongodb:
mongo 172.31.31.63:27017
show dbs //查看資料庫
use admin //切換到admin庫,若admin庫不存在則會建立admin
show users //查看使用者
db.createUser({user:"admin",pwd:"123456",roles:["root"]}); //建立超級管理使用者
db.createUser({user:"USRADM",pwd:"123456",roles:[ "userAdminAnyDatabase"]}); //建立使用者管理員賬戶
db.changeUserPassword('admin','147258');//修改密碼
db.dropUser('admin') //刪除使用者
db.auth("admin","147258"); //admin登入認證
db.auth("USRADM","123456"); //USRADM登入認證
#############################################################################################
內建角色
1、資料庫使用者角色
read:允許使用者讀取指定資料庫
readWrite:允許使用者讀寫指定資料庫
2、資料庫管理員角色
dbAdmin:允許使用者進行索引建立、刪除,查看統計或訪問system.profile,但沒有角色和使用者管理的許可權
userAdmin:提供了在當前資料庫中建立和修改角色和使用者的能力
dbOwner: 提供對資料庫執行任何管理操作的能力。這個角色群組合了readWrite、dbAdmin和userAdmin角色授予的特權
3、叢集管理角色
clusterAdmin : 提供最強大的叢集管理訪問。組合clusterManager、clusterMonitor和hostManager角色的能力。還提供了dropDatabase操作
clusterManager : 在叢集上提供管理和監視操作。可以訪問配置和本機資料庫,這些資料庫分別用於分區和複製
clusterMonitor : 提供對監控工具的唯讀訪問,例如MongoDB雲管理器和Ops管理器監控代理
hostManager : 提供監視和管理伺服器的能力。
4、備份恢複角色
backup : 提供備份資料所需的能力,使用MongoDB雲管理器備份代理、Ops管理器備份代理或使用mongodump
restore : 提供使用mongorestore恢複資料所需的能力
5、所有資料庫角色
readAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀許可權
readWriteAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀寫權限
userAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的userAdmin許可權
dbAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的dbAdmin許可權
6、超級使用者角色
root:提供對readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin、restore和backup的所有資源的訪問
7、內部角色
__system : 提供對資料庫中任何對象的任何操作的特權
#############################################################################################
//建立使用者BackupUser,並賦予備份恢複角色
db.createUser({user: "BackupUser",pwd: "123456",roles: [
{ role: 'backup', db: 'admin' },
{ role: 'restore', db: 'admin' }
]});
use students //建立資料庫
db.createUser({user: "user1",pwd: "user123456",roles: [ { role: "readWrite", db: "students" } ]}); //建立students庫讀寫權限使用者
db.auth("user1","user123456");
db.clas.insert({"name":"wang"}); //向clas集合(表)插入3條資料
db.clas.insert({"name":"zhang"});
db.clas.insert({"name":"li"});
db.clas.remove({}); //刪除clas集合裡面所有資料記錄
db.clas.find(); //查詢clas集合裡面所有資料記錄
db.clas.drop(); //刪除clas集合(表)
show collections; //查看集合(表)
db.dropDatabase(); //刪除資料庫
匯出students庫的資料:
mongodump -h 172.31.31.63:27017 --authenticationDatabase admin -d students -u BackupUser -p -o /root/test/
-h 主機IP:連接埠
-d 要備份的庫
-u 具有backup角色的使用者
-p 備份使用者的密碼
-o 備份目錄路徑
--authenticationDatabase 備份使用者BackupUser所屬的資料庫
匯入students庫的資料:
mongorestore -h 172.31.31.63:27017 --authenticationDatabase admin -d students -u BackupUser -p --directoryperdb /root/test/students
-h 主機IP:連接埠
-d 恢複的目標庫
-u 具有restore角色的使用者
-p 恢複使用者的密碼
--directoryperdb 恢複目錄路徑
--authenticationDatabase 恢複使用者BackupUser所屬的資料庫
需要注意的坑:
1.認證問題,比如上面我有一個admin使用者,只有use admin切換到admin庫下面才能認證成功。
2.比如我上面已經建立了一個USRADM使用者並賦予了相應的角色,當前這個角色它具有賦予使用者所有資料庫的userAdmin許可權。現在我想為students庫建立一個使用者且分配置userAdmin角色。此時若我在admin庫下面執行則會失敗,必須切換到students庫下面操作才能成功。
3.備份恢複角色的使用者只能在admin庫下建立,建立完後可以執行備份恢複其他所有庫。
!!!切記執行任何庫的操作時都必須先切換到對應的庫下面
mongodb安裝配置以及其他基礎操作