背景
前同事之前做的一个数据分析Web应用使用的是MongoDB,但是这个DB今天突然间连接不上了,导致我们每天自动发送的运营日报邮件没有按时发出。这个日报运营团队每天都会查阅用于分析社区用户数据。如果漏掉一天的话,那明天再看数据时就没有办法计算环比数据了。所以我尝试并完成了对数据库服务的重启操作。
解决方案
- 找到配置文件
MongoDB数据库连接不上,我第一反应是:数据库服务挂了。果然ps aux | grep mongo
,并没有找到mongo的进程,那数据库无疑是挂了。
MongoDB我之前也没有部署和启动过,所以第一反应就是查阅一下如何重启以及如何启动,查到了下面两种方式:
1. systemctl restart mongod
2. mongod -f /etc/mongod.conf
看了一下mongod的help文档,了解到-f是指定MongoDB相应的配置文件。同时上面这个文件也是CentOS中MongoDB的默认配置文件。打开这个配置文件发现这里面是MongoDB启动所需要的全部配置信息。
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
从上面的内容可以看到几个数据库的主要信息:
- 日志文件的存储路径
- 数据库文件的存储路径
- 进程运行方式
接下来我去数据库文件路径看了一下,发现db文件都在(还好,长出了一口气…)。
- 使用systemctl重启
既然数据库文件都在,那应该尝试着重启服务就可以继续使用了。接下来使用 systemctl restart mongo来进行重启,发现以下错误:
2022-01-18T15:40:54.289+0800 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2022-01-18T15:40:54.491+0800 I CONTROL [main] ERROR: Cannot write pid file to /var/run/mongodb/mongod.pid: Unknown error
2022-01-18T15:56:32.965+0800 I CONTROL