忧郁者 发表于 2018-10-25 10:42:12

NoSQL -- Mongodb 安装 使用 副本集 备份恢复


  Mongodb 是由c++编写的基于分布式文件存储的开源数据库系统,介于关系数据库和非关系数据库之间,支持查询语言很强大。高负载情况下,添加多个节点保证服务器性能,旨在为web应用提供可扩展的高性能存储;mongodb将数据存储为一个文档,由键值对(key=>value)组成,类似json对象。
  官网:https://www.mongodb.com/
  应用:
  CERN,著名的粒子物理研究所,欧洲核子研究中心大型强子对撞机的数据使用MongoDB;
  Craiglist,上使用MongoDB的存档数十亿条记录;
  Shutterfly,以互联网为基础的社会和个人出版服务,使用MongoDB的各种持久性数据存储的要求;
  Intuit公司,一个为小企业和个人的软件和服务提供商,为小型企业使用MongoDB的跟踪用户的数据;


  mongodb 安 装
  www.apelearn.com/bbs/data/download/mongodb-org-3.0.tar.gz//rpm包,大家 可以用
  官方提供的源只支持64位系统,安装的epel扩展源,可以安装mongodb2.4版本,此次我们安装3.0版本
  vim /etc/yum.repos.d/mongodb-org-3.0.repo//加入如下内容
  
  name=MongoDB Repository
  baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
  gpgcheck=0
  enabled=1
  安装:yum install -y mongodb-org
  编辑:vim /etc/mongod.conf
  fork: true
  pidFilePath: /var/run/mongodb/mongod.pid
  bind_ip: 192.168.1.1,192.168.1.2,192.168.1.3# 留空的话表示监听所有
  注:把这两行后面#开头的注释删掉,否则重启的时候会有问题
  echo never > /sys/kernel/mm/transparent_hugepage/enabled
  echo never > /sys/kernel/mm/transparent_hugepage/defrag
  vim /etc/security/limits.conf //加入
  mongod soft nofile 64000
  mongod hard nofile 64000
  mongod soft nproc 32000
  mongod hard nproc 32000
  启动:service mongod start   # 启动的过程会比较慢,这是它在写数据 /var/lib/mongo
  启动失败的话,可用下面方式启动:mongod -f /etc/mongod.conf
  mongodb 的 使 用
  mongodb 连接:
  mongo   //直接进入mongo的shell
  mongo --port 27018   //指定监听端口进入
  mongo --host 127.0.0.1   //连接远程mongo
  mongo -uusername -ppasswd   //设置验证时指定用户名密码,和mysql类似
  mongodb 用户管理:
  use admin    //切换到admin库下,admin和test是默认自带的俩库
  use teng12   //切换到teng12库,不存在会自动创建
  show users   //查看当前库下所有的用户
  db.system.users.find()   //列出所有用户,需要切换到admin库
  db.createUser({user:"admin",pwd:"123456",roles:[{role:'dbOwner',db:'userdb'}]})   //创建用户
  db.dropUser('admin') //删除用户
  用户角色:http://bbs.51cto.com/thread-1146654-1.html
  mongodb 库管理:
  db.stats()    //查看当前库的信息
  db.version()   //查看版本
  show teng12//查看库,该库是空的所以无userdb,创建个集合就可看到
  db.createCollection('clo1')   //创建集合clo1,在当前库下面创建
  db.dropDatabase()   //删除当前库,要想删除某个库,必须切换到那个库下
  db.serverStatus()   //查看mongodb服务器的状态
  mongodb 集合:

  db.createCollection("mycol", { capped : true, autoIndexID : true,>  //语法:db.createCollection(name,options)
  name:集合的名字。options可选,用来配置集合的参数,参数如下
  autoindexIDtrue/false (可选)如果为true,自动创建索引_id字段的默认值是false;
  capped true/false (可选)如果为true,则启用封顶集合。达其最大值就会覆盖最早条目;
  size (可选)指定最大大小字节封顶集合。封顶如果是 true,那么你还需要指定这个字段。单位B
  max (可选)指定封顶集合允许在文件的最大数量
  mongodb 数据管理:
  db.Account.insert({AccountID:1,UserName:"123",password:"123456"})   //创建集合
  db.Account.update({AccountID:1},{"$set":{"Age":20}})   //更新
  show collections   //查看集合,或者使用showtables
  db.Account.find()   //查看所有文档
  db.Account.drop()   //删除所有文档,即删除集合
  db.printCollectionStats()// 然后查看集合状态
  db.Account.find({AccountID:1})   //根据条件查询
  db.Account.remove({AccountID:1})//根据条件删除
  副 本 集
  早期版本使用一主一从,类似mysql,但slave在此架构为只读,主宕机后,从无法自动切为换主;
  目前已由主从改为副本集,为一主(primary)多从(secondary,只读),支持以权重切换从为主,此架构中可建立一个仲裁(arbiter)角色,只负责裁决,不存储数据,此架构中读写数据都在主上,若实现负载均衡需要手动指定从库的目标server。

primarysecondarysecondary192.168.1.1192.168.1.2192.168.1.3  编辑:vim /etc/mongod.conf   # 之后重启三台机器
replication:  
##oplog大小
  
oplogSizeMB: 20
  
##复制集名称
  
replSetName: teng
  连接主,在主上运行命令mongo
  > use admin
  > config={_id:"teng",members:[{_id:0,host:"192.168.1.1:27017"},{_id:1,host:"192.168.1.2:27017"},{_id:2,host:"192.168.1.3:27017"}]}
  > rs.initiate(config)
  > rs.add("192.168.1.2")
  > rs.add("192.168.1.3")
  rs.status() //查看状态
  如果两个从上的状态为"stateStr" : "STARTUP", 则需要进行如下操作
  > var config=config={_id:"teng",members:[{_id:0,host:"192.168.1.1:27017"},{_id:1,host:"192.168.1.2:27017"},{_id:2,host:"192.168.1.3:27017"}]}
  > rs.reconfig(config)
  此时再次查看rs.status()会发现从的状态变为SECONDARY
  主上建库,建集合
  > use mydb
  > db.acc.insert({AccountID:1,UserName:"123",password:"123456"})
  > show dbs
  从上查看
  > show dbs
  若出现错误Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" },需要执行
  > rs.slaveok()
  更改权重模仿主宕机:
  默认三台机器权重都为1,如果任何一个权重设置为比其他的高,则该台机器马上切换为primary角色,所以我们预设三台机器的权重分别为:1:3,2:2,3:1
  在主上执行
  cfg = rs.conf()
  cfg.members.priority = 3
  cfg.members.priority = 2
  cfg.members.priority = 1
  rs.reconfig(cfg)
  这样的话,第二个节点将会成为候选主节点。
  主上执行:iptables -I INPUT -p tcp --dport 27017 -j DROP
  mongodb 备 份 恢 复
  备份指定库:mongodump -h ip -d dbname -o dir   //-o后指定备份到哪里,它是一个目录
  备份所有库:mongodump -h ip -o dir   //不加数据库dbname,则备份所有库
  备份指定集合:mongodump -d mydb -c testc -o /tmp/testc   //-c指定集合名字
  导出指定集合:mongoexport -d mydb -c testc -o /tmp/testc.json   //-o后面跟的是一个文件名字
  恢复指定库:mongorestore -d mydb dir/   //-d 恢复库的名字,dir就是该库备份时所在的目录
  恢复所有库:mongorestore --drop dir/    //--drop可选,指恢复之前删除之前数据,不建议使用
  恢复集合:mongorestore -d mydb -c testc dir/mydb/testc.bson // -c 集合名,bson文件的路径
  导入集合:mongoimport -d mydb -c testc --file /tmp/testc.json
  -------------------------------------------------------------------------------------------------


页: [1]
查看完整版本: NoSQL -- Mongodb 安装 使用 副本集 备份恢复