一、MongoDB的远程连接以及授权
1、MOngoDB远程连接
mongo --host <mongos_host>:<port> -u <username> -p --authenticationDatabase <database>
参数
--authenticationDatabase 认证授权
也可以使用
连接本地数据库服务器,端口是默认的。
mongodb://localhost
使用用户名wulaoer,密码wulaoer.org登录localhost的admin数据库。
mongodb://wulaoer:wulaoer.org@localhost/baz
连接 replica pair, 服务器1为example1.com服务器2为example2。
mongodb://example1.com:27017,example2.com:27017
连接 replica set 三台服务器 (端口 27017, 27018, 和27019):
mongodb://localhost,localhost:27018,localhost:27019
连接 replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器。
mongodb://host1,host2,host3/?slaveOk=true
直接连接第一个服务器,无论是replica set一部分或者主服务器或者从服务器。
mongodb://host1,host2,host3/?connect=direct;slaveOk=true
当你的连接服务器有优先级,还需要列出所有服务器,你可以使用上述连接方式。
安全模式连接到localhost:
mongodb://localhost/?safe=true
以安全模式连接到replica set,并且等待至少两个复制服务器成功写入,超时时间设置为2秒。
mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000
例如:
./mongo --host s-2zead61791ed4.mongodb.rds.wulaoer.org:3717 -u wulaoer -p --authenticationDatabase wulaoer.org
MongoDB创建用户并授权
1、MongoDB创建库
use DATABASE_NAME #如果没有就创建,存在就事切换,新创建的库必须插入数据才可以show dbs
2、创建用户授权用户
db.createUser( { user: "wulaoer", pwd: "wulaoer.org", roles: [ { role: "角色", db: "安全认证的数据库" }, { role: "角色", db: "安全认证的数据库" } ] } )
注:
- user:创建的用户名称,如 zhangSan、root .......
- pwd:用户登录的密码
- roles:为用户分配的角色,不同的角色拥有不同的权限,参数是数组,可以同时设置多个
- role:角色,MonngoDB 已经约定好的角色,不同的角色对应不同的权限,内置的权限如下:
roles角色权限类型
read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库 dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限 userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 root:只在admin数据库中可用。超级账号,超级权限 // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
例如:
use wulaoer db.createUser( { user: "wulaoer", pwd: "wulaoer.org", roles: [ { role: "readWrite", db: "wulaoer" } ] } ) db.createUser({ user: "root", pwd: "root", roles: [ {role: "userAdminAnyDatabase", db: "admin"} ]})
验证授权认证
db.auth("wulaoer","wulaoer.org") #返回1,认证成功,0是失败
创建超级管理员
db.createUser( { user: "root", pwd: "root", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
三、MOngoDB的增删改查操作
MongoDB库的增删改查
show dbs;#查看数据库 use wulaoer;#如果没有就创建一个 db;#查看当前数据库 db.dropDatabase();#删除数据库
数据库操作
use wulaoer; #切换库,没有库即创建 show collections;#查看集合
创建集合、插入:
create collection;#创建集合 db.student.insert({"name":"张三","age":"22","sex":"男","class":"计算机2班"});#如果数据库中不存在集合,就创建并插入这些数据 db.student.insert({"name":"李四","age":"22","sex":"女","phone":"18513081650","class":"计算机1班"});#里面的key-value不用保持一致 db.student.insert([{"name":"王五","age":"22","sex":"男","class":"计算机2班"},{"name":"赵六","age":"22","sex":"女","phone":"18513081650","class":"计算机1班"}]);#同时插入多条数据
更新:
db.student.update({"name":"张三"},{"name":"张三丰"});#如果有多条语句,只修改第一条,会覆盖原有数据 db.student.update({"22":"女"},{"name":"张三丰"}); db.student.update({"name":"张三"},{$set:{"name":"张无忌"}});#只想改某个key的value使用set db.student.update({"name":"王五"},{$set:{"name":"张无忌"}},{multi:true});#把所有的记录都改了
查询:
db.student.find();#查询全部 db.student.find({"name":"李四"});#查询指定记录,返回这一行结果 db.student.update({"name":"张三丰"},{"name":"张无忌","age":"28","sex":"男"}); db.student.find({"name":"张无忌","age":"28"});#and操作 db.student.find({$or:[{"name":"张无忌"},{"name":"李四"}]});#or操作 db.student.find().pretty();#格式化显示 db.student.find().count();#获取结果的行数 db.student.find().sort({"age":-1});#按照sort里面key的值排序,1为正序,-1为倒序
删除:
db.dropDatabase() #删除库,不过需要进库之后才可以执行删除语句 db.test.drop(); #删除集合test db.student.remove();#删除所有数据 db.student.remove({"22":"女"});#按照条件删除 db.student.remove({"name":"张无忌"},2);#删除几条
查:
show collections #查看集合,需要先切换到dbs中
四、分片相关
查:
db.comment.getShardDistribution() #查看集合comment的分片状态 db.comment.count() #查看集合comment的数据多少条
开启均衡器
use admin sh.setBalancerState(true);
关闭均衡器
sh.stopBalancer() rs.add("ip:port"); # 新增从节点 rs.addArb("ip:port"); # 新增仲裁节点 rs.remove("ip:port"); # 删除一个节点
查看均衡器的状态
sh.getBalancerState()
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏