1-MongoDB - 各平台安装及配置MongoDB
before
截至到本篇博客编写时,MongoDB最新版本已经到了MongoDB4.4.3,但市场上的主流版本是3.4和3.6两个版本,所以,本次我们以3.6版本为例。
download
无论你下载哪个平台的MongoDB安装包,都可以在这个地址选择下载:
下载速度很慢,所以,这里提供了百度云盘的链接:https://pan.baidu.com/s/1BeupfSNTxsVrMKpAxbqKPQ 提取码:omce
,其中:
- Linux:
mongodb-linux-x86_64-rhel70-3.6.12.tgz
- Windows:
mongodb-win32-x86_64-2008plus-ssl-3.6.12.zip
- Mac OS:
mongodb-osx-ssl-x86_64-3.6.12.tgz
for windows
win10 + mongodb3.6.12
首先,在 MongoDB2.2 版本后已经不再支持 Windows XP 系统。
另外,MongoDB为Windows平台提供msi
和zip
两种安装方式:
msi
方式,一路一下一步,方便快捷,但只推荐MongoDB4.0及以上版本采用msi方式安装,因为MongoDB4.x版本对msi安装方式进行了优化,随着提示就可以完成配置,但3.x和更低的版本则仍旧需要在安装完毕后,手动做配置,所以低版本不推荐msi方式。zip
方式,解压即安装,可以将其安装到任意目录,后续都可以手动进行配置,比较灵活,推荐采用这种方式进行安装。
install
将zip包进行解压,其实解压后的目录就是MongoDB的安装目录,我这里已解压并重命名,并且手动在这个目录内创建:
data
目录保存数据文件。log
目录保存日志文件。mongodb.conf
文件,是MongoDB的配置文件。
在bin
目录内,我们暂时需要了解两个文件:
mongo.exe # MongoDB客户端软件
mongod.exe # MongoDB服务端软件
配置环境变量
这一步的目的是,后续我们可以直接通过终端操作MongoDB。
步骤是此电脑
--鼠标右键选择属性
--高级系统设置
--环境变量
--系统变量
选项,找到Path
,选择新建
,将C:\mongodb\bin
目录添加进去,如下图:
最后选择保存即可。
编写配置文件
编写配置文件的目的是便于后续以配置文件的方式启动MongoDB服务。
打开mongodb.conf
文件,写入如下内容,然后保存。
# 系统日志相关
systemLog:
destination: file # 使用文件存储日志
path: C:\mongodb\log\mongodb.log # 日志位置
logAppend: true # 是否以追加的形式记录日志
# 数据相关
storage:
journal: # 回滚日志
enabled: true
dbPath: C:\mongodb\data # 数据存储目录
# 网络配置相关
net:
port: 27017 # 默认端口
bindIp: 127.0.0.1 # 绑定ip, 多个ip以逗号分隔
上面配置中的bindIp
设置为127.0.0.1
表示只能本地访问MongoDB,如果需要远程访问,还需要设置本机IP,然后重启服务。
将MongoDB服务添加Windows的服务
这一步的目的是将来在终端中通过net
来管理MongoDB。
以管理员的身份打开终端,输入:
mongod --config C:\mongodb\mongodb.conf --install
上面的命令执行成功后,此时Windows的服务中就有了MongoDB的服务了。
你可以在Windows的服务中管理MongoDB,比如设置开机启动、手动等设置。
而我们现在则可以在终端中使用net
来start和stop MongoDB了。
注意,只有以管理员身份打开的终端才能执行net命令。
测试MongoDB是否按照成功
前提是MongoDB服务正在运行。
终端(可以是非管理员身份打开的终端)输入mongo
即可开启MongoDB客户端,输入相应命令来使用MongoDB服务了:
OK,安装完毕。
for centos7.9
cenots7.9 + mongodb3.6.12
系统要求
- Redhat或者centos6.2以上系统,当然,centos7以上都无所谓了。
- 系统开发包完整,因为MongoDB是C++编写,依赖C的环境
- IP地址和hosts文件解析正常
- iptables防火墙和SElinux关闭
- 关闭大叶内存机制
关于大页内存:https://linux.cn/article-9450-1.html
centos系统关闭大页内存
vim /etc/rc.local
追加如下内容,然后重新运行一下sh /etc/rc.local
即可:
[root@cs software]# pwd
/opt/software
[root@cs software]# vim /etc/rc.local
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
[root@cs software]# sh /etc/rc.local
完事检查是否设置成功,都是never
即可:
[root@cs software]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@cs software]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
PS:rc.local
控制开机自启动。
注意,仅适用于centos系统,其他系统,如Ubuntu等参考官档
由于MongoDB通常都以非root用户操作,所以后续的操作示例中,如何判断是以什么用户操作的呢?
# 可以通过示例中的 "#" 和 "$" 来判断
[root@cs software]# # 这是root用户的操作
[mongod@cs mongodb]$ # 这是非root用户的操作
安装必要的依赖
yum install libcurl openssl gcc -y
创建mongod用户
MongoDB建议使用非root用户进行管理,所以我们创建一个mongod
用户/用户组来管理MongoDB:
[root@cs software]# useradd mongod
[root@cs software]# passwd mongod
Changing password for user mongod.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
记录下,用户名是mongod
,密码是1234
。
注意,此时我们还是以root用户在操作。
install
- 创建必要的目录:
[root@cs software]# mkdir -p /data/mongodb_data/27017/{conf,log,data}
见名知意,conf是配置文件目录,log是日志目录,data是数据目录。而为了后续搭建MongoDB复制集和集群,这里的数据目录以端口号作为分割,一个端口号代表一个MongoDB实例。
- 下载二进制包,或者使用我提供的也行:
[root@cs software]# pwd
/opt/software
[root@cs software]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.12.tgz
[root@cs software]# ls
mongodb-linux-x86_64-rhel70-3.6.12.tgz redis
- 解压:
[root@cs software]# tar xf mongodb-linux-x86_64-rhel70-3.6.12.tgz
[root@cs software]# ls
mongodb-linux-x86_64-rhel70-3.6.12 mongodb-linux-x86_64-rhel70-3.6.12.tgz redis
解压后的目录内只有bin
目录对我们来说是有用的:
[root@cs software]# ls mongodb-linux-x86_64-rhel70-3.6.12
bin LICENSE-Community.txt MPL-2 README THIRD-PARTY-NOTICES
[root@cs software]# ls mongodb-linux-x86_64-rhel70-3.6.12/bin/
bsondump mongo mongodump mongofiles mongoperf mongorestore mongostat
install_compass mongod mongoexport mongoimport mongoreplay mongos mongotop
- 整理目录和授权。
我们将MongoDB的bin目录从新拷贝到/opt/software
目录作为MongoDB的安装目录:
[root@cs software]# cp -r mongodb-linux-x86_64-rhel70-3.6.12/bin/ /opt/software/mongodb
[root@cs software]# ll mongodb/
total 310768
-rwxr-xr-x. 1 mongod mongod 13598456 Jan 13 11:50 bsondump
-rwxr-xr-x. 1 mongod mongod 7770 Jan 13 11:50 install_compass
-rwxr-xr-x. 1 mongod mongod 33775680 Jan 13 11:50 mongo # client
-rwxr-xr-x. 1 mongod mongod 59656584 Jan 13 11:50 mongod # server
-rwxr-xr-x. 1 mongod mongod 14463896 Jan 13 11:50 mongodump # 备份恢复
-rwxr-xr-x. 1 mongod mongod 14024312 Jan 13 11:50 mongoexport # 备份恢复
-rwxr-xr-x. 1 mongod mongod 13896704 Jan 13 11:50 mongofiles
-rwxr-xr-x. 1 mongod mongod 14165112 Jan 13 11:50 mongoimport # 备份恢复
-rwxr-xr-x. 1 mongod mongod 59161264 Jan 13 11:50 mongoperf
-rwxr-xr-x. 1 mongod mongod 18735472 Jan 13 11:50 mongoreplay # 备份恢复
-rwxr-xr-x. 1 mongod mongod 14499216 Jan 13 11:50 mongorestore # 备份恢复
-rwxr-xr-x. 1 mongod mongod 34249592 Jan 13 11:50 mongos
-rwxr-xr-x. 1 mongod mongod 14170648 Jan 13 11:50 mongostat
-rwxr-xr-x. 1 mongod mongod 13796144 Jan 13 11:50 mongotop
现在,我们需要记住两个目录:
# MongoDB软件的安装位置
[root@cs mongodb]# pwd
/opt/software/mongodb
# MongoDB的数据及log、配置文件目录
[root@cs mongodb]# ls /data/mongodb_data/27017
conf data log
并且对这两个目录进行授权:
[root@cs mongodb]# chown -R mongod:mongod /opt/software/mongodb
[root@cs mongodb]# chown -R mongod:mongod /data/mongodb_data/27017
- 环境变量设置
因为将来我们需要使用mongod
用户来管理MongoDB,所以,只需要设置用户的私有变量即可。首先要切换到mongod用户,然后再设置:
[mongod@cs mongodb]# su - mongod
Password:
Last login: Wed Jan 13 11:57:48 CST 2021 on pts/1
[mongod@cs ~]$ vim .bash_profile
export PATH=/opt/software/mongodb:$PATH
[mongod@cs ~]$ source .bash_profile
注意,此时我们是mongod
用户来操作的。
- 手动启动MongoDB服务。
[mongod@cs ~]$ mongod --dbpath=/data/mongodb_data/27017/data --logpath=/data/mongodb_data/27017/log/mongodb.log --logappend --port=27017 --fork
about to fork child process, waiting until server is ready for connections.
forked process: 8287
child process started successfully, parent exiting
其中:
--dbpath
是数据存储目录。--logpath
是日志存储目录。--logappend
以追加的形式记录日志。--port
,端口号。--fork
后台运行。
创建配置文件
vim /data/mongodb_data/conf/mongodb.conf
:
# 系统日志相关
systemLog:
destination: file # 使用文件存储日志
path: "/data/mongodb_data/27017/log/mongodb.log" # 日志位置
logAppend: true # 是否以追加的形式记录日志
# 数据相关
storage:
journal: # 回滚日志
enabled: true
dbPath: "/data/mongodb_data/27017/data/" # 数据存储目录
# 进程相关
processManagement:
fork: true # 后台运行
# 网络配置相关
net:
port: 27017 # 默认端口
bindIp: 127.0.0.1,10.0.0.200 # 绑定ip, 多个ip以逗号分隔
开启/关闭MongoDB
[mongod@cs ~]$ mongod -f /data/mongodb_data/27017/conf/mongodb.conf --shutdown
[mongod@cs ~]$ mongod -f /data/mongodb_data/27017/conf/mongodb.conf
使用systemd管理MongoDB的配置
使用root用户创建vim /etc/systemd/system/mongod.service
。
[mongod@cs mongodb]$ su root
Password:
[root@cs mongodb]# vim /etc/systemd/system/mongod.service
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
User=mongod
Type=forking
ExecStart=/opt/software/mongodb/mongod --config /data/mongodb_data/27017/conf/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/opt/software/mongodb/mongod --config /data/mongodb_data/27017/conf/mongodb.conf --shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
现在,就可以使用systemctl
来管理MongoDB了:
systemctl start/restart/stop/status mongod
现在,就有两套命令可以管理MongoDB的启停了,以root用户使用:
systemctl start/restart/stop/status mongod
使用普通用户mongod
启停MongoDB:
[mongod@cs ~]$ mongod -f /data/mongodb_data/27017/conf/mongodb.conf --shutdown
[mongod@cs ~]$ mongod -f /data/mongodb_data/27017/conf/mongodb.conf
当然,你也可以mongod
得身份使用systemctl
来管理MongoDB,只需要根据提示输入密码就可以了:
[mongod@cs ~]$ systemctl restart mongod
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root # 需要root身份才能使用 systemctl
Password: # 输入root用的密码就可以了
==== AUTHENTICATION COMPLETE ===
[mongod@cs ~]$
测试,是否安装成功
无论是哪个用户启动了MongoDB服务,我们都以普通用户操作MongoDB,在任意路径下:
[mongod@cs mongodb]$ mongo
MongoDB shell version v3.6.12
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("4b23a3f9-8942-43c7-ac45-ed94dbf2bae6") }
MongoDB server version: 3.6.12
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2021-01-13T15:20:31.612+0800 I CONTROL [initandlisten]
2021-01-13T15:20:31.612+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2021-01-13T15:20:31.612+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2021-01-13T15:20:31.612+0800 I CONTROL [initandlisten]
> show databases;
admin 0.000GB
config 0.000GB
local 0.000GB
> use admin
switched to db admin
> show tables;
system.version
如果是复制集环境或者集群环境,可以通过端口号来指定启动不同的MongoDB实例:
[mongod@cs mongodb]$ mongo --port 27017
that's all,see also:
MongoDB中文网 | Windows下MongoDB的下载安装、环境配置教程图解 | windows安装mongodb | Linux 中的“大内存页”(hugepage)是个什么?