http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 2896|回复: 1

[MongoDB] Mongodb命令集合

[复制链接]
发表于 2014-7-18 10:42:23 | 显示全部楼层 |阅读模式
[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"})  
     
     
     

本帖被以下淘专辑推荐:



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-7-18 11:32:31 | 显示全部楼层
这个好,收藏一下!
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-3 01:43

© 2014-2021

快速回复 返回顶部 返回列表