Mongodb学习实践文档

202012

 

1 MongoDB简介1

2 Mongodb与传统关系型数据库对比1

3 Mongodb基础运维2

3.1 Mongodb安装3

3.1.1 创建用户3

3.1.2 创建目录3

3.1.3 安装3

3.1.4 mongodb配置文件4

3.1.5 启动Mongodb4

3.2 Mongodb日常运维5

3.2.1 mongodb客户端连接5

3.2.2 查看当前数据库 show dbs6

3.2.3 新建库7

3.2.4 新建集合8

3.2.5 插入文档数据8

3.2.6 查询文档数据9

3.2.7 更新文档数据10

3.2.8 删除文档数据10

4 Mongodb用户权限管理11

5 Mongodb备份恢复导入导出11

5.1 mongoexport 12

5.2 mongoimport  13

5.3 Mongodump15

5.4 mongorestore 16

6 Mongodb主从仲裁高可用17

6.1 mongodb主从仲裁环境17

6.2 mongodb主从仲裁配置17

6.2.1 启动mongodb主从节点18

6.2.2 初始化复制集18

6.3 mongodb客主从仲裁测试22

6.3.1 mongodb主从数据同步验证22

6.3.2 mongodb主从节点故障转移验证23

 

 

 

MongoDB简介

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似jsonbson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

Mongodb与传统关系型数据库对比

     存储方式对比

     在传统的关系型数据库中,存储方式是以表的形式存放,而在MongoDB中,以文档的形式存在。

 

 

数据库中的对应关系,及存储形式的对比:

 

 

 

 mongodb与关系型数据库的名词概念上的对比:

 

 

 

SQL术语

mongodb术语

说明

database

database

数据库

table

collection

/集合

row

document

/文档

column  

field

字段/

index

index

索引

Primary key

Primary key

主键/mongodb_id设置为主键

 1)文档(document):是mongodb核心概念,是mongodb逻辑存储的最小单元;

2)集合(collection): 集合是由多个文档组成集合;

3)数据库(database):多个集合组成数据库;

传统关系型数据库适用于行列二维表的使用场景。mongodb适用于数据缓存、文档格式存储的使用场景。

Mongodb日志类型

 

任何一种数据库都有各种各样的日志,MongoDB也不例外。MongoDB中有4种日志,分别是系统日志、Journal日志、oplog主从日志、慢查询日志等。这些日志记录着MongoDB数据库不同方面的踪迹。

3.1 Mongodb系统日志

 

系统日志在MongoDB数据库中很重要,它记录着MongoDB启动和停止的操作,以及服务器在运行过程中发生的任何异常信息。
配置系统日志的方法比较简单,在启动mongod时指定logpath参数即可:

#日志路径   

 

logpath=/opt/mongodb/log/mongodb.log

 

3.2Mongodb  journaling日志

journaling(日记) 日志功能则是 MongoDB 里面非常重要的一个功能 , 它保证了数据库服务器在意外断电 、 自然灾害等情况下数据的完整性。它通过预写式的redo日志为MongoDB增加了额外的可靠性保障。开启该功能时,MongoDB会在进行写入时建立一条Journal日志,其中包含了此次写入操作具体更改的磁盘地址和字节。因此一旦服务器突然停机,可在启动时对日记进行重放,从而重新执行那些停机前没能够刷新到磁盘的写入操作。

 

MongoDB配置WiredTiger引擎使用内存缓冲区来保存journal记录,WiredTiger根据以下间隔或条件将缓冲的日志记录同步到磁盘。

3.3 Mongodb  oplog主从日志

oplog主从日志

Replica Sets复制集用于在多台服务器之间备份数据。MongoDB的复制功能是使用操作日志oplog实现的,操作日志包含了主节点的每一次写操作。oplog是主节点的local数据库中的一个固定集合。备份节点通过查询这个集合就可以知道需要进行复制的操作。

一个mongod实例中的所有数据库都使用同一个oplog,也就是所有数据库的操作日志(插入,删除,修改)都会记录到oplog

 

每个备份节点都维护着自己的oplog,记录着每一次从主节点复制数据的操作。这样,每个成员都可以作为同步源给其他成员使用。

 

Mongodb基础运维

安装前环境准备:

安装前准备

在安装之前首先确认该版本软件是否支持你的操作系统。

    更多详情查看:https://docs.mongodb.com/manual/installation/ 

 

 

4.1 Mongodb安装

 

 下载mongodb-linux-x86_64-3.0.15.tgz安装包上传服务器对应安装目录/opt

4.1.1 创建用户

 [root@pxc2 ~]# groupadd -g  800 mongodb

[root@pxc2 ~]# useradd -u 801  -g mongodb  mongodb

 

4.1.2 创建目录

[root@pxc2 /]# mkdir -pv /opt/mongodb

mkdir: 已创建目录 "/opt/mongodb"

[root@pxc2 /]# cd /opt/mongodb/

[root@pxc2 mongodb]# mkdir -pv  /opt/mongodb/{data,log,conf,bin}

mkdir: 已创建目录 "/opt/mongodb/data"

mkdir: 已创建目录 "/opt/mongodb/log"

mkdir: 已创建目录 "/opt/mongodb/conf"

mkdir: 已创建目录 "/opt/mongodb/bin"

 

4.1.3 安装

[root@pxc2 opt]# tar -zxvf mongodb-linux-x86_64-3.0.15.tgz

[root@pxc2 opt]# cd mongodb-linux-x86_64-3.0.15/bin

[root@pxc2 bin]# cp *   /opt/mongodb/bin

[root@pxc2 bin]# chown mongodb:mongodb -R   /opt/mongodb/

配置环境变量:

[mongodb@pxc2 ~]$ cat  .bash_profile

# .bash_profile

 

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

 

PATH=$PATH:$HOME/bin:/opt/mongodb/bin

 

export PATH

 

4.1.4 mongodb配置文件

 [root@Primary conf]# vim mongodb.conf

#数据路径

dbpath=/opt/mongodb/data

#日志路径   

logpath=/opt/mongodb/log/mongodb.log

#端口              

port=27017    

#日志追加模式

logappend=1   

#daemon方式启动

fork=1

 

4.1.5 启动Mongodb

启动:

[mongodb@pxc2 mongodb]$ ./mongod  -f /opt/mongodb/conf/mongodb.conf

监控mongodb状态,自带命令执行如下:

 

 

 通过mongostat 可以很快捷直观看到包括更新、插入的计数,页面错误、索引的丢失情况以及很多其他的关系到系统健康的重要指标等等。

停止:

[mongodb@pxc2 bin]$ ./mongod  -f /opt/mongodb/conf/mongodb.conf  --shutdown

killing process with pid: 30710

[mongodb@pxc2 bin]$ lsof -i:27017

4.2 Mongodb日常运维

4.2.1 mongodb客户端连接

mongodb远程连接语法如下:

mongo -u username -p pwd IP:27017/database(用户名对应的数据库)

[root@pxc2 bin]# ./mongo  192.168.56.130:27017

MongoDB shell version: 3.0.15

connecting to: 192.168.56.130:27017/test

Server has startup warnings:

2020-11-30T13:11:15.533-0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

2020-11-30T13:11:15.533-0800 I CONTROL  [initandlisten]

2020-11-30T13:11:15.533-0800 I CONTROL  [initandlisten]

2020-11-30T13:11:15.533-0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.

2020-11-30T13:11:15.533-0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'

2020-11-30T13:11:15.533-0800 I CONTROL  [initandlisten]

2020-11-30T13:11:15.533-0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.

4.2.2 查看当前数据库 show dbs

 

 

 可以看出mongodb默认自带4个库:localadmintestconfig ;而通过show dbs 命令查看当前数据库列表只有local  0.078GB 显示,其它三个库admin\test\config 均不显示,原因为何? 应该是admin\test\config三个库是空库,需要三个空库中插入一些数据。

4.2.3 新建库

语法格式如下:  use  databasename  # 建库

[mongodb@pxc2 mongodb]$ mongo

MongoDB shell version: 3.0.15

connecting to: test

> use mong1;    #新建mong1

switched to db mong1

> use mong2;   #新建mong2

switched to db mong2

> show dbs;     #mong1mong2空库不可见

admin  0.078GB

local  0.078GB

> db.mong1.insert({"name":"BJ"}) ;

WriteResult({ "nInserted" : 1 })

> db.mong1.insert({"name":"HK"}) ;   #插入2条数据记录,自动创建mong1集合

WriteResult({ "nInserted" : 1 })

> use mong2;

switched to db mong2

> db.mong2.insert({"name":"NJ"}) ;

WriteResult({ "nInserted" : 1 })

> db.mong2.insert({"name":"WH"}) ;   #插入2条数据记录,自动创建mong1集合

WriteResult({ "nInserted" : 1 })    

> show dbs;         #查看数据库列表

admin  0.078GB

local  0.078GB

mong2  0.078GB

> show collections;    #查看集合列表

mong1

mong2

4.2.4 新建集合

语法格式如下db.createCollection(name, options)     name: 要创建的集合名称   options: 可选参数, 指定有关内存大小及索引的选项

[mongodb@pxc2 bin]$ ./mongo

MongoDB shell version: 3.0.15

connecting to: test

> show collections;

> db.createCollection("collTest");

{ "ok" : 1 }

 

MongoDB 中,如果不创建集合。当你插入一些文档时,MongoDB会自动创建集合。

4.2.5 插入文档数据

MongoDB 使用 insert()方法向集合中插入文档,语法如下:

db.集合名.insert(document)

> show collections;

collTest

system.indexes

> db.colltest.insert({"id":"1000"});

WriteResult({ "nInserted" : 1 })

 

 

 

 如上命令,登陆空库admin库,在admin库上的admin集合里insert 三条数据记录,因为admin有插入的数据不再是空库,所以show dbs就能看到这个admin库,同时在show collections 也能看到admin库下的名为admin的集合.

 

 

 

 

 

posted @ 2022-10-07 15:18  beawh  阅读(109)  评论(0编辑  收藏  举报