MongDB 简介
MongDB 是一款跨平台, 面向文档的数据库, 可以实现高性能, 高可用性, 并且能够轻松扩展, 是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下, 添加更多的节点, 可以保证服务器性能. 不再有行的概念, 其运行方式主要基于两个概念: 集合 (collection), 与文档 (document).
它的特点是高性能, 易部署, 易使用, 存储数据非常方便. 主要功能特性有:
面向集合存储, 易存储对象类型的数据.
模式自由, 支持查询, 支持动态查询.
支持完全索引, 包含内部对象.
支持复制和故障恢复.
使用高效的二进制数据存储, 包括大型对象 (如视频等).
自动处理碎片, 以支持云计算层次的扩展性.
支持 RUBY,PYTHON,JAVA,C++,PHP,C# 等多种语言.
文件存储格式为 BSON(一种 JSON 的扩展).
可通过网络访问.
安装配置
创建 yum 源
- # vim /etc/yum.repos.d/mongodb-org.repo
- [mongodb-org]
- name=MongoDB Repository
- baseurl= https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
- gpgcheck=1
- enabled=1
- gpgkey= https://www.mongodb.org/static/pgp/server-3.6.asc
- # yum install -y mongodb-org // 安装 MongDB
- # vi /etc/mongod.conf
- bindIp: 0.0.0.0 #监听地址
- port: 27017 #监听端口
- # systemctl start mongod.service
- # netstat -anpt | grep 27017
启动 MongoDB 多实例
- # cp -p /etc/mongod.conf /etc/mongod2.conf
- # vim /etc/mongod2.conf // 修改下面
- path: /data/mongodb/mongod2.log // 日志文件目录
- dbPath: /data/mongodb/mongo // 数据存储目录
- port: 27018 // 服务器端口
创建实例的目录和日志文件
- # mkdir -p /data/mongodb/
- # cd /data/mongodb/
- # mkdir mongo
- # touch mongod2.log
- # chmod 777 mongod2.log
启动实例
- # mongod -f /etc/mongod2.conf
- # mongo --port 27018 // 指定实例的端口
- # netstat -ntap
Mongodb 的基础操作
文档 : 相当于关系数据库的 行 (多个文档组成集合)
集合 : 相当于关系数据库的 表 (多个集合组成数据库)
有些数据库名是保留的具有特殊作用
1):admin: 将用户添加到这个库, 这个用户继承数据库所有权限
2): local : 这个库永远不被复制, 可以存储限于本地单台服务器的任意集合
3):config : 当 Mongo 用于分片设置时, 这个库在内部使用, 保存分片的相关信息
- # mongo // 进入数据库
- > db.version() // 查看版本
- > show dbs; // 查看数据库
- > db.getMongo() // 查看当前数据库机器的连接地址
> db. 集合名. help // 显示集合操作命令
> show users // 显示用户
增删改查
- > use school; // 打开 school 数据库, 不存在会创建, 不建立集合又会删除
- > db.createCollection('info') // 创建集合
- > db.info.insert({"id":1,"name":"zhangsan","hobby":["game","talk"]}) // 添加数据
- > db.info.find() // 查看 info 集合中所有文档
- > show collections // 查看数据库中所有集合
- > db.info.update({"id":10},{$set:{"name":"tom"}}) // 更改数据
- > db.info.remove({"id":2}) // 移除 info 集合中的 id2 的数据
- > db.info.drop() // 删除 info 集合
- > db.dropDatabase() // 删除数据库 先 use 到要删的数据库里在删
- > db.info.count() // 统计有多少条数据
MongoDB 数据类型
String: 字符串, 最常用, 必须是 utf-8
Boolean: 布尔值, true 或者 false
Integer: 整数
Double: 浮点数
Arrays: 数组或者列表, 多个值存储到一个键
Object: 用于嵌入文档, 即一个值为一个文档
Null: 存储 null 值
Binary Data : 二进制数据, 用于存储二进制数据
Date: 存储当前日期或时间 unix 时间格式
查看数据类型
- > a=db.info.findOne({"id":1}) // 查找指定记录并赋予别名 a
- > typeof(a.id) // 查看属性类型
备份与恢复管理
导入导出
导出: mongoexport
导入: mongoimport
选项: -d 数据库 -c 集合 -o 目录文件. json 结尾 -q 导出数据过滤条件 -f 导出哪些列
- # for(var i=1;i<=100;i++)db.info.insert({"id":i,"name":"jack"+i}) // 循环写入 100 条数据
- # mongoexport -d school -c info -o /opt/info.json // 导出
- # mongoimport -d school -c info1 --file /opt/info.json // 导入到 info1 集合
- # mongoexport -d school -c info1 -q '{"id":{"$eq":10}}' -o /opt/top10.json // 条件导出指定第 10 行
备份与恢复
备份: mongodump
恢复: mongorestore
选项:
1): -h 指定 Mongodb 所在服务器的地址也可以指定端口 (例:-h 127.0.0.1:27017)
2): -d : 需要备份的数据库
3): -o : 备份数据存放的目录 该目录需提前创建
- # mkdir /backup // 创建存放目录
- # mongodump -d school -o /backup/// 备份 school 数据库
- # mongorestore -d school1 --dir=/backup/school // 恢复到 school1 数据库
复制数据库
> db.copyDatabase("school","school2") // 复制数据库 school 到 school2 中
克隆数据库
把数据库 school 的 info 集合 克隆到实例 2
先进入实例 2 的 MongoDB
- # mongo --port 27018
- # db.runCommand({"cloneCollection":"school.info","from":"192.168.126.130:27017"})
安全管理
创建管理用户
启动是必须指定 auth=true
可以将用户分配角色
内置数据库用户角色: read , readWrite
数据库管理员角色: dbAmin , dbOwner , userAdmin
超级用户角色 : root
- # vi /etc/mongod.conf
- auth=true // 添加
- # mongo
- > use admin
- > db.createUser({"zkc":"root","pwd":"123","roles":["root"]})
- // 创建用户 zkc 密码 123 分配到 root 角色
- > db.auth("root","123") // 验证用户
进程管理
查看当前正在运行的进程: db.currentOp()
终止正在运行的进程: db.killOp(opid 值)
- > db.currentOp() // 查看
- ......
- "opid" : 4872,
- db.killOp(4872) // 终止 4872 进程
MongoDB 监控
MongoDB 提供一些内置工具可以监测数据库的状态信息
查看数据库实例的状态信息: db.serverStatus()
查看数据库的统计信息: db.stats()
此外也可以通过 web 界面查看系统监控信息需要在配置文件中加入
- vim /etc/mongod.conf
- httpinterface=true
然后浏览器访问: http://localhost:28017/
来源: http://www.bubuko.com/infodetail-2684626.html