公式リポジトリからMongoDB4.0.4をインストールしました。私は これらの指示 に従いました。私のOSはCentOS7で、SELinuxは強制モードです。別のディレクトリへのシンボリックリンクであるdbPath
値を使用すると、ログに次のエラーが表示されます。
exception in initAndListen: Location28596: Unable to determine status of lock file in the data directory /var/lib/mongo_test: boost::filesystem::status: Permission denied: "/var/lib/mongo_test/mongod.lock", terminating
dbPath
をシンボリックリンクされていない他のディレクトリに変更すると、正常に機能します。
これは私の現在のテスト設定であり、エラーが発生します。
# ln -s /var/lib/mongo /var/lib/mongo_test
# chcon -u system_u -t mongod_var_lib_t -h /var/lib/mongo_test
# cat /etc/mongod.conf | grep -v '^$\|^\s*\#'
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
storage:
dbPath: /var/lib/mongo_test
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /var/run/mongodb/mongod.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27017
bindIp: 127.0.0.1
# ls -alZ /var/lib/ | grep mongo
drwxr-xr-x. mongod mongod system_u:object_r:mongod_var_lib_t:s0 mongo
lrwxrwxrwx. root root system_u:object_r:mongod_var_lib_t:s0 mongo_test -> /var/lib/mongo
# namei -l /var/lib/mongo_test/mongod.lock
f: /var/lib/mongo_test/mongod.lock
dr-xr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root lib
lrwxrwxrwx root root mongo_test -> /var/lib/mongo
dr-xr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root lib
drwxr-xr-x mongod mongod mongo
-rw------- mongod mongod mongod.lock
あなたはほぼ間違いなくここでSELinuxに遭遇しています。データディレクトリ/var/lib/mongo
、より具体的にはSELinuxタイプmongod_var_lib_t
のファイルとディレクトリへのアクセスを期待して許可しますが、おそらくこのタイプがないため、シンボリックリンクについては何も知りません。
シンボリックリンクのSELinuxタイプを変更すると、MongoDBがデータベースに再度アクセスできるようになる場合があります。
chcon -h -t mongod_var_lib_t /var/lib/mongo_test
おそらくこの時点では完了していないことに注意してください。このようなシンボリックリンクをいじっている場合は、おそらくすべてのデータを他のディスクに置くようなことをするつもりです。その場合、 コンテキストを永続化する必要もあります(ここを参照) 。