MongoDB深入学习总结(上)

网友投稿 790 2022-05-29

MongoDB

一、产品介绍

MongoDB是由C++语言编写的一个基于分布式文件存储的开源NoSQL数据库系统,在高负载的情况下,可添加更多的节点(实例),以保证服务性能,在许多场景下用于代替传统的关系型数据库或键/值存储方式,皆在为Web应用提供可扩展的高性能数据存储解决方案。

MongoDB提供了一个面向文档的存储方式,操作起来比较简单和容易,可以存储比较复杂的数据类型,是一个面向集合的,模式自由的文档型数据库。

MongoDB基本概念

文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行(但比行复杂的多)。

集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库的行,那么集合就如同数据表

MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限。

MongoDB   关系型数据库

文档(document)   行(row)

集合(collection) 表(table)

数据库(database) 数据库(database)

日志文件类型

系统日志文件 logpath

journal日志文件(没怎么用过)

oplog复制操作日志文件(相当于MySQL中的bin-log 二进制日志)

慢查询日志

数据类型

(1)BSON 的数据类型

null,代表空或者不存在

布尔,只有 true 和 false

数字,64 位浮点数

字符串,utf8 字符串

数组,值或者列表可表示为数组

对象,对象的数据

(2)BSON 的特点

优点:简单,简洁,容易理解、解析、记忆

(3)命名规则

文档的键命名几乎所有 utf8 字符,只有少数例外:$开头;

文档的键命名几乎所有 utf8 字符,只有少数例外:$开头;\0(空字符);_下划线开头。

(空字符);_下划线开头。

集合的命名几乎所有 utf8 字符,只有少数例外:$开头;

集合的命名几乎所有 utf8 字符,只有少数例外:$开头;\0(空字符);system.开头;””

(空字符);system.开头;””

空字符串。

数据库的命名几乎所有 utf8 字符,只有少数例外:””空字符串;

数据库的命名几乎所有 utf8 字符,只有少数例外:””空字符串;\0;空格;. 点;\ ;/。

;空格;. 点;\ ;/。

MongoDB的安装

指定同一个进程同一时间最多开启的文件数:ulimit -n

设置上述数值为65535(大一些就可以):ulimit -n 65535

设置用户最多开启的程序数目:ulimit -u 65535

yum安装wget:yum -y install wget

安装MongoDB的tar包,地址如下,执行命令:wget

https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.

0

.

6

.tgz

解压到/usr/src下:tar xf mongodb-linux-x86_64-rhel70-4.0.6.tgz -C /usr/src/

为该文件创建软连接:ln -s /usr/src/mongodb-linux-x86_64-rhel70-4.0.6 /usr/local/mongodb

将bin目录中的shell脚本链接到/bin下:ln -s /usr/local/mongodb/bin/ /bin/

创建数据目录,日志文件及目录并创建相应的配置文件(因为MongoDB的包中没有自带这些东西,所以需要我们自己来配置)

首先在/data目录下创建目录:mkdir -p /data/mongodb1

在/data/logs目录下创建目录:mkdir -p /data/logs/mongodb

在/data/logs目录下创建文件:touch /data/logs/mongodb/mongodb1.log

在/usr/local/mongodb下创建conf目录:mkdir /usr/local/mongodb/conf

在conf目录下创建mongodb的配置文件:vim /usr/local/mongodc/conf/mongodb1.conf

内容如下

启动,并指定配置文件:/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb1.conf

查看进程ps -aux|grep :27107

设置开机自启动:vim /etc/rc.local ,插入下面这两句

rm -f /data/mongodb1/mongod.lock

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf

进入bin内执行./mongo启动服务

MongoDB多实例配置

进入mongodb的目录,复制conf配置文件:cd /usr/src/mongodb-linux-x86_64-rhel70-4.0.6/conf/

复制配置文件:cp mongodb1.conf mongodb2.conf

编辑conf文件:vim mongodb2.conf

主要更改端口号、数据库路径以及日志输出路径:

创建mongodb2目录:mkdir /data/mongodb2

创建log日志文件:touch /data/logs/mongodb/mongodb2.log

为该文件添加一个权限:chmod 777 /data/logs/mongodb/mongodb2.log

启动,且指定配置文件:usr/src/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod -f /usr/src/mongodb-linux-x86_64-rhel70-4.0.6/conf/mongodb2.conf

启动成功

查看一下进程和端口号:netstat -anptu|grep mongod

多实例构建成功,如果想进入某一个库,在执行mongo的时候需要--port指定端口号。

Mongodb基本操作

show databases  查看当前实例下数据库列表

show users 显示用户

use切换当前数据库

help()显示数据库操作命令

show tables 显示当前数据库中的集合

mycoll.help()显示集合操作命令,mycoll是当前下叫做mycoll的集合

foo.find()对当前数据库中foo集合进行数据查找

数据库(database)操作

一个mongodb中可以建立多个数据库

MongoDB的默认数据库为“db”,该数据库存储在data目录中

MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

插入数据

>use cloud

>db.user.insert({“id”:1,“name”:“Crushlinux”});

查看数据

> db.user.find()     该命令可以补全

查看帮助

>db.help

插入一行数据

> use study

switched to db study

> db.t1.insert({"id":2,"name":"Tom","isadmin":true,"gender":null,"favorite":["apple","banana","orange"],"regtime":new Date()})

查刚插入的数据

>db.t1.find()

显示某一字段类型

> db.t1.findOne({"id" : 2})

定义一个变量a,让刚刚输出的内容定义为a

>a = db.t1.findOne({“id”:2})

判断字段是什么数据类型

>typeof(a.id)

查询操作

数据的备份与恢复

数据备份方法

数据导入命令:mongoimport

数据导出命令:mongoexport

备份

逻辑备份:mongodump

物理备份:冷备份

恢复:mongorestore

复制数据库

复制本地数据库:db.copyDatabase(“from_db”,“to_db”,“localhost”)

复制远程数据库:db.copyDatabase(“from_db”,“to_db”,“192.168.1.100”)

将MySQL中的数据导入MongoDB

select * from t1 into outfile '/var/lib/mysql/t1_mysql.csv' fields terminated by",";

将csv文件导入mongodb数据库

/usr/src/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongoimport -d cloud -c tt1 -f id,name --file /var/lib/mysql/t1_mysql.csv --type csv

将mongodb中的cloud数据库的user集合,导出到/tmp/user.json文件中

/usr/src/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongoexport -d cloud -c user -o /tmp/user.json

mongodump备份

Mongodump命令脚本语法如下

mongodump -h dbhost -d dbname -o dbdirectory

-h:mongodb所在的服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

-d:需要备份的数据库实例,例如:test

-o:备份的数据存放位置

例:创建目录:mkdir /backup

执行备份:/usr/src/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongodump -d cloud -c user -o /backup/

mongorestore还原

Mongorestore命令脚本语法如下:

mongorestore -h hostname -d dbname path --host<:port>,-h<:port>

例:/usr/src/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongorestore -d crushlinux --dir=/backup/cloud/

复制数据库(在数据库内操作,此处localhost可以改成其他主机ip:端口号)

>db.copyDatabase(“crushlinux”,”crushlinux2”,”localhost”)

克隆集合(数据库内操作)

>db.runCommand({“cloneCollection”:“db1.student”,“from”:“localhost:27018”})

MongoDB安全管理

MongoDB深入学习总结(上)

MongoDB角色管理

内置角色

数据库角色:read、readWrite

数据库管理角色:dbAdmin、dbOwner、userAdmin

集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager

备份恢复角色:backup、restore

所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

超级用户角色:root

内部角色:_system

MongoDB进程管理

数据库内执行,查看进程:currentOp()

MongoDB监控管理

查看数据库实例的状态信息:serverStatus()

MongoDB复制集集群部署及管理

MongoDB复制

将一个数据库实例中的所有数据改变复制到另一个独立的数据库实例的过程,默认是主从复制集群(未来不再使用)。缺点是一旦主库出现故障,需要手动把主库角色切换到最可靠的从库上,而其他从库还需配置新的主库去同步。

复制是将数据同步在多个服务器的过程

复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性。

复制还允许您从硬件故障和服务中断中恢复数据

复制的特征:

保障数据的安全性

数据高可用性(24*7)

灾难恢复

无需停机维护(如备份,重建索引,压缩)

分布式读取数据

MongoDB复制集ReplSet

原理上也是MongoDB主从复制技术,但当主库出现故障时,能自动实现主从切换,从而故障得以恢复,其他从库自动从新的主库上同步数据,整个过程不需要手动干预。类似于MySQL中的MHA技术。

MongoDB的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

MongoDB各个节点常见的搭配方式:一主一从,一主多从

主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

附件: MongoDB.docx 282.15KB 下载次数:2次

MongoDB 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小白HTML进阶之路(1)
下一篇:Web前端基础(04)
相关文章