mongoDB因root启动关闭数据库导致mongo普通用户无法启动

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:   最近,使用mongoDB数据库时,偶然使用了root启停数据库,导致后来mongo用户无法启动数据库,报权限拒绝,但是root可以正常启停mongoDB数据库。

  最近,使用mongoDB数据库时,偶然使用了root启停数据库,导致后来mongo用户无法启动数据库,报权限拒绝,但是root可以正常启停mongoDB数据库。

  使用ROOT启动数据库

[root@mongo data]# mongod --dbpath=$MONGO_DATA --logpath=$MONGO_LOGS/mongodb.log --logappend&

[1] 3526

  查看mongoDB进程状态

[root@mongo data]# ps -ef|grep mongo

root      3526 46565 17 18:32 pts/2    00:00:01 mongod --dbpath=/opt/mongo/data --logpath=/opt/mongo/logs/mongodb.log --logappend

root      3546 46565  0 18:32 pts/2    00:00:00 grep mongo

root     46639 46622  0 Jun26 pts/5    00:00:00 su - mongo

mongo    46640 46639  0 Jun26 pts/5    00:00:00 –bash
 操作mongoDB数据库

[root@mongo data]# mongo

MongoDB shell version: 3.2.7

connecting to: test

Server has startup warnings:

2016-06-27T18:32:12.881-0700 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

2016-06-27T18:32:12.881-0700 I CONTROL  [initandlisten]

> use zhul

switched to db zhul

> db.zhul.insert({"username":"test","id":123456});

WriteResult({ "nInserted" : 1 })

> db.zhul.findOne({"username":"test"});

{

         "_id" : ObjectId("5771d3d3a3eb04b5a2150f87"),

         "username" : "test",

         "id" : 123456

}

> exit

bye

[root@mongo data]#
 ROOT用户关闭mongoDB数据库

[root@mongo data]# mongo

MongoDB shell version: 3.2.7

connecting to: test

Server has startup warnings:

2016-06-27T18:32:12.881-0700 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

2016-06-27T18:32:12.881-0700 I CONTROL  [initandlisten]

> use admin

switched to db admin

> db.shutdownServer();

server should be down...

2016-06-27T18:40:31.458-0700 I NETWORK  [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed

2016-06-27T18:40:31.459-0700 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused

2016-06-27T18:40:31.459-0700 I NETWORK  [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) failed failed

  切换至mongo用户启动数据库,发现启动后,进程立即退出

[mongo@mongo logs]$ mongod --dbpath=$MONGO_DATA --logpath=/opt/mongo/logs/mongodb.log  --logappend&

[1] 3725

[mongo@mongo logs]$

[1]+  Exit 100                mongod --dbpath=$MONGO_DATA --logpath=/opt/mongo/logs/mongodb.log --logappend

[mongo@mongo logs]$

  查看mogodb.log,提示权限拒绝

2016-06-27T18:41:32.979-0700 I CONTROL  [initandlisten]     distarch: x86_64

2016-06-27T18:41:32.979-0700 I CONTROL  [initandlisten]     target_arch: x86_64

2016-06-27T18:41:32.979-0700 I CONTROL  [initandlisten] options: { storage: { dbPath: "/opt/mongo/data" }, systemLog: { destination: "file", logAppend: true, path: "/opt/mongo/logs/mongodb.log" } }

2016-06-27T18:41:32.999-0700 I -        [initandlisten] Detected data files in /opt/mongo/data created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.

2016-06-27T18:41:32.999-0700 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),

2016-06-27T18:41:33.024-0700 E STORAGE  [initandlisten] WiredTiger (13) [1467078093:24444][3725:0x7fe458275c80], txn-recover: /opt/mongo/data/journal/WiredTigerLog.0000000021: handle-open: open: Permission denied

2016-06-27T18:41:33.024-0700 E STORAGE  [initandlisten] WiredTiger (13) [1467078093:24486][3725:0x7fe458275c80], txn-recover: Recovery failed: Permission denied

2016-06-27T18:41:33.033-0700 I -        [initandlisten] Assertion: 28595:13: Permission denied

2016-06-27T18:41:33.033-0700 I STORAGE  [initandlisten] exception in initAndListen: 28595 13: Permission denied, terminating

2016-06-27T18:41:33.033-0700 I CONTROL  [initandlisten] dbexit:  rc: 100

  网上有人说,启动数据库,需要恢复时会在tmp目录下生成一个mongodb-27017.sock文件,删除重新启动即可,但是事实证明不是这个文件导致的。

  Tmp目录下确实生成了.sock文件

[root@mongo tmp]# ls -l mongodb-27017.sock

srwx------. 1 mongo mongo 0 Jun 27 18:41 mongodb-27017.sock

[root@mongo tmp]#

  ROOT删除之

[root@mongo tmp]# rm -rf mongodb-27017.sock

[root@mongo tmp]#

  再次使用mongo用户启动mongoDB,发现问题依旧

[mongo@mongo logs]$ mongod --dbpath=$MONGO_DATA --logpath=/opt/mongo/logs/mongodb.log  --logappend&

[1] 3835

[mongo@mongo logs]$

[1]+  Exit 100                mongod --dbpath=$MONGO_DATA --logpath=/opt/mongo/logs/mongodb.log --logappend

[mongo@mongo logs]$

  根据日志报错提示WiredTiger权限拒绝,是不是有关wiredtiger文件权限问题,查看/opt/mongo/data、/opt/mongo/data/ journal文件下文件,发现确实有文件权限被改成了root:

[root@mongo data]# ls -l Wired*

-rw-rw-r--. 1 mongo mongo    46 Jun 11 01:31 WiredTiger

-rw-r--r--. 1 root  root   4096 Jun 27 18:40 WiredTigerLAS.wt

-rw-rw-r--. 1 mongo mongo    21 Jun 11 01:31 WiredTiger.lock

-rw-r--r--. 1 root  root    927 Jun 27 18:40 WiredTiger.turtle

-rw-rw-r--. 1 mongo mongo 94208 Jun 27 18:48 WiredTiger.wt

  修改权限:

[root@mongo data]# chown mongo:mongo WiredTigerLAS.wt

[root@mongo data]# chown mongo:mongo WiredTiger.turtle

[root@mongo data]# chmod 664 WiredTigerLAS.wt

[root@mongo data]# chmod 664 WiredTiger.turtle

[root@mongo data]# ls -l Wired*

-rw-rw-r--. 1 mongo mongo    46 Jun 11 01:31 WiredTiger

-rw-rw-r--. 1 mongo mongo  4096 Jun 27 18:40 WiredTigerLAS.wt

-rw-rw-r--. 1 mongo mongo    21 Jun 11 01:31 WiredTiger.lock

-rw-rw-r--. 1 mongo mongo   927 Jun 27 18:40 WiredTiger.turtle

-rw-rw-r--. 1 mongo mongo 94208 Jun 27 18:54 WiredTiger.wt

[root@mongo journal]# ls -l

total 409624

-rw-r--r--. 1 root  root       6912 Jun 27 18:40 WiredTigerLog.0000000021

-rw-rw-r--. 1 mongo mongo 104857728 Jun 27 18:41 WiredTigerLog.0000000022

-rw-rw-r--. 1 mongo mongo 104857728 Jun 27 18:48 WiredTigerLog.0000000023

-rw-rw-r--. 1 mongo mongo 104857728 Jun 27 18:54 WiredTigerLog.0000000024

-rw-rw-r--. 1 mongo mongo 104857728 Jun 27 18:55 WiredTigerLog.0000000025

[root@mongo journal]# chown mongo:mongo WiredTigerLog.0000000021

[root@mongo journal]# chmod 664 WiredTigerLog.0000000021

[root@mongo journal]# ls -l

total 409624

-rw-rw-r--. 1 mongo mongo      6912 Jun 27 18:40 WiredTigerLog.0000000021

-rw-rw-r--. 1 mongo mongo 104857728 Jun 27 18:41 WiredTigerLog.0000000022

-rw-rw-r--. 1 mongo mongo 104857728 Jun 27 18:48 WiredTigerLog.0000000023

-rw-rw-r--. 1 mongo mongo 104857728 Jun 27 18:54 WiredTigerLog.0000000024

-rw-rw-r--. 1 mongo mongo 104857728 Jun 27 18:55 WiredTigerLog.0000000025

[root@mongo journal]#

  再次使用mongo用户启动数据库,成功!

[mongo@mongo logs]$ mongod --dbpath=$MONGO_DATA --logpath=/opt/mongo/logs/mongodb.log  --logappend&

[1] 4073

[mongo@mongo logs]$

[mongo@mongo logs]$

[mongo@mongo logs]$

[mongo@mongo logs]$

[mongo@mongo logs]$

[mongo@mongo logs]$ tail -20 mongodb.log

2016-06-27T18:59:51.233-0700 I CONTROL  [main] ***** SERVER RESTARTED *****

2016-06-27T18:59:51.241-0700 I CONTROL  [initandlisten] MongoDB starting : pid=4073 port=27017 dbpath=/opt/mongo/data 64-bit host=mongo

2016-06-27T18:59:51.241-0700 I CONTROL  [initandlisten] db version v3.2.7

2016-06-27T18:59:51.241-0700 I CONTROL  [initandlisten] git version: 4249c1d2b5999ebbf1fdf3bc0e0e3b3ff5c0aaf2

2016-06-27T18:59:51.241-0700 I CONTROL  [initandlisten] allocator: tcmalloc

2016-06-27T18:59:51.241-0700 I CONTROL  [initandlisten] modules: none

2016-06-27T18:59:51.241-0700 I CONTROL  [initandlisten] build environment:

2016-06-27T18:59:51.241-0700 I CONTROL  [initandlisten]     distarch: x86_64

2016-06-27T18:59:51.241-0700 I CONTROL  [initandlisten]     target_arch: x86_64

2016-06-27T18:59:51.241-0700 I CONTROL  [initandlisten] options: { storage: { dbPath: "/opt/mongo/data" }, systemLog: { destination: "file", logAppend: true, path: "/opt/mongo/logs/mongodb.log" } }

2016-06-27T18:59:51.260-0700 I -        [initandlisten] Detected data files in /opt/mongo/data created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.

2016-06-27T18:59:51.261-0700 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),

2016-06-27T18:59:53.198-0700 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/opt/mongo/data/diagnostic.data'

2016-06-27T18:59:53.199-0700 I NETWORK  [initandlisten] waiting for connections on port 27017

2016-06-27T18:59:53.199-0700 I NETWORK  [HostnameCanonicalizationWorker] Starting hostname canonicalization worker

[mongo@mongo logs]$ ps -ef|grep mongo

mongo     4073 46640  6 18:59 pts/5    00:00:02 mongod --dbpath=/opt/mongo/data --logpath=/opt/mongo/logs/mongodb.log --logappend

mongo     4105 46640  0 19:00 pts/5    00:00:00 ps -ef

mongo     4106 46640  0 19:00 pts/5    00:00:00 grep mongo

root     46639 46622  0 Jun26 pts/5    00:00:00 su - mongo

mongo    46640 46639  0 Jun26 pts/5    00:00:00 -bash

[mongo@mongo logs]$ mongo

MongoDB shell version: 3.2.7

connecting to: test


 问题成功解决!

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
2月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
3月前
|
存储 NoSQL 关系型数据库
非关系型数据库-MongoDB技术(二)
非关系型数据库-MongoDB技术(二)
|
3月前
|
NoSQL 关系型数据库 MongoDB
非关系型数据库-MongoDB技术(一)
非关系型数据库-MongoDB技术(一)
|
6天前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
32 15
|
14天前
|
存储 NoSQL 关系型数据库
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
我们的风控系统引入阿里云数据库MongoDB版后,解决了特征类字段灵活加减的问题,大大提高了开发效率,极大的提升了业务用户体验,获得了非常好的效果
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
|
1月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
2月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
|
2月前
|
存储 NoSQL MongoDB
MongoDB 数据库引用
10月更文挑战第20天
24 1
|
2月前
|
存储 NoSQL Shell
MongoDB 创建数据库
10月更文挑战第12天
90 4
|
2月前
|
存储 NoSQL MongoDB
基于阿里云数据库MongoDB版,微财数科“又快又稳”服务超7000万客户
选择MongoDB主要基于其灵活的数据模型、高性能、高可用性、可扩展性、安全性和强大的分析能力。