分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供多用户访问的服务器。另外,对等特性允许一些系统扮演客户机和服务器的双重角色。
**MongoDB 的主要目标是在键/值存储方式和传统的 RDBMS 系统之间架起一座桥梁,它集两者的优势于一身。**根据官方网站的描述,MongoDB 适用于以下场景。
MongoDB 的使用也会有一些限制,例如:它不适合于以下几个地方。
| SQL 术语/概念 | MongoDB 术语/概念 | 解释/说明 |
|---|---|---|
| database | database | 数据库 |
| table | collection | 数据库表/集合 |
| row | document | 数据记录行/文档 |
| column | field | 数据字段/域 |
| index | index | 索引 |
| table joins | 表连接,MongoDB 不支持 | |
| primary key | primary key | 主键,MongoDB 自动将 _id 字段设置为主键 |
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

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 clean all
yum makecache


yum install -y mongodb-org

vim /etc/mongod.conf
10 path: /var/log/mongodb/mongod.log #系统日志文件存放位置
14 dbPath: /var/lib/mongo #数据存储位置
24 pidFilePath: /var/run/mongodb/mongod.pid #进程管理,pid文件存放位置
25 timeZoneInfo: /usr/share/zoneinfo
26
27 # network interfaces
28 net:
29 port: 27017 #默认端口号
30 bindIp: 0.0.0.0 #监听地址,监听所有人0.0.0.0



mongo


cd /etc
cp -p mongod.conf mongod2.conf

修改配置文件

创建目录
mkdir -p /data/mongodb
touch /data/mongodb/mongod2.log
mkdir -p /data/mongodb/mongo

启动新实例
mongod -f /etc/mongod2.conf

netstat -antp | grep mongod

mongo --port 27018

#查看mongoDB版本
db.version()
#查看服务器内数据库
show dbs
#创建数据库,mongoDB数据库创建直接使用use即可,如果不在库内创建集合,退出时自动删除该库
use school
#创建集合(表),是json格式,以键值对方式存储
db.createCollection('集合名') #此时show dbs,school库就会出现
#查看集合
show tables
或
show collections
#查看集合数据
db.集合名.find() #条件可写在()内,不写默认查看全部,一页最多显示20条,按it继续查看
#在集合中插入数据,json格式,键值对,字符串加双引号
db.lcdb.insert({"id":1,"name":"lichen","hobby":"看黑丝"})
db.lcdb.find()

#循环插入,+号可以连接字符串,直接将+号后面的内容转换为字符串衔接
for(i=2;i<=100;i++) db.lcdb.insert({"id":i,"name":"lichen"+i,"hobby":"看黑丝"+i})
db.lcdb.find()

#横向查看指定条件数据信息
db.abc.find({"id":1})
#竖向查看指定条件数据信息
db.abc.findOne({"id":1})
#查看每个字段的数据类型,例:可以为第一条数据加一个别名
a=db.abc.findOne({"id":1})
typeof(a.id)
typeof(a.name)
typeof(a.hobby)
-------------------------
> typeof(a.id)
number
> typeof(a.name)
string
> typeof(a.hobby)
string

#更改指定条件数据
> db.lcdb.update({"id":5},{$set:{"name":"liyong"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>
>
> db.lcdb.find({"id":5})
{ "_id" : ObjectId("62e6ae64760b90d3342dbf92"), "id" : 5, "name" :
"liyong", "hobby" : "看黑丝5" }>
#删除指定数据
> db.lcdb.remove({"id":5})
WriteResult({ "nRemoved" : 1 })
> db.lcdb.find({"id":5})

#删除集合
例:先创建一个新的集合,我们之前的abc后面要用
db.createConllection('qwe')
show tables
show collections
db.qwe.drop()
#删除数据库,首先进这个要删的数据库,然后db.dropDatabase()
例:
use myschool
db.createCollection('wawa')
show dbs
db.dropDatabase()
show dbs


===============
导出 mongoexport
===============
exit
#命令行模式下,-d指定数据库,-c指定数据表,-o表示输出
mongoexport -d school -c lcdb -o /home/lcdb.json
#此时cat /home/lcdb.json,你会发现空的
cat /home/lcdb.json
#因为,正常情况都是默认端口27017的库优先级高,所以指定端口不要忘
mongoexport --port 27018 -d school -c lcdb -o /home/lcdb.json
cat /home/lcdb.json
#-q指定条件,eq等于、ne不等于、gt大于、lt小于、ge大于等于、le小于等于,都可以使用
mongoexport --port 27018 -d school -c abc -q '{"id":{"$eq":10}}' -o /opt/10.json
cat /opt/10.json


===============
导入 mongoimport
===============
#导入的库和表都可以不存在
mongoimport --port 27018 -d lichen -c abc --file /home/lcdb.json
#验证
mongo --port 27018
show dbs
use lichen
show tables
db.abc.find()
===============
指定条件 导出
===============
exit


==============
数据备份
==============
mkdir /backup
#使用mongodump -d指定要保存的库,同理-c指定要保存的库中表
mongodump --port 27018 -d school -o /backup
cd /backup
ls
cd school
ls
保存的类型:bson

=============
恢复还原
=============
mongorestore --port 27017 -d zb --dir=/backup/school
mongo --port 27017
show dbs
use zb
show tables


例:
mongo --port 27018
#将school数据库复制为share数据库
> db.copyDatabase("school","share")
{ "ok" : 1 }
> show tables
lcdb
> show dbs
admin 0.000GB
config 0.000GB
lichen 0.000GB
local 0.000GB
school 0.000GB
share 0.000GB
test 0.000GB
> use share
switched to db share
> show tables
lcdb


例:
exit
#再创建两个实例,后面要用到
#创建多实例的数据目录
mkdir -p /data/mongodb/mongodb{3,4}
#日志文件目录
mkdir -p /data/mongodb/logs
#创建日志文件,并赋权777
cd /data/mongodb/logs
touch mongodb{3,4}.log
chmod 777 *
#修改多实例配置文件
cd /etc
cp -p mongod.conf mongod3.conf
cp -p mongod.conf mongod4.conf

vim mongod3.conf
10 path: /data/mongodb/logs/mongodb3.log
14 dbPath: /data/mongodb/mongodb3
29 port: 27019

vim mongod4.conf
10 path: /data/mongodb/logs/mongodb4.log
14 dbPath: /data/mongodb/mongodb4
29 port: 27020

#启动这两个实例(开启mongod服务)
mongod -f /etc/mongod3.conf
mongod -f /etc/mongod4.conf
#查看端口
netstat -natp | grep mongod

开始克隆
#开始克隆
#这里进入27019
mongo --port 27019
#克隆来自192.168.109.14:27018服务中的school库中的abc表
> db.runCommand({"cloneCollection":"school.lcdb","from":"192.168.109.14:27018"})
{ "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
school 0.000GB
> use school
switched to db school
> show tables
lcdb
> db.lcdb.find()
{ "_id" : ObjectId("62ea97e47644dc941b1f4e11"), "id" : 1, "name" : "lichen", "hobby"
: "腹黑男" }{ "_id" : ObjectId("62ea97fa7644dc941b1f4e12"), "id" : 1, "name" : "liyong", "hobby"
: "卷王" }>


mongoDB中自带一个admin库
在这个库中创建
例:
>use admin
#创建用户,用户名:root,密码:123456,身份:管理员
> db.createUser({"user":"root","pwd":"123456","roles":["root"]})
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
> show tables
system.users
system.version
> db.auth("root","123456")
1
#使用db.auth("root","123456")进行验证,成功返回1,失败返回0

db.currentOp()
"opid" : 26345,
#其中一大段中,关注opid,如果想结束这个进程就,db.killOp(26345)即可
#但是关闭这个进程不代表退出数据库,相当于将当前进程初始化释放,关了之后又开启了,相当于一个优化操作
