MongoDB深入学习总结(上)

举报
当她睡着时 发表于 2021/06/19 22:55:37 2021/06/19
【摘要】 MongoDB一、产品介绍MongoDB是由C++语言编写的一个基于分布式文件存储的开源NoSQL数据库系统,在高负载的情况下,可添加更多的节点(实例),以保证服务性能,在许多场景下用于代替传统的关系型数据库或键/值存储方式,皆在为Web应用提供可扩展的高性能数据存储解决方案。MongoDB提供了一个面向文档的存储方式,操作起来比较简单和容易,可以存储比较复杂的数据类型,是一个面向集合的,模...

MongoDB

一、产品介绍

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

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

  • MongoDB基本概念
  1. 文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库系统中的行(但比行复杂的多)。
  2. 集合(collection)就是一组文档,如果说MongoDB中的文档类似于关系型数据库的行,那么集合就如同数据表
  3. MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限。

MongoDB   关系型数据库

文档(document)   行(row)

集合(collection) 表(table)

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

  • 日志文件类型
  1. 系统日志文件 logpath
  2. journal日志文件(没怎么用过)
  3. oplog复制操作日志文件(相当于MySQL中的bin-log 二进制日志)
  4. 慢查询日志

 

  • 数据类型

 

1)BSON 的数据类型

 null,代表空或者不存在

布尔,只有 true 和 false

数字,64 位浮点数

字符串,utf8 字符串

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

对象,对象的数据

2)BSON 的特点

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

3)命名规则

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

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

空字符串。

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

 

  • MongoDB的安装
  1. 指定同一个进程同一时间最多开启的文件数:ulimit -n
  2. 设置上述数值为65535(大一些就可以):ulimit -n 65535
  3. 设置用户最多开启的程序数目:ulimit -u 65535
  4. yum安装wget:yum -y install wget
  5. 安装MongoDB的tar包,地址如下,执行命令:wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.6.tgz
  6. 解压到/usr/src下:tar xf mongodb-linux-x86_64-rhel70-4.0.6.tgz -C /usr/src/
  7. 为该文件创建软连接:ln -s /usr/src/mongodb-linux-x86_64-rhel70-4.0.6 /usr/local/mongodb

 

  1. bin目录中的shell脚本链接到/bin下:ln -s /usr/local/mongodb/bin/ /bin/
  2. 创建数据目录,日志文件及目录并创建相应的配置文件(因为MongoDB的包中没有自带这些东西,所以需要我们自己来配置)
  3. 首先在/data目录下创建目录:mkdir -p /data/mongodb1
  4. /data/logs目录下创建目录:mkdir -p /data/logs/mongodb
  5. /data/logs目录下创建文件:touch /data/logs/mongodb/mongodb1.log
  6. /usr/local/mongodb下创建conf目录:mkdir /usr/local/mongodb/conf
  7. conf目录下创建mongodb的配置文件:vim /usr/local/mongodc/conf/mongodb1.conf
  8. 内容如下

 

  1. 启动,并指定配置文件:/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb1.conf
  2. 查看进程ps -aux|grep :27107

 

  1. 设置开机自启动:vim /etc/rc.local ,插入下面这两句
  2. rm -f /data/mongodb1/mongod.lock
  3. /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf
  4. 进入bin内执行./mongo启动服务

 

 

  • MongoDB多实例配置
  1. 进入mongodb的目录,复制conf配置文件:cd /usr/src/mongodb-linux-x86_64-rhel70-4.0.6/conf/
  2. 复制配置文件:cp mongodb1.conf mongodb2.conf

 

  1. 编辑conf文件:vim mongodb2.conf
  2. 主要更改端口号、数据库路径以及日志输出路径:

 

  1. 创建mongodb2目录:mkdir /data/mongodb2
  2. 创建log日志文件:touch /data/logs/mongodb/mongodb2.log
  3. 为该文件添加一个权限:chmod 777 /data/logs/mongodb/mongodb2.log
  4. 启动,且指定配置文件: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
  5. 启动成功

 

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

 

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

 

 

  • Mongodb基本操作
  1. show databases  查看当前实例下数据库列表
  2. show users 显示用户
  3. use<db_name>切换当前数据库
  4. help()显示数据库操作命令
  5. show tables 显示当前数据库中的集合
  6. mycoll.help()显示集合操作命令,mycoll是当前下叫做mycoll的集合
  7. 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)

 

 

 

  • 查询操作

 

  • 数据的备份与恢复
  1. 数据备份方法

数据导入命令:mongoimport

数据导出命令:mongoexport

 

备份

逻辑备份:mongodump

物理备份:冷备份

恢复:mongorestore

 

  1. 复制数据库

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

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

 

  1. 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

 

 

 

  1. 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

 

  1. 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/

  1. 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/

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

>db.copyDatabase(crushlinux,crushlinux2,localhost)

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

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

 

  • MongoDB安全管理

 

  • MongoDB角色管理
  1. 内置角色
  • 数据库角色:read、readWrite
  • 数据库管理角色:dbAdmin、dbOwner、userAdmin
  • 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
  • 备份恢复角色:backup、restore
  • 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  • 超级用户角色:root
  • 内部角色:_system

 

  • MongoDB进程管理
  1. 数据库内执行,查看进程:currentOp()

 

  • MongoDB监控管理
  1. 查看数据库实例的状态信息:serverStatus()

 

 

  • MongoDB复制集集群部署及管理
  1. MongoDB复制

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

  • 复制是将数据同步在多个服务器的过程
  • 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性。
  • 复制还允许您从硬件故障和服务中断中恢复数据

 

复制的特征:

  • 保障数据的安全性
  • 数据高可用性(24*7)
  • 灾难恢复
  • 无需停机维护(如备份,重建索引,压缩)
  • 分布式读取数据

 

  1. MongoDB复制集ReplSet

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

  • MongoDB的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
  • MongoDB各个节点常见的搭配方式:一主一从,一主多从
  • 主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。