青春纸盒子

文: 芦苇

你喜欢我笑的样子

我靠上了落寞的窗子

晚风吹起了我的袖子

明月沾湿了你的眸子


转身,你走出了两个人的圈子

树影婆娑,整座院子


挽起袖子

回头,把揽你忧伤一地的影子

装进,青春,这纸盒子


更多代码请关注我的微信小程序: "ecoder"

luwei0915

导航

四十三.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脚本
]# curl http://localhost/mdb1.php
]# curl http://localhost/mdb2.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()

posted on 2019-03-08 11:15  芦苇の  阅读(147)  评论(0编辑  收藏  举报