一、mongodb 介绍
在高负载的情况下,可以添加更多的节点,保证服务器性能
将数据存储为一个文档,数据结构由键值对组成,类似于 JSON对象。字段值可以包含其他文档,数组及文档数组
database collection document field index primary key
数据库 集合 文档 域 索引 主键
数据库中有集合:集合中有文档:文档就是["name":"aming","age":"30","sex":"男"]
二、mongodb 安装
1)、vim /etc/yum.repos.d/mongodb-org-3.0.repo
[mongodb-org-3.0]
name=MongoDB Repository
baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mogodb-org/3.0/x86_64/
gpgcheck=0
enabled=1
2)、yum install mongodb-org (安装 5 个包)
3)、/etc/init.d/mongd
/etc/mongod.conf
/var/log/mongodb/
/var/lib/mongo/
4)、vim /etc/mongod.conf
fork 跟 pid 后面的 # 注释内容删掉
bindIp: 为空就是绑定所有的ip
5)、/etc/init.d/mongod start
在写入/var/lib/mongo/ 中的文件
6)、写入一些配置
# 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
7)、service mongod restart
注:启动中显示失败,但是没有报错
解决:通过 # mongod -f /etc/mongod.conf 来启动
三、MongoDB 的数据库连接和用户管理
1)、连接mongodb
i)、mongo 直接进入
ii)、mongo --port 27018 (不是默认27017端口)
iii)、mongo --host 127.0.0.1
iiii)、mongo -uroot -p1234567
2)、用户创建
> use test (不存在会自动创建)
> db.createUser({user:"admin",pwd:"123456",roles:[{role:'dbOwner',db:'userdb'}]})
> use admin 切换到 admin 库下
> db.system.users.find() 查看有哪些用户
> show users; 当前库中的用户
> use test 切换到 test 库
> db.dropUser('admin') 删除admin 用户
四、库和集合管理
1)、库
> db.version() 加不加 ; 都可以
> use userdb
> show dbs 查不到 userdb 库,需要创建一个集合才能show
> db.createCollection('mycol')
> show dbs 此时就可以显示 userdb 库
> db.dropDatabase() 删除当前库
> show dbs 此时查看不到 userdb 库
> use admin
> db.status() 查看当前库信息
> db.serverStatus()
2)、集合 (
集合创建的时候不要以数字开头)
> db.createCollection("mycol",{ capped:true, autoIndexID:true, size:6142800, max:10000 })
capped 为true 就是启用封顶集合,当达到最大大小,会自动覆盖最早的条目,跟size 连用来指定大小
max 为最大文件数
> show collections 查看所有的集合
> db.Account.insert({ AccountID:1, UserName:"123",password:"123456" }) 其中的 Account 为集合的名称,如果该集合没有存在,会自动创建
> db.Account.find() 查找所有文档,也可以在find()中添加条件,如:find({ AccountID:2 })
> db.Account.update({AccountID:1}, { "$set":{"Age":30} }) 可以添加字段,也可以修改字段的值
> db.Account.remove({Account:1}) 删除某一行
> db.Account.drop() 删除集合中所有的文档
> db.printCollectionstats()
五、mondodb 副本集
primary(主) secondary(从),可以设置权重
arbiter(仲裁)只负责裁决,不存储数据
从的机子上:
vim /etc/mongod.conf 添加
replication:
#oplog大小
oplogSizeMB: 20
#复制集名称
replSetName: aminglinux
重启 /etc/init.d/mongod restart
到主的机子上:
mongo
> use admin
> config={_id:"adminglinux",members:[{_id:0,host:"192.168.32.111:27017"},{_id:1,host:"192.168.32.112:27017"}]}
_id 副本集名字,members:从的机子
> rs.initiate(config) 加载 config
> rs.status() 如果有将从机子加进去,就不用下面的命令
> rs.add("192.168.32.112")
> rs.config() 查看相关的配置
如果配置成功之后,mongo 进入之后主会有 promary, 从会有 secondry
> var config=....
> rs.reconfig(config) 重新加载
六、副本集测试
主上面:
> use mydb
> db.createCollection('testc')
> show dbs
从上面:
> show dbs 失败,因为没有权限
> rs.slaveOk() 赋予从权限
> show dbs 可以查看
> use mydb
> show tables
主上面:
> rs.status() 查看从的health 如果是1 就说明是健康的
> rs.config() 查看权重 (priority),权重越高就会变成主
> cfg=rs.conf()
> cfg.members[0].priority = 3 设置第一个从机子上的权重为 3
> rs.reconfig(cfg)
> rs.config() 此时查看从的权重是否不同
禁掉主上面的端口
iptables -I INPUT -p tcp --dport 27017 -j DROP
从上面:
权重最高的从变成主,此时查看 rs.status() 就会看到原来的主 health 变成 0
主上面:
iptables -D INPUT -p tcp --dport 27017 -j DROP
主恢复之后,从上面添加的数据会自动添加到主上面
七、mongodb 备份与恢复
备份指定的库
mongodump -h ip -d dbname -o dir
-h 跟服务器 ip
-d 跟 database 名字
-o 指定备份数据存到哪个目录下
备份所有的库
mongodump -h ip -o dir
备份指定集合
mongodump -d dbname -c testc -o dir
导出集合为 json 文件
mongoexport -d dbname -c testc -o /tmp/testc.json
-o 后面跟指定文件
恢复
mongorestore -d mydb /tmp/mongodbbackup/mydb/
恢复的时候必须指定要相应的库下面
mongorestore --drop /tmp/123
恢复全部的库,其中--drop 可以将之前恢复的东西删除
mongorestore -d mydb -c testc /tmp/123/mydb/testc.bson
恢复具体的集合的时候,必须也要指定对应的集合文件
mongoimport --drop -d mydb -c testc --file /tmp/testc.json
八、php 连接 mongodb
下载mongodb扩展包
# wget 'http://codeload.github.com/mongodb/mongo-php-driver/zip/master' -o /usr/local/src/mong_php.zip
# cd /usr/local/src/
# unzip mong_php.zip
# cd mongo-php-driver-master
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make
# make install
# ls /usr/local/php/ext/mongo.so
# /usr/local/php/bin/php -i | grep extension_dir
# vim /usr/local/php/etc/php.ini
添加: extension = mongo.so
# /usr/local/php/bin/php -m | grep mongo
-m 查看PHP 加载了哪些模块
# /etc/init.d/php-fpm restart
# vim /data/www/html/mongotest.php
<?php
//连接 mongodb
$m = new MongoClient();
//选择一个数据库
$db = $m->mydb;
?>
# curl localhost/mongotest.php