[C#] 纯文本查看 复制代码
show dbs 查看所有数据库
db 查看当前数据库
db.help() 当前数据库支持哪些方法
db.dropDatabase() 删除数据库
db.getCollectionNames() 获取当期数据库下边的集合(表)
show collections 所有表
help 查看Mongo支持哪些命令
db.version() 查看版本信息
用户配置
重启数据库,重启时加入 --auth 命令行选项,开启安全检查
use admin
--超级管理员
db.addUser("sa","sa")
USE 其他库
--该库的私有用户
db.addUser("ceshi","mima")
--只读用户
db.addUser("ceshi","mima",true)
--用户验证
db.auth("ceshi","mima")
--查看所有用户
db.system.users.find()
--删除用户
db.system.users.remove({"user":"refactor_read"})
ctrl + C 退出当前连接
--连接远程数据库、
mongo 192.168.0.197:27017
mongo -u admin -p admin 192.168.0.197:27017/pagedb
-------备份恢复
--备份(到mongodb的安装目录执行 )
例如:要将192.168.10.9上数据库manager的数据备份,存放在d:\data下
mongodump -h 192.168.10.9 -d manager -o d:\data
--恢复
--mongorestore -h dbhost -d dbname --directoryperdb dbdirectory
-h:MongoDB所在服务器地址
-d:需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
--directoryperdb:备份数据所在位置,例如:c:\data\dump\test,这里为什么要多加一个test,
--而不是备份时候的dump,读者自己查看提示吧!
--drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
--索引
--创建索引
db.test.ensureIndex({"username":1})
--符合速印
db.test.ensureIndex({"userid":1,"age":1})
--唯一索引
db.test.ensureIndex({"userid":1},{"unique":true})
--符合唯一索引
db.test.ensureIndex({"userid":1,"age":1},{"unique":true})
--索引后台创建(这样的创建不会阻塞其他操作)
db.test.ensureIndex({"username":1},{"background":true})
--删除索引
db.test.dropIndex({"username":1})
--删除指定集合的所有索引:
db.collection.dropIndexes();
重建索引命名会重建集合中所有的索引
db.myCollection.reIndex()
--system.indexes集合中包含了每个索引的详细信息
db.system.indexes.find()
快捷键 Ctrl+C 退出当前连接
--[url=http://www.cnblogs.com/huangxincheng/archive/2012/03/04/2379755.html]http://www.cnblogs.com/huangxinc ... /03/04/2379755.html[/url]
############ 1.master slave 主从复制集群(用处不大)
1. 启动主服务器时加上 --master参数 标示主服务器 别的参数根据情况选择()
2. 启动从服务器加上 --slave(表示从服务器)--source(表示主数据库的地址)=127.0.0.1:27017 (mongod --dbpath=xxxx --port=8888 --slave --source=127.0.0.1:27017)
3. 如果启动的时候没有指定主数据库来源(mongod --dbpath=xxxx --port=8888 --slave ) 则后期可以通过local数据库添加进来 eg:
use local
db.sources.insert({"host":"127.0.0.1:8888"});
db.sources.find()
4.查看主从复制状态
rs.isMaster()
db.printReplicationInfo()
5.增加节点或删除节点
db.sources.insert({“host”:”IP:port”})
db.sources.remove({“host”:”IP:port”})
########### 2.replset 副本集集群配置
1. 启动(多台)mongo服务器并且指定集群名(集群名称后边可以指定成员ip 也可以不指定; 集群服务器安全验证模式启动用keyFile,它包含了auth,1.txt 为集群)
##解释 mongod --dbpath=F:\mongodb4\data\db --logpath=F:\mongodb4\data\db\1.txt(必须指定文件,文件会自动生成) --port 27014 --replSet jjoobb(集群名) ####keyFile(安全模式启动)=F:\mongodb4\data\key\1.txt(该文件必须在每个成员中存在,并且符合一定规则)
mongod --dbpath=F:\mongodb4\data\db --logpath=F:\mongodb4\data\db\1.txt --port 27014 --replSet jjoobb --keyFile=F:\mongodb4\data\key\1.txt
2.初始化集群成员
#method 1
db.runCommand({"replSetInitiate":{"_id":"jjoobb","members":[{"_id":1,"host":"1
27.0.0.1:27011"},{"_id":2,"host":"127.0.0.1:27012"},{"_id":3,"host":"127.0.0.1:2
7013"}]}})
#method 2
config_replset1 = { _id:"replset1", members: [{_id:0,host:"192.168.0.188:18010",priority:4}, {_id:1,host:"192.168.0.188:18011",priority:2},
{_id:2,host:"192.168.0.188:18012",arbiterOnly : true}]}
rs.initiate(config_replset1);
##method 3 也可以这样指定优先级
rs.initiate({
_id : "elain",
members : [
{_id : 1, host : "md01:27017", priority:2},
{_id : 2, host : "md02:27017", priority:3},
{_id : 3, host : "md03:27017", priority:4},
] });
#priority 是设置优先级的,默认优先级为1,可以是1-1000的数字 数字越高优先级越高,如果宕掉的机器优先级比较高启动后会重新选举primary
3.添加仲裁服务器
1.以1的方式启动服务器
2.rs.addArb("127.0.0.1:27014") 或者用rs.add("127.0.0.1:27014",true) 添加仲裁服务器
4.管理
1.rs.status() 查看集群里边各个服务器状态
2.rs.add("127.0.0.1:217014") 服务器按照1的方式启动后,用此命令添加副本集服务器
3.rs.add("127.0.0.1:217014",true) 或者 rs.addArg("127.0.0.1:27014") 服务器按照1的方式启动后,用此命令添加添加仲裁服务器
4.rs.remove("127.0.0.1:217014") 从集群中移除该节点 (移除之后关闭217014 服务器,集群中就不在显示该服务的removed状态了)
5.rs.slaveOk() 指定从服务器可读,只对当前连接有用,退出当前连接不可用,程序里边有对应的驱动程序
6.db.printSlaveReplicationInfo() 可以查看副本集同步情况
7.rs.reconfig(rs.conf()) 重置配置
rs.status 解释
self 这个信息出现在执行rs.status()函数的成员信息中
stateStr用户描述服务器状态的字符串。有SECONDARY,PRIMARY,RECOVERING等
uptime 从成员可到达一直到现在经历的时间,单位是秒。
optimeDate 每个成员oplog最后一次操作发生的时间,这个时间是心跳报上来的,因此可能会存在延迟
lastHeartbeat 当前服务器最后一次收到其他成员心跳的时间,如果网络故障等可能这个时间会大于2秒
pinMs 心跳从当前服务器达到某个成员所花费的平均时间
errmsg 成员在心跳请求中返回的状态信息,通过是一些状态信息,不全是错误信息。
state和stateStr是重复的,都表示成员状态,只是state是内部的叫法。
health表示是否服务器可达,可达是1,不可达是0
optime与optimeDate表达的信息也是一样的,只是表示的方式不同,一个是用新纪元开始的毫秒数表示的,一个是用一种更容易阅读的方式表示。
syncingTo表示当前服务器从哪个节点在做同步。
由于rs.status()是从执行命令成员本身的角度得出的,由于网路等故障,这份报告可能不准确或者有些过时。
db.printSlaveReplicationInfo() 结果解释
source:从库的ip和端口
syncedTo:目前的同步情况,以及最后一次同步的时间
从上面可以看出,在数据库内容不变的情况下他是不同步的,数据库变动就会马上同步。
########### 3.分片
1. 启动分片服务器(启动3台)
mongod --shardsvr --dbpath 路径 --logpath 日志文件 --port 端口
mongod --shardsvr --dbpath 路径 --logpath 日志文件 --port 端口
mongod --shardsvr --dbpath 路径 --logpath 日志文件 --port 端口
2.启动配置服务器
mongod --configsvr --dbpath 路径 --logpath 日志文件 --port 端口
3.启动路由服务器(不用指定数据文件路径,路由服务器并没有这是存储数据)
mongod --configdb 配置服务器的ip和端口 --logpath 日志文件 --port 端口
4.添加分片服务器到路由服务器,连接到任意一台路由服务器操作
sh.addShard("分片服务器ip地址和端口"); sh.addShard("分片服务器ip地址和端口"); sh.addShard("分片服务器ip地址和端口");
5.启用数据库分片选项
sh.enablesharding("数据库")
6.设定分片片键(片键必须为索引字段)true 代表是否唯一
sh.shardCollection("test.ceshi",{"name",1},true)
6.查看分片状态
sh.status()
########### 4.分片
+副本集
1. 启动分片服务器(启动3台,不用指定 shardsvr 参数)
按副本集方式分别启动三台服务器作为片
按副本集方式分别启动三台服务器作为片
按副本集方式分别启动三台服务器作为片
2.启动配置服务器
mongod --configsvr --dbpath 路径 --logpath 日志文件 --port 端口
mongod --configsvr --dbpath 路径 --logpath 日志文件 --port 端口
mongod --configsvr --dbpath 路径 --logpath 日志文件 --port 端口
3.启动路由服务器(不用指定数据文件路径,路由服务器并没有这是存储数据)
mongos --configdb 配置服务器的ip和端口 --logpath 日志文件 --port 端口
mongos --configdb 配置服务器的ip和端口 --logpath 日志文件 --port 端口
mongos --configdb 配置服务器的ip和端口 --logpath 日志文件 --port 端口
mongos --configdb "127.0.0.1:47011,127.0.0.1:47012,127.0.0.1:47013" --port 57012 --logpath F:\mongodb\mongos\mongodb2\data\log\1.txt
4.添加分片服务器到路由服务器,连接到任意一台路由服务器操作
sh.addShard("副本集名称/ip+端口,ip+端口,ip+端口");
sh.addShard("副本集名称/ip+端口,ip+端口,ip+端口");
sh.addShard("副本集名称/ip+端口,ip+端口,ip+端口");
5.启用数据库分片选项
sh.enablesharding("数据库")
6.设定分片片键(片键必须为索引字段)true 代表是否唯一
sh.shardCollection("test.ceshi",{"name",1},true)
6.查看分片状态
sh.status()
##########疑问
用优先级 代替仲裁,最好把优先级设置上再加上仲裁 数字越高优先级越高
--priorty (用优先级的话,挂掉的服务器重启之后如果他的级别比较高,会再次选举primary数据库)
--journal 这个选项是启用日志,在程序中控制可以恢复宕机到选举出primary过程的数据,这个需要在程序中控制
--directoryperdb 让数据库放到各自的目录里边分类管理
--rest
mongodb mms 和zabbix 是监控集群工具,mms试用用户同步比较慢
副本集+分片至少得三台电脑 分布如下(不能同时挂掉两台)
第一台 第二台 第三台
第一片 主 副本 仲裁
第二片 仲裁 主 副本
第三片 副本 仲裁 主
config config config
mongos mongos mongos
--副本集分片
mongodb\shard2\mongodb3\bin
mongod --dbpath F:\mongodb\shard2\mongodb3\data\db --port 37013 --replSet jjoobb2
--配置服务器
--dbpath /data/replset_sharding/config0 --configsvr --port 40000
mongodb\config\mongodb3\bin
mongod --dbpath F:\mongodb\config\mongodb3\data\db --configsvr --port 47013
writeconcern 写安全机制控制
####分片测试端口分布
分片1 27011 12 13
分片2 37011 12 13
配置服务器 47011 12 13
路由服务器 57011 12 13
100w 插入
SQL 13分6秒
mongodb 分片集群 3分29秒
mongodb 不分片 2分20秒
技术总是在不断进步,你需要市场关注这些信息:
Documentation: [url=http://www.mongodb.org/display/DOCS/Home]http://www.mongodb.org/display/DOCS/Home[/url]
Google Group: [url=http://groups.google.com/group/mongodb-user]http://groups.google.com/group/mongodb-user[/url]
Bugs: [url=https://jira.mongodb.org]https://jira.mongodb.org[/url]
Blog: [url=http://blog.mongodb.org/]http://blog.mongodb.org/[/url]
[url=mailto:1462249722@qq.com]1462249722@qq.com[/url]
liushuiheihei@1
wangliushuiMMS
--内嵌列表文档相关问题(不仅是内嵌文档,而且是数组)[url=http://lhkzyz.iteye.com/blog/1669796]http://lhkzyz.iteye.com/blog/1669796[/url]
--排序 {"kenameList.0._id":-1}
--组合查询(and)
--db.teacher.find("$elemMatch":{"students.age":"15","students.hobby":"football"})
--db.teacher.find({"students:"{"$elemMatch":{"age":"15","hobby":"football"}}})
--或查询(or)
--db.teacher.find({"students.age":"15","students.hobby":"football"})