CentOS 7 安装 MongoDB 3.6

安装步骤

创建文件

vi /etc/yum.repos.d/mongodb-org-3.6.repo
  • 1

文件内容

[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

安装

sudo yum install -y mongodb-org
  • 1

要安装特定版本的MongoDB,请分别指定每个组件包并将版本号附加到包名称,如下例所示:

sudo yum install -y mongodb-org-3.6.3 mongodb-org-server-3.6.3 mongodb-org-shell-3.6.3 mongodb-org-mongos-3.6.3 mongodb-org-tools-3.6.3
  • 1

您可以指定任何可用的MongoDB版本。然而,yum会在新版本可用时升级软件包。为防止意外升级,请钉住包装。要固定软件包,请将以下exclude指令添加到/etc/yum.conf文件中:

exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools
  • 1

国内服务器启动报错 这个问题可以不解决直接启动 mongodb

问题:

2018-03-16T10:59:40.008+0800 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused
2018-03-16T10:59:40.008+0800 E QUERY    [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:251:13
@(connect):1:6
exception: connect failed

运行命令:

mongod -repair
  • 1

会看到:

exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating
  • 1

创建db:

cd /data
mkdir db
  • 1
  • 2

安装完成后记得启动服务,才能用mongo 登录。

常用命令

查看mongo安装位置

whereis mongod
  • 1

查看修改配置文件

vi /etc/mongod.conf
  • 1

启动mongodb

systemctl start mongod.service
or
service mongod start

重新启动mongodb

systemctl restart mongod.service
or
service mongod restart



停止mongodb

systemctl stop mongod.service
or
service mongod stop
  • 1
  • 2
  • 3

查看mongodb的状态

systemctl status mongod.service
  • 1

mongo登录

mongo
  • 1
查看数据库
show dbs
  • 1

配置安全机制和对外访问权限

创建管理员账号

mongo
use admin
db.createUser({user:"root",pwd:"root",roles:[{role: "userAdminAnyDatabase", db: "admin"}]})

Internal Role

__system

集群中对任何数据库采取任何操


用管理员账号登录

mongo -u "root" -p "root" --authenticationDatabase "admin"
  • 1

创建某个数据库的允许访问账号

mongo
use admin
db.getSiblingDB("spring_boot_test").createUser({"user" : "liang","pwd" : "hahaha", roles: [{"role" : "readWrite", "db" : "spring_boot_test"}]})

用这个账号登录

mongo  -u liang -password test2 -authenticationDatabase spring_boot_test
  • 1

验证用户是否创建成功

db.auth('root','root')
  • 1

配置mongoDB登录路径

mongodb://user:password@ip:port/db
  • 1

修改配置文件

vi /etc/mongod.conf
  • 1

找到bindIp:127.0.0.1 改为:

bindIp:127.0.0.1,192.168.22.210
  • 1

找到#security,改为:

security:
  authorization: enabled



保存退出,重启mongo服务

添加完用户可能之间出现这个错误

错误1:

pam_unix(runuser:session): session opened for user mongod by (uid=0)
mongod.service: control process exited, code=exited status=1



解决办法:

chown -R mongod:mongod /var/lib/mongo
chown -R mongod:mongod /var/log/mongodb



错误2:

Error starting mongod. /var/run/mongodb/mongod.pid exists.
  • 1

解决办法:

rm /var/run/mongodb/mongod.pid -f
  • 1

卸载mongodb

停止服务

service mongod stop
  • 1

删除软件

yum erase $(rpm -qa | grep mongodb-org)
  • 1

移除日志

rm -r /var/log/mongodb
rm -r /var/lib/mongo

删除数据

rm -rf /data/db
  • 1

常用命令

> show dbs  #显示数据库列表 
> show collections  #显示当前数据库中的集合(类似关系数据库中的表)
> show users  #显示用户
> use <db name>  #切换当前数据库,如果数据库不存在则创建数据库。 
> db.help()  #显示数据库操作命令,里面有很多的命令 
> db.foo.help()  #显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 
> db.foo.find()  #对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) 
> db.foo.find( { a : 1 } )  #对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1
> db.dropDatabase()  #删除当前使用数据库
> db.cloneDatabase("127.0.0.1")   #将指定机器上的数据库的数据克隆到当前数据库
> db.copyDatabase("mydb", "temp", "127.0.0.1")  #将本机的mydb的数据复制到temp数据库中
> db.repairDatabase()  #修复当前数据库
> db.getName()  #查看当前使用的数据库,也可以直接用db
> db.stats()  #显示当前db状态
> db.version()  #当前db版本
> db.getMongo()  #查看当前db的链接机器地址
> db.serverStatus()  #查看数据库服务器的状态

db.system.users.find()
db.stats()查看数据库的状态
db.posts.stats();查看当前数据库某一张表的状态
db 查看当前处于哪个数据库
show collections 查看当前数据库下有哪些表
db.表名.dataSize() 查看表的大小
db.表名.drop() 删除表
db.dropDatabase() 删除当前的数据库
db.copyDatabase("mydb", "temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中

例如:>db.stats()  得到如下结果:
{ 
 "db" : "test",        //当前数据库 
 "collections" : 3,      //当前数据库多少表 
 "objects" : 4,        //当前数据库所有表多少条数据 
 "avgObjSize" : 51,      //每条数据的平均大小 
 "dataSize" : 204,      //所有数据的总大小 
 "storageSize" : 16384,    //所有数据占的磁盘大小 
 "numExtents" : 3, 
 "indexes" : 1,        //索引数 
 "indexSize" : 8176,     //索引大小 
 "fileSize" : 201326592,   //预分配给数据库的文件大小 
 "nsSizeMB" : 16, 
 "dataFileVersion" : { 
"major" : 4, 
"minor" : 5 
 }, 
 "ok" : 1 
}