愚墨的博客
  • 首页
  • 前端技术
  • 面试
只争朝夕不负韶华
  1. 首页
  2. Nodejs
  3. 正文

在阿里云上部署mongodb数据库

2016年11月04日 3230点热度 0人点赞 0条评论

如果知乎上面有一篇文章是问《在一家前端职位只有你一人的公司是种怎样的体验?》的话,我觉得我是很有发言权的。每天伴随我的只有两种心态:欣喜和无奈。欣喜是我与一群优秀的伙伴共伍,工作氛围很nice。无奈的是每当遇到问题困惑的时候,没有人来帮我指点迷津!虽然说问题基本上最后我都能通过各种途径来解决,但是代价就是消耗很长的时间。比如说这次。。。。。

很久之前就在阿里云的服务器上安装了mongodb,但是一直没有时间研究,闲几天用空闲的时间做了一个Node+mongodb+React+……的小项目,想把它部署到服务器上,因为一直在本地开发环境开发,本地的mongodb总是在需要的时候启动,但是如果放到生产环境的话,数据库是需要一直启动的。so,我就想把服务器上的mongodb一直启动着。但是……问题来了。

至于说怎么在阿里云上安装mongodb,我就简单的说一下,两种方式:

  1. 使用yum进行安装
  2. 直接使用压缩包解压安装
    选择一下你的目录  一般情况下是/usr/local/ 下,下载安装包,可以去mongodb官网查找最新版

    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.10.tgz

    解压

    tar zxf mongodb-linux-x86_64-3.2.10.tgz

    为了美观,改一下名字

    mv mongodb-linux-x86_64-3.2.10 mongodb

    创建数据库文件和日志文件

    mkdir /usr/local/mongodb/data
    touch /usr/local/mongodb/logs

    设置为开机自启动,(修改re.local文件需要增加权限,使用root用户,我就是死在了这个上面,此命令执行不同也没什么大碍)

    echo "/usr/local/mongodb/bin/mongod --dbpath=/usr/local/server/mongodb/data –logpath=/usr/local/mongodb/logs –logappend  --auth –port=27017" >> /etc/rc.local

    启动mongodb
    cd到mongodb目录下的bin文件加下启动mongodb   cd /usr/local/mongodb

    //下面这个是需要权限的登录方式, 用户连接需要用户名和密码
    /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend  --auth  --port=27017 --fork
    
    //这个是不需要密码的
    /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend  --port=27017 --fork

    参数解释:

    --dbpath 数据库路径(数据文件)
    --logpath 日志文件路径
    --master 指定为主机器
    --slave 指定为从机器
    --source 指定主机器的IP地址
    --pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
    --logappend 日志文件末尾添加
    --port 启用端口号
    --fork 在后台运行
    --only 指定只复制哪一个数据库
    --slavedelay 指从复制检测的时间间隔

    --auth 是否需要验证权限登录(用户名和密码)

我一开始纠结于一个问题,mongodb在开发环境和生产环境有什么不同?

其实区别很简简单:

开发环境只是满足于开发就行,数据库在需要的时候开启即可,不需要的时候可以关闭。

生产环境的数据库是一直开启的状态。

正常的开发环境的话一般使用

./bin/mongod --port 27017 --dbpath data/ --logpath log/mongodb.log

以上方式是在前台启动Mongodb进程,如果Session窗口关闭,Mongodb进程也随之停止,我们的客户端要连接需要另外开启一个终端

不过Mongodb同时还提供了一种后台Daemon方式启动,只需要加上一个"--fork"参数即可,值得注意的是,用到了"--fork"参数就必须启用"--logpath"参数

./bin/mongod --port 27017 --dbpath data/ --fork --logpath=log/mongodb.log

查看一下进程

ps -ef|grep mongodb

会显示进程信息。

 

关闭mongodb数据库

./mongod --dbpath /usr/local/mongodb/data --shutdown

 

将服务加到开机自启动中以避免重启服务器之后需要手动启动服务

将MongoDB服务加入随机启动

vi /etc/rc.local

使用vi编辑器打开配置文件,并在其中加入下面一行代码

/usr/local/mongodb/bin/mongod -dbpath=/usr/local/mongodb/data/ --fork --port 27017 --logpath=/usr/local/mongodb/log/mongodb.log --logappend --auth

 


7.3 补充

由于现在安装mongodb的版本是3.0+,MongoDB 3.0 安全权限访问控制,在添加用户上面3.0版本和之前的版本有很大的区别,这里就说明下3.0的添加用户的方法。

创建用户不在使用db.addUser,而是使用db.createUser 来进行添加。

现在需要创建一个帐号,该账号需要有grant权限,即:账号管理的授权权限。注意一点,帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth)。

> use admin
switched to db admin
> db.createUser(
...   {
...     user: "dba",
...     pwd: "dba",
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
...   }
... )
Successfully added user: {
    "user" : "dba",
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]

执行的命令:

user:用户名

pwd:密码

roles:指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。role里的角色可以选:

  Built-In Roles(内置角色):
    1. 数据库用户角色:read、readWrite;
    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    4. 备份恢复角色:backup、restore;
    5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    6. 超级用户角色:root  
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
    7. 内部角色:__system

具体:

Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

刚建立了 userAdminAnyDatabase 角色,用来管理用户,可以通过这个角色来创建、删除用户。验证:需要开启auth参数。(上文中提到了)

demo

> db.createUser(
...     {
...       user: "testdb",
...       pwd: "test123",
...       roles: [
...          { role: "readWrite", db: "test" }   #读写帐号
...       ]
...     }
... )

> db.createUser(
...     {
...       user: "zjy",
...       pwd: "zjy",
...       roles: [
...          { role: "readWrite", db: "test" }   #读写帐号
...       ]
...     }
... )

 


 

附上一些MongoDB 使用的的错误解决办法  http://www.gimoo.net/t/1712/5a291121db42e.html

 

 

 

标签: 暂无
最后更新:2017年12月08日

愚墨

保持饥渴的专注,追求最佳的品质

点赞
< 上一篇
下一篇 >

文章评论

取消回复

搜搜看看
历史遗迹
  • 2023年5月
  • 2022年9月
  • 2022年3月
  • 2022年2月
  • 2021年12月
  • 2021年8月
  • 2021年7月
  • 2021年5月
  • 2021年4月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年9月
  • 2020年7月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年1月
  • 2019年5月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年9月
  • 2018年3月
  • 2018年2月
  • 2018年1月
  • 2017年11月
  • 2017年7月
  • 2017年6月
  • 2017年3月
  • 2017年2月
  • 2017年1月
  • 2016年12月
  • 2016年11月
  • 2016年9月
  • 2016年8月
  • 2016年7月
  • 2016年6月
  • 2016年5月
  • 2016年4月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年10月
  • 2015年9月
  • 2015年7月
  • 2015年6月
  • 2015年4月

COPYRIGHT © 2020 愚墨的博客. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS