zoukankan      html  css  js  c++  java
  • 四十三.MongoDB副本集 MongoDB文档管理

    一、部署MongoDB副本集
    1.1 启用副本集配置并指定集群名称 rs1
    1.2 定义集群成员列表
    部署好机器51,52,53:51上配置
    bind_ip=192.168.4.51(要改)
    port=27051(要改)
    logpath=/usr/local/mongodb/log/mongodb.log
    logappend=true
    dbpath=/usr/local/mongodb/data/db
    fork=true
    replSet=rs1(51 52 53都一样)
     
    ]#/usr/local/mongodb/bin/mongo --host 192.168.4.51 --port 27051 
    > config={ 
    _id:"rs1", 
    members:[ 
    {_id:0,host:"192.168.4.51:27051"}, 
    {_id:1,host:"192.168.4.52:27052"}, 
    {_id:2,host:"192.168.4.53:27053"} 
    }
     
    {
    "_id" : "rs1",
    "members" : [
    {
    "_id" : 0,
    "host" : "192.168.4.51:27051"
    },
    {
    "_id" : 1,
    "host" : "192.168.4.52:27052"
    },
    {
    "_id" : 2,
    "host" : "192.168.4.53:27053"
    }
    ]
    }
     
    1.3 创建集群
    > rs.help()
    > rs.initiate(config)
    {
    "ok" : 1,
    "operationTime" : Timestamp(1550480025, 1),
    "$clusterTime" : {
    "clusterTime" : Timestamp(1550480025, 1),
    "signature" : {
    "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
    "keyId" : NumberLong(0)
    }
    }
    }
    rs1:SECONDARY> 
    rs1:PRIMARY>
     
    1.4 查看集群信息
    > rs.status()
    > rs.isMaster()
     
    1.5 客户端50 访问集群存取数据
    ]#/usr/local/mongodb/bin/mongo  --host 192.168.4.51 --port 27051
    >show dbs
    > use db15
    > show  tables
    > db.a.save({name:"bob"})
    > db.a.find()
     
    在从库自己连接自己 查看是否有主库的数据(52为例)
    允许对数据做操作  >db.getMongo( ).setSlaveOk( ) //从库要
    ]# /usr/local/mongodb/bin/mongo --host 192.168.4.52 --port 27052
    rs1:SECONDARY> db.getMongo( ).setSlaveOk( )
    rs1:SECONDARY> show dbs;
    admin   0.000GB
    config  0.000GB
    db15    0.000GB
    local   0.000GB
    rs1:SECONDARY> use db15
    switched to db db15
    rs1:SECONDARY> show tables
    a
    rs1:SECONDARY> db.a.find()
    { "_id" : ObjectId("5c6a736ab913a8c67af617d3"), "name" : "bob" }
     
    1.6 测试集群功能(高可用功能测试)
    停止当前主库的mongodb服务,
    在2个副本主机查看集群状态信息(两个副本机会随机选举一个作为主库)
    把坏掉的主库修复后会自动配置位当前主库的副本主机并自动同步宕机期间的数据
     
    1.7 集群的工作过程 ?
     
    二、文档管理 192.168.4.50
    把/etc/passwd 文件的内容存储到bbsdb库下的user6集合里
    (使用备份文件恢复 或 数据导入 都可以 完成)
     
    插入文档 save()  insert()  insertMany()
    > db.a.save({_id:1,name:"bob"})
    > db.a.save({_id:2,name:"jerry"})
    > db.a.find()
     
    > db.a.insert({_id:1,name:"lucy"})
    > db.a.insert({_id:2,name:"lucy"})
     
    > db.a.insertMany([ {_id:4,name:"lucyA"} , {name:"liliBB"} ,{age:1} ])
     
    > db.a.find()
     
    查询文档 
    find() findOne() limit() skip() sort()  count()
    db.集合名.find({条件},{字段列表})
    > use bbsdb
     
    > db.user6.find({},{_id:0, name:1})
    > db.user6.find({name:"root"})
    > db.user6.find({name:"root"},{uid:1,name:1,_id:0})
     
    > db.user6.find({},{_id:0, name:1}).limit(3)
    > db.user6.find({},{_id:0, name:1}).limit(10)
     
    > db.user6.find({},{_id:0, name:1}).skip(2)
     
    > db.user6.find({},{_id:0, name:1,uid:1}).sort({uid:1})
    > db.user6.find({},{_id:0, name:1,uid:1}).sort({uid:-1})
     
    查询/更新/删除文档的匹配条件
     
    相等比较  
    > db.集合名.find({字段名:值},{字段值列表})
     
    > db.user6.find({uid:1},{_id:0})
    > db.user6.find({name:"root"},{_id:0})
     
    逻辑与比较
    > db.集合名.find({字段名:值,字段名:值},{字段值列表})
     
    > db.user6.find({name:"root",shell:"abc"},{_id:0})
    > db.user6.find({name:"root",shell:"/bin/bash"},{_id:0})
     
    逻辑或比较 $or
    > db.集合名.find({$or:[{条件1},{条件2},{条件3}]},{字段值列表})
     
    > db.user6.find({ $or:[{uid:1},{uid:3},{uid:9}]  },{_id:0,name:1,uid:1})
    > db.user6.find({ $or:[{uid:1},{name:"bin"},{name:"rsync"}]  },{_id:0,name:1,uid:1})
     
    范围比较 $in  $nin
    > db.集合名.find({字段名:{比较命令:[值列表]}},{字段值列表}) 
     
    > db.user6.find({shell:{$nin:["/bin/bash","/sbin/nologin"]}},{_id:0,name:1,shell:1})
     
    > db.user6.find({uid:{$in:[8,4,7]}},{_id:0,name:1,uid:1})
     
    正则匹配
    > db.user6.find({name:/a/},{_id:0,name:1})
    > db.user6.find({name:/^[ac]/},{_id:0,name:1})
    > db.user6.find({name:/d$/},{_id:0,name:1})
     
    数值比较
    $gt $gte  $lt $lte  $ne  
    >   >=      <   <=     !=
     
    > db.user6.find({uid:{$gt:100} },{_id:0,name:1,uid:1} )
    > db.user6.find({uid:{$gt:100} },{_id:0,name:1,uid:1} ).count()
    > db.user6.find({uid:{$gt:100} },{_id:0,name:1,uid:1} ).sort({uid:1})
    > db.user6.find({uid:{$gt:100} },{_id:0,name:1,uid:1} ).sort({uid:1}).limit(1)
     
    > db.user6.find({uid:{$gte:10,$lte:20} },{_id:0,name:1,uid:1} )
     
    空 null
    > db.user6.save({name:null,uid:999})
    > db.user6.find({name:null},{_id:0,name:1,uid:1})
     
    更新文档 update()
     
    db.集合名.update({条件},{字段列表})
    把文档的其他字段都删除了,只留下了修改的字段,且只修改与条件匹配的第1行!!!
     
     
    > db.user6.find({uid:{$lte:5}},{_id:0}).count()
    > db.user6.find({uid:{$lte:5}},{_id:0})
     
    > db.user6.update({uid:{$lte:5}},{password:"AAA"})
     
    > db.user6.find({uid:{$lte:5}},{_id:0}).count()
    > db.user6.find({uid:{$lte:5}},{_id:0})
     
    > db.user6.find({password:"AAA"})
     
    db.集合名.update({条件},{$set:{字段列表}},false,true)
     
     
    $set 条件匹配时,修改指定字段的值
     
    > db.user6.update({uid:{$lte:5}},{ $set:{password:"FFF",gid:2000}},false,true)
     
     
    $unset 删除与条件匹配文档的字段
     
    > db.user6.find({name:"adm"},{_id:0})
    > db.user6.update({name:"adm"},{$unset:{password:"FFF"}})
    > db.user6.find({name:"adm"},{_id:0})
     
    $inc  条件匹配时,字段值自加或自减
     
    > db.user6.find({name:"adm"},{_id:0,uid:1})
    > db.user6.update({name:"adm"},{$inc:{uid:11}}) 正数自加
    > db.user6.update({name:"adm"},{$inc:{uid:-1}}) 负数自减
     
    数组类型的操作命令
    $push $addToSet $pop $pull
     
    > db.ta.save({name:"bob", like:["a","b","c","d","e"] })
     
    > db.ta.update({name:"bob"},{$push:{like:"A"}})
    > db.ta.update({name:"bob"},{$push:{like:"A"}})
     
    > db.ta.find({name:"bob"},{_id:0})
     
    > db.ta.update({name:"bob"},{$addToSet:{like:"A"}})
    > db.ta.find({name:"bob"},{_id:0})
    > db.ta.update({name:"bob"},{$addToSet:{like:"G"}})
     
    > db.ta.update({name:"bob"},{$pop:{like:1}})
    > db.ta.update({name:"bob"},{$pop:{like::-1}})
     
    > db.ta.update({name:"bob"},{$pull:{like:"A"}})
     
    删除文档
    > db.user6.remove({uid:{$lte:10}})
    > db.user6.remove();
    > show  tables
    > db.user6.drop()
     
    +++++++++++++++++++++++++++++++++++++++
    三.部署LNMP+MongoDB  192.168.4.50  (mongo-1.6.16.tgz)
    1 安装提供mongo模块软件软件包
      188  tar -zxvf mongo-1.6.16.tgz 
      190  cd mongo-1.6.16/
      192  phpize 
      197  ./configure --with-php-config=/usr/bin/php-config
      198  make
      199  make install
      200  ls /usr/lib64/php/modules/mongo.so
    1.6.16]# ls /usr/lib64/php/modules/
    curl.so      json.so      mongo.so   mysql.so      pdo.so         phar.so   sqlite3.so
    fileinfo.so  mbstring.so  mysqli.so  pdo_mysql.so  pdo_sqlite.so  redis.so  zip.so
     
    2 配置php程序运行时加载模块
    ]# vim /etc/php.ini
     728 extension_dir = "/usr/lib64/php/modules/"
     729 ; On windows:
     730 extension = "redis.so"
     731 extension = "mongo.so"
    :wq
     
    ]# systemctl restart php-fpm
     
    ]# php -m | grep -i mongo
    mongo
     
    ]# php -m | grep -i redis
    redis
     
    3 编写连接mongodb服务的php脚本
    ]# cp linkmongodb.php  /usr/local/nginx/html/mdb1.php
    ]# vim  /usr/local/nginx/html/mdb1.php
    <?php
    $m = new Mongo("mongodb://192.168.4.50:27050");
    $db = $m->buysite;
    $c = $db->usera;
    $data=array("name"=>"bob","age"=>19);
    $c->insert($data);
    echo  "data ok";
    ?>
    :wq
     
    ]# cp linkmongodb.php  /usr/local/nginx/html/mdb2.php
    ]# vim /usr/local/nginx/html/mdb2.php 
    <?php(直接把源link的php文件集群那行删掉)
    $m = new MongoClient("mongodb://192.168.4.53:27053,192.168.4.52:27052,192.168.4.51:27051");
    $db = $m->db1;
    $c = $db->t15;
    $data=array("name"=>"bob","age"=>19);
    $c->insert($data);
    echo  "data ok";
    ?>
    :wq
     
    4 在客户端访问网站的php脚本
     
    5 在mongodb服务器本机查看是否存储数据了
    ]# /usr/local/mongodb/bin/mongo --host 192.168.4.50 --port 27050
    > show dbs
    > use buysite
    > db.usera.find()
     
    ]# /usr/local/mongodb/bin/mongo --host 192.168.4.53 --port 27053
    > show dbs
    > use db1
    > db.t15.find()
  • 相关阅读:
    Sql Server Tempdb原理-日志机制解析实践
    Sql Server 高频,高并发访问中的键查找死锁解析
    SQL Server 高并发Insert数据解析,实践
    Sql Server 2012新特性 Online添加非空栏位.
    SQL Server 利用批量(batchsize)提交加快数据生成/导入
    SQL Server 最小化日志操作解析,应用
    SQL Server 统计信息(Statistics)-概念,原理,应用,维护
    SQL Server 索引知识-应用,维护
    BigDecimal加减乘除计算
    如何判断一个String字符串不为空或这不为空字符串
  • 原文地址:https://www.cnblogs.com/luwei0915/p/10494641.html
Copyright © 2011-2022 走看看