Centos7安装mongodb
初始安装
初始安装很简单,具体过程参考了:https://blog.csdn.net/junshan...,其中最重要的就是mongodb.conf这个文件的配置,具体如下:
port=27017 #端口 dbpath=/u03/mongodb/db #数据库存文件存放目录 logpath=/u03/mongodb/mongodb.log #日志文件存放路径 logappend=true #使用追加的方式写日志 fork=true #不以守护程序的方式启用,即不在后台运行 maxConns=100 #最大同时连接数 auth=true #不启用验证 journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。 #即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。 storageEngine=mmapv1 #存储引擎有mmapv1、wiretiger、mongorocks bind_ip = 0.0.0.0 #这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB
启动
安装完成后,启动mongodbmongod --config /u03/mongodb/mongodb.conf
启动报错
exception in initAndListen: NonExistentPath: Data directory /data/db not found
结果启动报错,找不到/data/db这个路径,/data/db这个路径用于存储数据库相关数据,在安装mongodb时,mongodb.conf内配置的dbpath=/u03/mongodb/db。因此通过mongod --dbpath /u03/mongodb/db
来启动。
查看mongodb端口状态
启动成功后,查看mongodb是否处于listening的状态。netstat -lanp | grep "27017"
创建数据库
接下来开始创建 数据库(在服务器上操作)
进入命令行mongo
创建数据库use test
创建用户并授权
db.createUser({ user:"test", pwd:"test", roles:[{role:"userAdmin",db:"test"}] })
windows连接报错
数据库创建成功后,开始在本地环境远程连接mongodb。结果,又报错了!Cannot connect to the MongoDB at 192.168.58.131:27017. Error: Network is unreachable.
- 首先排查mongodb.conf,bind_ip是否为0.0.0.0,端口号是否为27017;
- 其次查看服务器防火墙是否关闭,
systemctl status firewalld
,如果防火墙开启,则关闭防火墙systemctl stop firewalld
(关于防火墙的学习来自于 https://www.cnblogs.com/moxia...); - 然后又在本地检查27017端口是否开启,
telnet 192.168.58.131 27017
,第一次提示“telnet不是内部或外部命令”,解决办法: https://blog.csdn.net/haijing...,再次运行,报“无法打开到主机的连接。 在端口 27017: 连接失败”,由此可知,是27017端口的问题。 - 查遍了所有资源都没有解决,最终在https://blog.csdn.net/hongwei...,在启动命令最后加上--bind_ip_all,
mongod --dbpath /u03/mongodb/db --auth --bind_ip_all
,终于成功了!
调试过程中其他错误
在调整无法连接这个问题时,尝试了各种方法,数据库来回启动了无数次,其中也遇到了一些其他报错,在这里列出:
1.exception in initAndListen: DBPathInUse: Unable to lock the lock file: /u03/mongodb/db/mongod.lock (Unknown error). Another mongod instance is already running on the /u03/mongodb/db directory
这个错误的原因是mongodb上次关闭异常,先通过mongo --repair
进行修复,修复后若还有问题,通过rm mongod.lock -rf
删除lock文件,rm diagnostic.data/* -rf
删除数据文件。
2.Failed to set up listener: SocketException: Address already in use
上个问题解决后又报地址已被使用,ps aux | grep mongod
查看进程,kill -9 进程号
杀死进程。
附:正确关闭mongodb数据库的方法:
正确的关闭方法:停止Mongodb
- 查看进程,使用kill命令;不能使用kill -9。
- 在命令行使用shutdown命令。
robo3 远程连接
最后使用robo3连接mongodb,终于成功了!