2020年12月
目 录
1 MongoDB简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
2 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适用于数据缓存、文档格式存储的使用场景。
3 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,记录着每一次从主节点复制数据的操作。这样,每个成员都可以作为同步源给其他成员使用。
4 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个库:local、admin、test、config ;而通过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; #mong1、mong2空库不可见
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的集合.
标签:opt,MongoDB,数据库,实践,mongodb,文档,Mongodb,日志 From: https://www.cnblogs.com/vzhangxk/p/14458127.html