作者 | JiekeXu
来源 | JiekeXu DBA之路(ID: JiekeXu_IT)
大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起看看 Redhat 7.7 安装最新版 MongoDB 5.0.1 手册,欢迎点击上方蓝字关注我,标星或置顶,更多干货第一时间到达!
MongoDB 是一个基于分布式文件存储的数据库,2009 年发布,由 C++ 语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
*面向集合存储,易存储对象类型的数据。
*模式自由。
*支持动态查询。
*支持完全索引,包含内部对象。
*支持查询。
*支持复制和故障恢复。
*使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性。
*支持 Golang,RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
*文件存储格式为BSON(一种JSON的扩展)。
*可通过网络访问。
版本发布:2012年05月23日,MongoDB2.1 开发分支发布了! 该版本采用全新架构,包含诸多增强。
2012年06月06日,MongoDB 2.0.6 发布,分布式文档数据库。
2013年04月23日,MongoDB 2.4.3 发布,此版本包括了一些性能优化,功能增强以及bug修复。
2021 年 7 月 13 日,MongoDB 5.0 发布,引入了时间序列集合,可以有效地存储一段时间内的测量序列。
目前最新版本(2021 年 7 月 13 日)为 5.0.1,其他版本可查看如下归档链接。
https://www.mongodb.com/download-center/community/releases/archive
先解释下MongoDB 的版本号。MongoDB 的版本号分为 3 位:主版本.次版本.修订号。
· 主版本:当有重大更新时更新主版本号。例如支持WT引擎时主版本号从2升级到3;支持事务功能时从3升级到4;
· 次版本:发布新功能时更新次版本号。以奇数次版本号作为开发版,给大家尝鲜用,但不应用于生产环境;以偶数次版本号作为稳定版,适合生产环境使用。这就是为什么大家在下载网站上只看到4.0,4.2,4.4而无法找到4.1,4.3,4.5的原因。
· 修订号:每隔一定时间发布一次,包含近期内所有的bugfix。修订号不做任何功能上的更新,只用于发布bugfix。所以只要主/次版本号一致时,更新修订号可以完全向前兼容。
主/次版本基本上保持一年一次的更新频率,修订号不定期发布。
下面看一下 db-engines 排行榜,排名第五,流行度一直在不断上升,和 PG 两条曲线增势不相上下,深受大家的喜爱。
https://db-engines.com/en/ranking
MongoDB 提供了Linux、Windows、macOS、源码编译等多种数据库的社区版和企业版,企业版收费,社区版免费,我们这里下载社区版即可。
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.1.tgz
当前系统版本:
[root@JiekeXu-Test ~]# uname -r
3.10.0-1062.el7.x86_64
[root@JiekeXu-Test ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.7 (Maipo)
[root@JiekeXu-Test ~]#
[root@JiekeXu-Test /]# mkdir -p /soft
[root@JiekeXu-Test /]# cd soft
[root@JiekeXu-Test soft]# ll
total 0
[root@JiekeXu-Test soft]# ll
total 82980
-rw-r--r-- 1 root root 84968629 Jul 27 16:20 mongodb-linux-x86_64-rhel70-5.0.1.tgz
# groupadd mongo
# useradd -g mongo mongo
# passwd mongo // mongo
# vi /etc/security/limits.conf
添加以下内容
mongo soft nofile 64000
mongo hard nofile 64000
mongo soft nproc 32000
mongo hard nproc 32000
# mkdir /mongodb
# chown -R mongo:mongo /mongodb
# su - mongo
$ cd /mongodb
$ mkdir app conf data log pid
[mongo@JiekeXu-Test mongodb]$ ll
total 0
drwxrwxr-x 2 mongo mongo 6 Jul 27 17:07 app
drwxrwxr-x 2 mongo mongo 6 Jul 27 17:07 conf
drwxrwxr-x 2 mongo mongo 6 Jul 27 17:07 data
drwxrwxr-x 2 mongo mongo 6 Jul 27 17:07 log
drwxrwxr-x 2 mongo mongo 6 Jul 27 17:07 pid
[mongo@JiekeXu-Test mongodb]$ cd app
[mongo@JiekeXu-Test app]$ ll
total 0
[mongo@JiekeXu-Test app]$ cd /soft/
[mongo@JiekeXu-Test soft]$ ll
total 82980
-rw-r--r-- 1 root root 84968629 Jul 27 16:20 mongodb-linux-x86_64-rhel70-5.0.1.tgz
[mongo@JiekeXu-Test soft]$ tar -zxvf /soft/mongodb-linux-x86_64-rhel70-5.0.1.tgz -C /mongodb/app/
mongodb-linux-x86_64-rhel70-5.0.1/LICENSE-Community.txt
mongodb-linux-x86_64-rhel70-5.0.1/MPL-2
mongodb-linux-x86_64-rhel70-5.0.1/README
mongodb-linux-x86_64-rhel70-5.0.1/THIRD-PARTY-NOTICES
mongodb-linux-x86_64-rhel70-5.0.1/bin/install_compass
mongodb-linux-x86_64-rhel70-5.0.1/bin/mongo
mongodb-linux-x86_64-rhel70-5.0.1/bin/mongod
mongodb-linux-x86_64-rhel70-5.0.1/bin/mongos
cd /mongodb/app
ln -s mongodb-linux-x86_64-rhel70-5.0.1 mongodb5
配置环境变量:在 ~/.bash_profile 里添加如下内容,并执行 source 生效:
MONGO_HOME=/mongodb/app/mongodb5
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$MONGO_HOME/bin
source ~/.bash_profile --使环境变量生效
[mongo@JiekeXu-Test log]$ mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --logappend --port=27017 --fork
about to fork child process, waiting until server is ready for connections.
forked process: 4903
child process started successfully, parent exiting
查看版本信息:
这里有关于 transparent_hugepage 的警告信息,故将 transparent_hugepage 禁用掉,最佳实践也需要关闭 numa.重启操作系统生效。
vim /etc/default/grub
在 quiet 和 引号指间加入如下内容:
numa=off transparent_hugepage=never
即倒数第二行改为如下:
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=rhel_jiekexu-test/root rd.lvm.lv=rhel_jiekexu-test/swap rhgb quiet numa=off transparent_hugepage=never"
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
grub2-mkconfig -o /boot/grub2/grub.cfg
cat /etc/default/grub
reboot
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[mongo@JiekeXu-Test ~]$ mongo
MongoDB shell version v5.0.1
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("00fd0a51-d020-45f5-82d0-c8b6f5bc5f92") }
MongoDB server version: 5.0.1
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
We recommend you begin using "mongosh".
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
---
The server generated these startup warnings when booting:
2021-07-27T17:48:33.189+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2021-07-27T17:48:33.189+08:00: This server is bound to localhost. Remote systems will be unable to connect to this server. Start the server with --bind_ip to specify which IP addresses it should serve responses from, or with --bind_ip_all to bind to all interfaces. If this behavior is desired, start the server with --bind_ip 127.0.0.1 to disable this warning
---
---
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()
---
> db.version()
5.0.1
> quit
function quit() {
[native code]
}
> exit
bye
MongoDB 的启动除了上面看到的使用—fork直接命令行后台启动之外,也可以将配置信息写入配置文件后,通过指定配置文件的方式来启动。
MongoDB的配置文件是/etc/mongo.conf,我们使用tgz包安装时不会创建该文件,如果通过yum方式安装会默认创建该文件。我们这里可以直接创建配置文件,并写入参数即可。
我们这里添加的参数如下:
[mongo@JiekeXu-Test conf]$ vim /mongodb/conf/mongo.conf
#数据库数据存放目录
dbpath=/mongodb/data
#数据库日志存放目录
logpath=/mongodb/log/mongodb.log
#以追加的方式记录日志
logappend = true
#端口号 默认为27017
port=27017
#以后台方式运行进程
fork=true
#后台运行的进程号
pidfilepath=/mongodb/pid/mongod.pid
#开启用户认证
auth=true
#关闭http接口,默认关闭http端口访问
#nohttpinterface=true
#mongodb所绑定的ip地址,默认为127.0.0.1
bind_ip = 0.0.0.0
#启用日志文件,默认启用
journal=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true
[mongo@JiekeXu-Test conf]$ mongod --config /mongodb/conf/mongo.conf
about to fork child process, waiting until server is ready for connections.
forked process: 2874
child process started successfully, parent exiting
[mongo@JiekeXu-Test conf]$ ps -ef|grep mongo
root 2659 2620 0 17:48 pts/1 00:00:00 su - mongo
mongo 2660 2659 0 17:48 pts/1 00:00:00 -bash
mongo 2874 1 2 17:56 ? 00:00:00 mongod --config /mongodb/conf/mongo.conf
mongo 2923 2660 0 17:57 pts/1 00:00:00 ps -ef
mongo 2924 2660 0 17:57 pts/1 00:00:00 grep --color=auto mongo
相对于启动,停止MongoDB 可以在系统层面和DB层面进行操作。
最基本的方法就是向 MongoDB 服务器发送一个 SIGINT 或者 SIGTERM 信号。如果服务器是作为前台进程运行在终端的,就直接按 Ctrl-C。否则,就用 kill这种命令发出信号。
假设 mongod的 PID是 2874,就可以kill -2 2874(SIGINT)或者kill 2874(SIGTERM)。
当 mongod 收到 SIGINT 或者 SIGTERM 时,会安全的退出。也就是说会等到当前运行的操作或者文件预分配完成(需要一些时间),关闭所有打开的连接,将缓存的数据刷新到磁盘,最后停止。
注意:千万不要向运行中的 MongoDB 发送 SIGKILL(kill -9)。这样会导致数据库直接关闭,上面讲到的步骤都将被忽略,这会使数据文件损毁。故很少使用操作系统层面的 kill。
DB 层面可以直接使用 shutdown 命令,“db.shutdownServer()"。这是管理命令,要在 admin 数据库下使用。
[mongo@JiekeXu-Test conf]$ mongo
MongoDB shell version v5.0.1
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("994c07e0-9c56-4206-84b8-89d97d371cdb") }
MongoDB server version: 5.0.1
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
We recommend you begin using "mongosh".
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
> use admin
switched to db admin
> db.shutdownServer() //直接关闭会报错,如下所示。
Error: shutdownServer failed: {
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { shutdown: 1.0, lsid: { id: UUID(\"a26b8ede-062f-4f6c-8ec7-97c3be2ff139\") }, $db: \"admin\" }",
"code" : 13,
"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.shutdownServer@src/mongo/shell/db.js:436:19
@(shell):1:1
##创建一个root账号
> db.createUser(
{
user:"root",
pwd:"123456",
roles:[{role:"root",db:"admin"}]
}
);
> db.auth('root','123456')
1
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
## 修改密码
> db.changeUserPassword('root','root');
> db.shutdownServer()
server should be down...
>
或者命令行直接执行:
[mongo@JiekeXu-Test conf]$ mongod --config /mongodb/conf/mongo.conf
about to fork child process, waiting until server is ready for connections.
forked process: 3276
child process started successfully, parent exiting
[mongo@JiekeXu-Test conf]$
[mongo@JiekeXu-Test conf]$ ps -ef|grep mongo
root 2659 2620 0 17:48 pts/1 00:00:00 su - mongo
mongo 2660 2659 0 17:48 pts/1 00:00:00 -bash
mongo 3276 1 1 18:21 ? 00:00:01 mongod --config /mongodb/conf/mongo.conf
mongo 3335 2660 0 18:23 pts/1 00:00:00 ps -ef
mongo 3336 2660 0 18:23 pts/1 00:00:00 grep --color=auto mongo
[mongo@JiekeXu-Test conf]$ mongod -f /mongodb/conf/mongo.conf --shutdown
killing process with pid: 3276
[mongo@JiekeXu-Test conf]$ ps -ef|grep mongo
root 2659 2620 0 17:48 pts/1 00:00:00 su - mongo
mongo 2660 2659 0 17:48 pts/1 00:00:00 -bash
mongo 3353 2660 0 18:23 pts/1 00:00:00 ps -ef
mongo 3354 2660 0 18:23 pts/1 00:00:00 grep --color=auto mongo
使用 root 用户可以直接将 mongodb 启动项目追加入 rc.local 保证 mongodb 在服务器开机时启动,比较简单粗暴,这里也是使用第一种方法。
[root@JiekeXu-Test ~]# echo "mongod --config /mongodb/conf/mongo.conf" >> /etc/rc.local
在 /etc/init.d 目录下创建 mongodb 文件,并添加如下内容:
[root@JiekeXu-Test ~]# cat /etc/init.d/mongodb
#!/bin/sh
#
#chkconfig: 2345 80 90
#description: mongodb
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
start() {
/mongodb/app/mongodb5/bin/mongod -f /mongodb/conf/mongo.conf
}
stop() {
/mongodb/app/mongodb5/bin/mongod -f /mongodb/conf/mongo.conf --shutdown
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
[root@JiekeXu-Test ~]#
[root@JiekeXu-Test ~]# chmod a+x /etc/init.d/mongodb
[root@JiekeXu-Test ~]# chkconfig --add mongodb
[root@JiekeXu-Test ~]# chkconfig mongodb on
[root@JiekeXu-Test ~]# chkconfig --list
mongodb 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rhnsd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@JiekeXu-Test ~]# service mongodb stop
There doesn't seem to be a server running with dbpath: /mongodb/data
[root@JiekeXu-Test ~]# ps -ef|grep mongo
root 43880 17422 0 11:49 pts/2 00:00:00 mongo
root 60509 41028 0 12:28 pts/3 00:00:00 grep --color=auto mongo
[root@JiekeXu-Test ~]# service mongodb start
about to fork child process, waiting until server is ready for connections.
forked process: 60543
child process started successfully, parent exiting
[root@JiekeXu-Test ~]# service mongodb stop
killing process with pid: 60543
Robo 3T 是一个跨平台的 MongoDB 管理工具,采用图形界面查询或者修改MongoDB。下载地址为:https://robomongo.org/download 。
Robo Studio 3T 是 MongoDB 的专业 IDE,商业收费软件,可下载 30 天试用版本,这里我们仅下载 Robo 3T 即可。
下载安装后,打开点击 create 创建连接,选择连接类型、连接名、IP 和 端口号,Set Name 账号、密码等信息连接即可。
mongo --host 192.168.75.128 --port 27017 -u root -p root --authenticationDatabase admin
下图是我生产环境集群连接示意图:
要配置mongod或mongos使用配置文件,可使用--config选项或 -f选项指定配置文件,以下是一些参数的含义:
--quiet # 安静输出
--port arg # 指定服务端口号,默认端口27017
--bind_ip arg # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
--logpath arg # 指定MongoDB日志文件,注意是指定文件不是目录
--logappend # 使用追加的方式写日志
--pidfilepath arg # PID File 的完整路径,如果没有设置,则没有PID文件
--keyFile arg # 集群的私钥的完整路径,只对于Replica Set 架构有效
--unixSocketPrefix arg # UNIX域套接字替代目录,(默认为 /tmp)
--fork # 以守护进程的方式运行MongoDB,创建服务器进程
--auth # 启用验证
--cpu # 定期显示CPU的CPU利用率和iowait
--dbpath arg # 指定数据库路径
--diaglog arg # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads
--directoryperdb # 设置每个数据库将被保存在一个单独的目录
--journal # 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
--journalOptions arg # 启用日志诊断选项
--ipv6 # 启用IPv6选项
--jsonp # 允许JSONP形式通过HTTP访问(有安全影响)
--maxConns arg # 最大同时连接数 默认2000
--noauth # 不启用验证
--nohttpinterface # 关闭http接口,默认关闭27018端口访问
--noprealloc # 禁用数据文件预分配(往往影响性能)
--noscripting # 禁用脚本引擎
--notablescan # 不允许表扫描
--nounixsocket # 禁用Unix套接字监听
--nssize arg (=16) # 设置信数据库.ns文件大小(MB)
--objcheck # 在收到客户数据,检查的有效性,
--profile arg # 档案参数 0=off 1=slow, 2=all
--quota # 限制每个数据库的文件数,设置默认为8
--quotaFiles arg # number of files allower per db, requires --quota
--rest # 开启简单的rest API
--repair # 修复所有数据库run repair on all dbs
--repairpath arg # 修复库生成的文件的目录,默认为目录名称dbpath
--slowms arg (=100) # value of slow for profile and console log
--smallfiles # 使用较小的默认文件
--syncdelay arg (=60) # 数据写入磁盘的时间秒数(0=never,不推荐)
--sysinfo # 打印一些诊断系统信息
--upgrade # 如果需要升级数据库
* Replicaton 参数
--------------------------------------------------------------------------------
--fastsync # 从一个dbpath里启用从库复制服务,该dbpath的数据库是主库的快照,可用于快速启用同步
--autoresync # 如果从库与主库同步数据差得多,自动重新同步,
--oplogSize arg # 设置oplog的大小(MB)
* 主/从参数
--------------------------------------------------------------------------------
--master # 主库模式
--slave # 从库模式
--source arg # 从库 端口号
--only arg # 指定单一的数据库复制
--slavedelay arg # 设置从库同步主库的延迟时间
* Replica set(副本集)选项:
--------------------------------------------------------------------------------
--replSet arg # 设置副本集名称
* Sharding(分片)选项
--------------------------------------------------------------------------------
--configsvr # 声明这是一个集群的config服务,默认端口27019,默认目录/data/configdb
--shardsvr # 声明这是一个集群的分片,默认端口27018
--noMoveParanoia # 关闭偏执为moveChunk数据保存
参数的更多说明可参考官方手册:
https://docs.mongodb.com/manual/refere】nce/configuration-options/
那么,今天也就到这里结尾了,以后有时间在继续学习 MongoDB 吧。如果此文对您有帮助,欢迎点赞、在看与转发,写作不易,坚持写作更不易,您的点赞、转发,举手之劳,便是对作者最大的支持,也能让更多的人受益,感谢!
———————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
腾讯云:https://cloud.tencent.com/developer/user/5645107
———————————————————————————
Oracle 19C MAA 搭建指南
百花齐放的国产数据库