一、部署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()
- Elastic Stack 笔记(四)Elasticsearch5.6 索引及文档管理
博客地址:http://www.moonxy.com 一.前言 在 Elasticsearch 中,对文档进行索引等操作时,既可以通过 RESTful 接口进行操作,也可以通过 Java 也可以通过 ...
- mongodb复制集部署文档
一.安装SNMP(新版mongodb需要此依赖安装) 安装snmp服务需要的rpm包: perl-Data-Dumper-2.145-3.el7.x86_64.rpm net-snmp-5.7.2-2 ...
- MongoDB 副本集的用户和权限一般操作步骤
步骤总结: 在主节点上添加超管用户,副本集会自动同步 按照仲裁者.副本节点.主节点的先后顺序关闭所有节点服务 创建副本集认证的key文件,复制到每个服务所在目录 修改每个服务的配置文件,增加参数 启动 ...
- 分布式文档存储数据库之MongoDB副本集
前文我们聊到了mongodb的索引的相关作用和介绍以及索引的管理,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13950287.html:今天我们来聊下mon ...
- MongoDB副本集学习(三):性能和优化相关
Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...
- mongodb副本集原理及部署记录
工作原理 1.副本集之间的复制是通过oplog日志现实的.备份节点通过查询这个集合就可以知道需要进行复制的操作 2.oplog是节点中local库中的一个固定的集合,在默认情况下oplog初始化大小为 ...
- mongodb副本集高可用架构
一.简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点. Mongodb Driver(客户端)的所有数据都写入Primary,Sec ...
- NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署
NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MongoDB 是一个基于分布式文件存储的数据库.由 C ...
- MongoDB副本集学习(一):概述和环境搭建
MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/core/replication-introduction/ Primary ...
随机推荐
- Linux基础-13-源码安装软件包
1.准备 安装必要软件 yum install gcc-* glibc-* -y yum groupinstall '开发工具' -y 2.解包 tar xvf 包名 3.运行configure脚本, ...
- Linux基础-06-vi编辑器
1. vi编辑器简介 1) vi的定义:vi是一个UNIX和Linux系统内嵌的标准正文(文字)编辑器,它是一种交互类型的正文编辑器,它可以用来创建和修改正文文件. 2. vi编辑器的操作模式 vi编 ...
- C++进行字母大小写转换
#include <iostream> #include <Windows.h> #include <string> using namespace std; in ...
- WUSTOJ 1321: Alphabet Cookies(Java)字符统计
题目链接:1321: Alphabet Cookies Description Kitty likes cookies very much, and especially the alphabet c ...
- netty--使用注意事项
- "一起来捉妖"怎么从瘸腿中组合到最合心意的妖灵
背景: 最近两天活动,黑鬼白鬼合体觉醒秋容,陆无名,聂小倩,作为一个非土豪玩家,没有超高资质妖灵的我,想要在瘸腿妖灵中选取两个最佳选择,合体觉醒. 初选: 备选妖灵从5个维度录入数据,进行选择,分别为 ...
- pip源设置为国内源
windows系统步骤如下: (1)打开文件资源管理器(文件夹地址栏中) (2)地址栏上面输入 %appdata% (3)在这里面新建一个文件夹 pip (4)在pip文件夹里面新建一个文件叫做 pi ...
- Sublim text 3 同步 eclipse 快捷键
首选项>按键绑定>用户 配置内容(注意为JSON格式!) [ { "keys": ["shift+enter"], "command&qu ...
- 艾瑞克·弗洛姆 ( Erich Fromm )
艾瑞克·弗洛姆 ( Erich Fromm ) 来源 https://www.zhihu.com/question/22891103 ------------------------------ 作者 ...
- Go 操作 Mysql(三)
什么是事务? 事务是数据库非常重要的部分,它具有四大特性(原子性.一致性.隔离性.持久性) 以下内容出自<高性能MySQL>第三版,了解事务的ACID及四种隔离级有助于我们更好的理解事务运 ...