首先,看一下mongodb错误日志
2020-10-20T19:25:35.349+0800 E STORAGE [conn1310] WiredTiger error (1) [1603193135:349907][3052:0x7f413cc4d700], file:index-1-2989994858051104788.wt, WT_SESSION.open_cursor: __posix_open_file, 715: /mnt/data/mongo/index-1-2989994858051104788.wt: handle-open: open: Operation not permitted Raw: [1603193135:349907][3052:0x7f413cc4d700], file:index-1-2989994858051104788.wt, WT_SESSION.open_cursor: __posix_open_file, 715: /mnt/data/mongo/index-1-2989994858051104788.wt: handle-open: open: Operation not permitted 2020-10-20T19:25:35.349+0800 E STORAGE [conn1310] Failed to open a WiredTiger cursor: table:index-1-2989994858051104788 2020-10-20T19:25:35.349+0800 E STORAGE [conn1310] This may be due to data corruption. Please read the documentation for starting MongoDB with --repair here: http://dochub.mongodb.org/core/repair 2020-10-20T19:25:35.349+0800 F - [conn1310] Fatal Assertion 50882 at src/mongo/db/storage/wiredtiger/wiredtiger_session_cache.cpp 143
测试环境没有问题,开发环境没有问题,但生产就是会报以上错误,并且导致数据库服务也停止了,刚开始以为是因为存储数据量过大引起的,但后来进行了python接口访问速率限制,仍然不行。
查看日志后发现主要是WiredTiger权限不足导致的,于是用chmod -R 777 WiredTiger提升WiredTiger权限,提升权限后仍然报错。
继续看mongodb文件夹中的数据库文件 index-1-2989994858051104788,发现该文件的用户组和用户均为root,于是想起来可能原因是因为数据库中的某些表索引是通过root用户连接mongodb手动创建的
-rwxrwxrwx 1 root root 529M Oct 20 18:45 index-0-2989994858051104788.wt -rwxrwxrwx 1 mongod mongod 543M Oct 21 13:48 index-0--6116263748539842893.wt -rwxrwxrwx 1 mongod mongod 4.0G Oct 21 13:48 index-0-6559876251215556882.wt -rwxrwxrwx 1 mongod mongod 16K Dec 7 2019 index-0-9055286318983588419.wt
解决办法来了,修改索引文件的所有者
sudo chown mongod:mongod index-0-2989994858051104788.wt
网上很多人说的,通过删除mongod.lock,WiredTiger,journal及pid文件的方法也试过,都未解决,最后发现错误往往都是自己的一些不规范的操作造成的。