MongoDB深入学习总结(上)
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 字符,只有少数例外:$开头;\0(空字符);_下划线开头。
集合的命名几乎所有 utf8 字符,只有少数例外:$开头;\0(空字符);system.开头;””
空字符串。
数据库的命名几乎所有 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<db_name>切换当前数据库
- 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角色管理
- 内置角色
- 数据库角色: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,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
- 点赞
- 收藏
- 关注作者
评论(0)