如果知乎上面有一篇文章是问《在一家前端职位只有你一人的公司是种怎样的体验?》的话,我觉得我是很有发言权的。每天伴随我的只有两种心态:欣喜和无奈。欣喜是我与一群优秀的伙伴共伍,工作氛围很nice。无奈的是每当遇到问题困惑的时候,没有人来帮我指点迷津!虽然说问题基本上最后我都能通过各种途径来解决,但是代价就是消耗很长的时间。比如说这次。。。。。
很久之前就在阿里云的服务器上安装了mongodb,但是一直没有时间研究,闲几天用空闲的时间做了一个Node+mongodb+React+……的小项目,想把它部署到服务器上,因为一直在本地开发环境开发,本地的mongodb总是在需要的时候启动,但是如果放到生产环境的话,数据库是需要一直启动的。so,我就想把服务器上的mongodb一直启动着。但是……问题来了。
至于说怎么在阿里云上安装mongodb,我就简单的说一下,两种方式:
- 使用yum进行安装
- 直接使用压缩包解压安装
选择一下你的目录 一般情况下是/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
文章评论