mongodb数据库的安装
什么是MongoDB ?
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
主要特点
-
- MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。 - 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。 - 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。 - 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。 - Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。 - MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。 - Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。 - Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。 - Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。 - GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。 - MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。 - MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。 - MongoDB安装简单。
一、环境
centos7.4 、mongodb4.2
软件下载地址
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.8.tgz
下的比较慢,可在真机FQ下载
两种安装方式,由于wall的原因,下载比较慢,个人推荐安装包进行安装,yum安装仅供参考。
二、安装步骤
安装包进行安装
先关闭防火墙
systemctl stop firewalld
setenforce 0
软件下载好之后
1、解压到/usr/local下并修改文件名
[root@localhost ~]# tar -xzvf mongodb-linux-x86_64-rhel70-4.2.8.tgz -C /usr/local/
mongodb-linux-x86_64-rhel70-4.2.8/THIRD-PARTY-NOTICES.gotools
mongodb-linux-x86_64-rhel70-4.2.8/README
mongodb-linux-x86_64-rhel70-4.2.8/THIRD-PARTY-NOTICES
mongodb-linux-x86_64-rhel70-4.2.8/MPL-2
mongodb-linux-x86_64-rhel70-4.2.8/LICENSE-Community.txt
mongodb-linux-x86_64-rhel70-4.2.8/bin/mongodump
mongodb-linux-x86_64-rhel70-4.2.8/bin/mongorestore
mongodb-linux-x86_64-rhel70-4.2.8/bin/mongoexport
mongodb-linux-x86_64-rhel70-4.2.8/bin/mongoimport
mongodb-linux-x86_64-rhel70-4.2.8/bin/mongostat
mongodb-linux-x86_64-rhel70-4.2.8/bin/mongotop
mongodb-linux-x86_64-rhel70-4.2.8/bin/bsondump
mongodb-linux-x86_64-rhel70-4.2.8/bin/mongofiles
mongodb-linux-x86_64-rhel70-4.2.8/bin/mongoreplay
mongodb-linux-x86_64-rhel70-4.2.8/bin/mongod
mongodb-linux-x86_64-rhel70-4.2.8/bin/mongos
mongodb-linux-x86_64-rhel70-4.2.8/bin/mongo
mongodb-linux-x86_64-rhel70-4.2.8/bin/install_compass
[root@localhost ~]# cd /usr/local/
[root@localhost local]# mv mongodb-linux-x86_64-rhel70-4.2.8/ mongodb
2、配置环境变量
[root@localhost local]# vim /etc/profile
添加
export PATH=/usr/local/mongodb/bin:$PATH
[root@localhost local]# source /etc/profile
3、创建数据库目录、日志目录并设置文件夹权限
[root@localhost local]# cd /usr/local/mongodb/
[root@localhost mongodb]# mkdir dblog db
[root@localhost mongodb]# chmod 777 db dblog/
[root@localhost mongodb]# cd dblog/
[root@localhost dblog]# ls
[root@localhost dblog]# touch mongodb.log
[root@localhost dblog]#
4、修改配置文件
[root@localhost dblog]# cd ..
[root@localhost mongodb]# vim mongodb.conf
port=27017
dbpath= /usr/local/mongodb/db
logpath= /usr/local/mongodb/dblog/mongodb.log
logappend=true
fork=true
maxConns=100
noauth=true
journal=true
storageEngine=wiredTiger
bind_ip = 0.0.0.0
配置文件解释
port=27017 #端口
dbpath= /usr/local/mongodb/db #数据库存文件存放目录
logpath= /usr/local/mongodb/dblog/mongodb.log #日志文件存放路径
logappend=true #使用追加的方式写日志
fork=true #以守护进程的方式运行,创建服务器进程
maxConns=100 #最大同时连接数
noauth=true #不启用验证
journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)#即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
storageEngine=wiredTiger #存储引擎,有mmapv1、wiretiger、mongorocks
bind_ip = 0.0.0.0 #设置成全部ip可以访问,这样就可以在windows中去连虚拟机的MongoDB,也可以设置成某个网段或者某个ip
5、启动
[root@localhost mongodb]# mongod --config /usr/local/mongodb/mongodb.conf &
[1] 8510
[root@localhost mongodb]# about to fork child process, waiting until server is ready for connections.
forked process: 8512
[root@localhost mongodb]# child process started successfully, parent exiting
看到这个说明启动成功
配置systemd方式启动
[root@localhost mongodb]# vim /lib/systemd/system/mongodb.service
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongodb.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@localhost ~]# systemctl daemon-reload
[root@localhost mongodb]# systemctl start mongodb
[root@localhost mongodb]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 994/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1093/master
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 88799/mongod
tcp6 0 0 :::22 :::* LISTEN 994/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1093/master
[root@localhost mongodb]#
不配置这两个的话,进去数据库会有一个建议的提示
自CentOS6版本开始引入了Transparent Huge Pages(THP),从CentOS7版本开始,该特性默认就会启用。尽管THP的本意是为提升内存的性能,不过某些数据库厂商还是建议直接关闭THP(比如说Oracle、MariaDB、MongoDB等),否则可能会导致性能出现下降。
[root@localhost ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@localhost ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
进入
[root@localhost mongodb]# mongo
MongoDB shell version v4.2.8
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("7bd208fc-8cf3-44f8-91d2-8220a334b50d") }
MongoDB server version: 4.2.8
Server has startup warnings:
2020-07-11T10:28:49.098+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2020-07-11T10:28:49.098+0800 I CONTROL [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
看到这里的提示,可以知道,可以使用官方提供的启用MongoDB免费的基于云的监控服务,该服务将接收并显示(磁盘利用率、CPU、操作统计信息等)。
监控数据将在MongoDB网站上提供,您可以访问一个唯一的URL和你分享网址的人。MongoDB可能会使用这些信息来制作产品改进并向您建议MongoDB产品和部署选项。
要启用免费监视,请运行以下命令:db.enableFreeMonitoring()
要永久禁用此提醒,请运行以下命令:db.disableFreeMonitoring()
> db.enableFreeMonitoring()
> db.enableFreeMonitoring()
{
"state" : "enabled",
"message" : "To see your monitoring data, navigate to the unique URL below. Anyone you share the URL with will also be able to view this page. You can disable monitoring at any time by running db.disableFreeMonitoring().",
"url" : "https://cloud.mongodb.com/freemonitoring/cluster/XGCRPT3FBDW5SVL7KBZX33KY4MUINM7X",
"userReminder" : "",
"ok" : 1
}
可以访问上边那个网址进行监控
>1+1
2
>
yum进行安装
1、配置yum源
[root@localhost ~]# vim /etc/yum.repos.d/mongodb-org-4.0.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
[root@localhost ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base extras mongodb-org-3.4 mongodb-org-4.0 updates
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or r
emoved reposCleaning up list of fastest mirrors
[root@localhost ~]#
2、安装(比较慢)
[root@localhost ~]# yum install -y mongodb-org
Loaded plugins: fastestmirror
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
mongodb-org-3.4 | 2.5 kB 00:00:00
mongodb-org-4.0 | 2.5 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/6): base/7/x86_64/group_gz | 153 kB 00:00:00
(2/6): extras/7/x86_64/primary_db | 194 kB 00:00:05
3、默认配置
默认数据位置
/var/lib/mongo
默认日志位置
/var/log/mongodb
配置文件位置
vim /etc/mongod.conf
将net:bindIp: 127.0.0.1 改为 0.0.0.0
4、开启
systemctl start mongodb
创建用户
>use admin > db.createUser({user:"userAdmin",pwd:"admin",roles:["userAdminAnyDatabase"]}) > Successfully added user: { "user" : "userAdmin", "roles" : [ "userAdminAnyDatabase" ] } **注意** : 这个上面创建一个拥有 userAdminAnyDatabase 角色,用来管理用户的用户,可以通过这个角色来创建、删除用户,这个并不能操作admin这个数据库,我们想要操作所有数据库的权限,此时我们可以在进行创建一个管理所有数据库的账号。 > db.createUser({user:"root",pwd:"root123",roles:[{role:"readWriteAnyDatabase",db:"admin"}]}) Successfully added user: { "user" : "root", "roles" : [ { "role" : "readWriteAnyDatabase", "db" : "admin" } ] }
内置角色 数据库用户角色 read、readWrite 数据库管理角色 dbAdmin、dbOwner、userAdmin 集群管理角色 clusterAdmin、clusterManager、clusterMonitor、hostManager 备份恢复角色 backup、restore 所有数据库角色 readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 超级用户角色 root 内部角色 __system 角色作用 角色 作用 Read 允许用户读取指定数据库 readWrite 允许用户读写指定数据库 dbAdmin 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile userAdmin 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 clusterAdmin 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 readAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的读权限 readWriteAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的读写权限 userAdminAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 dbAdminAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 root 只在admin数据库中可用。超级账号,超级权限。
vim /usr/local/mongo/mongodb.conf
#noauth=true
auth=true
[root@localhost ~]# mongo
MongoDB shell version v4.2.8
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("558efc46-7139-4f5c-b225-0d77603584f3") }
MongoDB server version: 4.2.8
> show dbs
> show users
> 2020-07-13T13:35:07.649+0800 E QUERY [js] uncaught exception: Error: command usersInfo requires authentication :
> _getErrorWithCode@src/mongo/shell/utils.js:25:13
> DB.prototype.getUsers@src/mongo/shell/db.js:1638:15
> shellHelper.show@src/mongo/shell/utils.js:883:9
> shellHelper@src/mongo/shell/utils.js:790:15
> @(shellhelp2):1:1
> use admin
> switched to db admin
> db.auth('admin','admin')
> 1
> show dbs
> admin 0.000GB
> config 0.000GB
> local 0.000GB
> morning 0.000GB
可以使用navicat进行连接
mongodb的简单操作
MongoDB 创建数据库
语法
MongoDB 创建数据库的语法格式如下:
use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库。
实例
以下实例我们创建了数据库 runoob:
> use runoob
switched to db runoob
> db
runoob
>
如果你想查看所有数据库,可以使用 show dbs 命令:
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
>
可以看到,我们刚创建的数据库 runoob 并不在数据库的列表中, 要显示它,我们需要向 runoob 数据库插入一些数据。
> db.runoob.insert({"name":"教程"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
runoob 0.000GB
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
MongoDB 删除数据库
语法
MongoDB 删除数据库的语法格式如下:
db.dropDatabase()
删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。
实例
以下实例我们删除了数据库 runoob。
首先,查看所有数据库:
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
runoob 0.000GB
接下来我们切换到数据库 runoob:
> use runoob
switched to db runoob
>
执行删除命令:
> db.dropDatabase()
{ "dropped" : "runoob", "ok" : 1 }
最后,我们再通过 show dbs 命令数据库是否删除成功:
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
MongoDB 创建集合
MongoDB 中使用 createCollection() 方法来创建集合。
语法格式:
db.createCollection(name, options)
参数说明:
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
options 可以是如下参数:
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔 | 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值,以千字节计(KB)。 如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。
实例
在 test 数据库中创建 runoob 集合:
> use test
switched to db test
> db.createCollection("runoob")
{ "ok" : 1 }
>
如果要查看已有集合,可以使用 show collections 或 show tables 命令:
> show collections
runoob
system.indexes
下面是带有几个关键参数的 createCollection() 的用法:
创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
> db.createCollection("mycol", { capped : true, autoIndexId : true, size :
6142800, max : 10000 } )
{ "ok" : 1 }
>
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
> db.mycol2.insert({"name" : "菜鸟教程"})
> show collections
mycol2
...
MongoDB 删除集合
本章节我们为大家介绍如何使用 MongoDB 来删除集合。
MongoDB 中使用 drop() 方法来删除集合。
语法格式:
db.collection.drop()
返回值
如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。
实例
在数据库 mydb 中,我们可以先通过 show collections 命令查看已存在的集合:
>use mydb
switched to db mydb
>show collections
mycol
mycol2
system.indexes
runoob
>
接着删除集合 mycol2 :
>db.mycol2.drop()
true
>
通过 show collections 再次查看数据库 mydb 中的集合:
>show collections
mycol
system.indexes
runoob
>
从结果中可以看出 mycol2 集合已被删除。