MongoDB搭建及基础操作


在这里插入图片描述

引言

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供多用户访问的服务器。另外,对等特性允许一些系统扮演客户机和服务器的双重角色。

一、MongoDB概述

1、什么是MongoDB

  1. MongoDB是由C++语言编写的开源数据库系统
  2. 在高负载的情况下,添加更多的节点,可以保证服务器性能
  3. MongoDB旨在为web应用提供可扩展的高性能数据存储解决方案。
  4. MongoDB将数据存储为一个文档
  5. MongoDB是一个基于分布式文件存储的数据库

2、MongoDB的特点

  1. 面向集合存储,易存储对象类型的数据。
  2. 模式自由
  3. 支持动态查询
  4. 可通过网络访问
  5. 支持查询
  6. 支持复制和故障恢复
  7. 支持完全索引,包含内部对象
  8. 文件存储格式为BSON(一种JSON的扩展)
  9. 自动处理碎片,以支持云计算层次的扩展性
  10. 使用高效的二进制数据存储,包括大型对象
  11. 支持Golang,RUBY,Python,JAVA,C++,PHP,C#等多种语言
  12. MongoDB安装简单

3、MongoDB适用场景

**MongoDB 的主要目标是在键/值存储方式和传统的 RDBMS 系统之间架起一座桥梁,它集两者的优势于一身。**根据官方网站的描述,MongoDB 适用于以下场景。

  1. 网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  2. 缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
  3. 高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对MapReduce引擎的内置支持。
  4. 用于对象及 JSON 数据的存储:Mongo 的 BSON 数据格式非常适合文档化格式的存储及查询。

MongoDB 的使用也会有一些限制,例如:它不适合于以下几个地方

  1. 高度事务性的系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
  2. 传统的商业智能应用:针对特定问题的 BI 数据库会产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
  3. 需要 SQL 的问题。

4、MongoDB概念解析

SQL 术语/概念 MongoDB 术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB 不支持
primary key primary key 主键,MongoDB 自动将 _id 字段设置为主键

二、搭建MongoDB

1、关闭系统防火墙和安全机制

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

在这里插入图片描述

2、配置mongodb源仓库

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

在这里插入图片描述
在这里插入图片描述

3、安装mongodb

yum install -y mongodb-org

在这里插入图片描述

4、编辑配置文件

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、进入mongodb

mongo

在这里插入图片描述
在这里插入图片描述

6、生成第2个实例

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

在这里插入图片描述

7、检测mongod端口

netstat -antp | grep mongod

在这里插入图片描述

8、进入新实例

mongo --port 27018

在这里插入图片描述

三、mongoDB数据库基本操作

#查看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

在这里插入图片描述
在这里插入图片描述

四、数据库导出导入、备份恢复操作

1、数据库导出

===============
导出 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

在这里插入图片描述
在这里插入图片描述

2、数据库导入

===============
导入 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
 

在这里插入图片描述
在这里插入图片描述

3、数据备份

==============
    数据备份
==============

mkdir /backup

#使用mongodump -d指定要保存的库,同理-c指定要保存的库中表
mongodump --port 27018 -d school -o /backup

cd /backup
ls
cd school
ls
保存的类型:bson

在这里插入图片描述

4、数据恢复

=============
   恢复还原
=============

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)即可
#但是关闭这个进程不代表退出数据库,相当于将当前进程初始化释放,关了之后又开启了,相当于一个优化操作

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45088125/article/details/126091528
今日推荐