最近公司有个项目要用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库下创建,创建完后可以执行备份恢复其他所有库。
!!!切记执行任何库的操作时都必须先切换到对应的库下面
原文地址:http://blog.51cto.com/gyj110/2087501