一, MongoDB 简介
1.MongoDB 是一款跨平台, 面向文档的数据库, 可以实现高性能, 高可用性, 并且能够轻松扩展. MongoDB 是由 C++ 语言编写的, 是一个基于分布式文件存储的开源数据库系统.
在高负载的情况下, 添加更多的节点, 可以保证服务器性能. MongoDB 可以为 web 应用提供可扩展的高性能数据存储解决方案.
2.MongoDB 是非关系数据库当中功能最丰富, 最像关系数据库的. 不采用关系模型主要是为了获得更好的扩展性, MongoDB 不再有 "行" 的概念, 其运行方式主要基于两个概念: 集合 (collection) 和文档(document).
3.MongoDB 旨在为 Web 应用提供可扩展的高性能数据存储解决方案.
4.MongoDB 将数据存储为一个文档, 数据结构由键值 (key=>value) 对组成. MongoDB 文档类似于 JSON 对象. 字段值可以包含其他文档, 数组及文档数组.
MongoDB 主要特点
1.MongoDB 安装简单, 提供了面向文档存储的功能, 操作起来比较简单和容易.
2.MongoDB 提供了复制, 高可用性和自动分片功能. 如果负载增加, 它可以分布在计算机网络中的其他节点, 这就是所谓的分片.
3.Mongo 支持丰富的查询表达式. 查询指令使用 JSON 形式的标记, 可轻易查询文档中内嵌的对象及数组.
4.MongoDB 支持各种编程语言: Ruby,Python,Java,C++,PHP,C# 等多种语言.
二, CentOS 7MongoDB 3.6 的安装
实验步骤
(1)部署 yum 源仓库
- VIM /etc/yum.repos.d/mongod-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
(2)Yum 安装
yum install MongoDB-org -y
(3). 编辑 MongoDB 配置文件并启动其服务
- VIM /etc/mongod.conf
- bindIp: 0.0.0.0 #监听地址
- port: 27017 #监听端口
- systemctl start mongod.service #开启服务
- netstat -anpt | grep 27017 #检查是否启动
(4)连接并访问 MongoDB
- /usr/bin/mongo
- > db.version() #查看版本
- 3.6.6
- > show dbs; #查看数据库
- admin 0.000GB
- config 0.000GB
- local 0.000GB
三, MongoDB 3.6 的基本操作
1. 开启多实例
(1)复制一份配置文件给第二个实例
- cp -p /etc/mongod.conf /etc/mongod2.conf
- ## 复制一份配置文件给第二个实例
(2)编辑第二个实例配置文件和启动参数
- 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 ## 给予日志文件权限
(3)启动第二个实例
- mongod -f /etc/mongod2.conf ## 开启第二份实例
- mongo --port 27018 ## 进入数据库
2. 基本操作
- ## 创建数据库 , 不存在会创建, 不建立集合又会删除
- > use mydb;
- switched to db mydb
- ## 创建集合
- > db.createCollection('a')
- { "ok" : 1 }
- ## 在集合中插入数据
- > db.a.insert({"id":1,"name":"zhangsan"})
- WriteResult({ "nInserted" : 1 })
- ## 查看集合中的数据
- > db.a.find()
- { "_id" : ObjectId("5b4c54bc8a4352592ecc288f"), "id" : 1, "name" : "zhangsan" }
- ## 查找指定记录并赋予别名 a, 查看属性类型
- > b=db.a.findOne({"id":1})
- {
- "_id" : ObjectId("5b4c54bc8a4352592ecc288f"),
- "id" : 1,
- "name" : "zhangsan"
- }
- > typeof(b.id)
- number
- ## 更改数据
- > db.a.update({"id":1},{$set:{"name":"tom"}})
- WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
- > db.a.find()
- { "_id" : ObjectId("5b4c54bc8a4352592ecc288f"), "id" : 1, "name" : "tom" }
- ## 查看集合
- > show collections
- a
- ## 删除集合
- > db.a.drop()
- true
- ## 删除数据库
- > db.dropDatabase()
- { "dropped" : "mydb", "ok" : 1 }
- ## 复制数据库
- > db.copyDatabase("mydb","mydb1")
- { "ok" : 1 }
- > show dbs;
- admin 0.000GB
- config 0.000GB
- local 0.000GB
- mydb 0.000GB
- mydb1 0.000GB
3. 导入导出数据
•mongoexport 命令可以把一个 collection 导出成 JSON 格式或 CSV 格式的文件, 可以通过参数指定导出的数据项, 也可以根据指定的条件导出数据.
•mongoimport 命令可以把一个特定格式文件中的内容导入到指定的 collection 中. 该工具可以导入 SON 格式或 CSV 格式的文件.
(1)创建 100 个数据
- > use kgc;
- switched to db kgc
- > for(var i=1;i<=100;i++)db.users.insert({
- "id":i,"name":"jack"+i
- })
- WriteResult({
- "nInserted" : 1
- })
- > db.users.count()
- 100
(2)进行导入与导出操作
- # 导出操作
- [root@localhost ~]# mongoexport -d kgc -c users -o /opt/users.JSON
- 2018-07-16T16:36:30.395+0800 connected to: localhost
- 2018-07-16T16:36:30.407+0800 exported 100 records
- # 查看导出的文件
- [root@localhost ~]# head -n 3 /opt/users.JSON
- {
- "_id":{
- "$oid":"5b4c589f43705395b9afe284"
- },"id":1.0,"name":"jack1"
- }
- {
- "_id":{
- "$oid":"5b4c589f43705395b9afe285"
- },"id":2.0,"name":"jack2"
- }
- {
- "_id":{
- "$oid":"5b4c589f43705395b9afe286"
- },"id":3.0,"name":"jack3"
- }```
- # 导入操作
- mailto:root@localhost ~]# mongoimport -d kgc -c user1 --file /opt/users.JSON
- 2018-07-16T16:38:13.615+0800 connected to: localhost
- 2018-07-16T16:38:13.635+0800 imported 100 documents
- # 查看导入的数据集合
- > use kgc;
- switched to db kgc
- > show collections
- user1
- users
- > exit
- bye
- # 条件导出操作
- [root@localhost ~]# mongoexport -d kgc -c user1 -q '{"id":{"$eq":10}}' -o /opt/top10.JSON
- 2018-07-16T16:40:28.912+0800 connected to: localhost
- 2018-07-16T16:40:28.915+0800 exported 1 record
•-d: 指明数据库的名字
•-c: 指明 collection 的名字
•-f : 指明要导出那些列
•-o: 指明要导出的文件名
•-q: 指明导出数据的过滤条件
4. 备份与恢复
(1)备份
在 MongoDB 中可以使用 mongodump 命令来备份数据, 该命令可以导出所有数据到指定目录中.
- [root@localhost ~]# mkdir /opt/backup #创建备份文件夹
- [root@localhost ~]# mongodump -d kgc -o /opt/backup/
- 2018-07-16T16:44:47.254+0800 writing kgc.user1 to
- 2018-07-16T16:44:47.254+0800 writing kgc.users to
- 2018-07-16T16:44:47.256+0800 done dumping kgc.user1 (100 documents)
- 2018-07-16T16:44:47.256+0800 done dumping kgc.users (100 documents)
(2)恢复
MongoDB 使用 mongorestore 命令来恢复备份的数据
mongorestore -d kgc2 --dir=/backup/kgc ## 恢复
5. 克隆集合
在 MongoDB 中可以将数据库中的集合进行克隆. 这里将 kgc 数据库中的 user1 集合克隆到另外一个实例.
(1)先查看 MongoDB 开启的实例
- [root@localhost ~]# netstat -ntap | grep mongod
- tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1121/mongod
- tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 10145/mongod
(2)进入第二个实例 27018 端口
- [root@localhost ~]# mongo --port 27018 ## 进入另一个实例
- > db.runCommand({
- "cloneCollection":"kgc.user1","from":"192.168.113.175:27017"
- })
- {
- "ok" : 1
- }
- > show dbs
- admin 0.000GB
- config 0.000GB
- kgc 0.000GB
- local 0.000GB
- > use kgc
- switched to db kgc
- > show collections #查看 27018 端口实例的集合
- user1
- ## 完成克隆
7. 进程管理
管理员可以对 MongoDB 进程进行管理和控制.
查看当前正在运行的进程的命令为: db.currentOp().
终止正在运行的高消耗资源的进程管理的进程命令为: db.killOp(opid).
来源: http://www.linuxidc.com/Linux/2018-11/155529.htm