按照菜鸟教程来的: http://www.runoob.com/mongodb/mongodb-linux-install.html
还是说问题
将路径加入path这步这样加了后面启动不了
解决办法 mv mongodb-linux-x86_64-3.6.3/* /usr/local/mongodb 或者将<mongodb-install-directory>指定到正确的目录/usr/local/mongodb /mongodb-linux-x86_64-3.6.3。
其实依然是那几个步骤:创数据库目录 创日志目录和文件 创conf文件
我的配置文件:
#启用日志文件,默认启用
journal=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=false
# 日志文件位置
logpath=/usr/local/server/mongodb/logs/log
# 以追加方式写入日志
logappend=true
# 是否以守护进程方式运行
fork = true
# 默认27017
port = 27017
# 数据库文件位置
dbpath=/usr/local/server/mongodb/data
详尽的配置:https://blog.csdn.net/wlzx120/article/details/52301812
以这种方式启动 ./mongod --config /usr/local/mongodb/mongodb.conf可能会包
mongodb启动时报错ERROR: child process failed, exited with error number 1
原因由于conf中日志文件配置必须指定到文件 而不是目录。
ps -ef|grep mongodb 就能看到mong的进程信息,或者直接登陆验证下就好了
使用系统服务命令启动需要先将服务加入到系统服务中,附录:将mongod添加到系统服务
service mongod start|stop|restart
这一步没什么毛病 备份下
一、将mongod服务添加为系统服务
MongoDB安装之后,每次都需要运行命令加参数来启动,不便于管理,这里可以将其添加到系统服务,方法如下:
1、创建文件
linux系统服务启动文件都存放在 /etc/init.d/ 下面,service mongod start 这样的命令是通过运行该目录下的脚本实现管理的,所以需要创建一个脚本文件mongod并修改读写权限
>touch mongod
>chmod 755 mongod
另外还需要用到一个文件来保存服务pid,service mongod stop 命令就是通过这个文件读取服务pid的,可以建立在MongoDB的安装目录下面,
>cd /usr/local/server/mongodb/
>touch mongod.pid
>chmod 755 mongod.pid
2、编写mongod脚本,以下为编写好的脚本示例:
##--------------------------------------------------------
#!/bin/bash
#chkconfig:35 23 34
#description: MongoDB service
#set -x
if [ -f /etc/init.d/functions ] ; then
##载入functions,. 在这里相当于source的功能
. /etc/init.d/functions
fi
##服务名,会多处调用
prog=mongod
##状态返回值,functions 函数会调用这个值
RETVAL=0
mongod=/usr/local/server/mongodb/bin/mongod
MONGODB_CONF_FILE=/usr/local/server/mongodb/mongodb.conf
lockfile=/var/lock/subsys/${prog} ##subsys目录下的文件是用于给其他程序判断服务的实例运行状态的
pidfile=/usr/local/server/mongodb/mongod.pid
start() {
echo -n $"Starting $prog: "
daemon $mongod --config $MONGODB_CONF_FILE ##daemon调用后面的命令执行情况
pgrep mongod>${pidfile} ##写入pid到pidfile
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch ${lockfile}
return $RETVAL
}
stop () {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} ##killproc 从pidfile 获取到pid,并杀死
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && /bin/rm -f ${lockfile}
return $RETVAL
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 2
;;
esac
exit $?
##-------------------------------------------------------------------
3、通过这个脚本就可以实现系统服务启动、关闭、重启mongod服务了,然后我们可以让他开机启动:
>chkconfig mongod on
--------------
二、用户授权和管理
1、mongodb安装好后第一次进入是不需要密码的,也没有任何用户,通过shell命令可直接进入,cd到mongodb目录下的bin文件夹,执行命令./mongo即可
运行如下:
[root@namenode mongodb]# ./bin/mongo
MongoDB shell version: 1.8.2
connecting to: test
> use test;
switched to db test
2、添加管理用户(mongoDB 没有无敌用户root,只有能管理用户的用户 userAdminAnyDatabase),
>use admin
>db.createUser( {user: "admin",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})
注:添加完用户后可以使用show users或db.system.users.find()查看已有用户
3、添加完管理用户后,关闭MongoDB,可以使用db.shutdownServer()关闭
并使用权限方式再次开启MongoDB,这里注意不要使用kill直接去杀掉mongodb进程,(如果这样做了,请去data/db目录下删除mongo.lock文件),
4、使用权限方式启动MongoDB
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/mongod.log --fork --auth
或者在配置文件中修改:
auth = true
#noauth = true
5、进入mongo shell,使用admin数据库并进行验证,如果不验证,是做不了任何操作的。
> use admin
> db.auth("admin","123456") #认证,返回1表示成功
6、验证之后还是做不了操作,因为admin只有用户管理权限,下面创建用户,用户都跟着库走,
> use mydb
> db.createUser({user: "root",pwd: "123456",roles: [{ role: "readWrite", db: "mydb" }]})
//db.createUser({user:"Liwb",pwd:"Liwb94",roles:[{role:"readWrite",db:"epg" },{role:"dbAdmin",db:"epg" }]});
7、使用创建的用户root登录进行数据库操作:
[root@localhost mongodb]# ./mongo 127.0.0.1/mydb -uroot -p
MongoDB shell version: 3.2.9
Enter password:
connecting to: 127.0.0.1/mydb
> db
mydb
> use mydb
switched to db mydb
> show collections
然后就可以进行增删改查各种数据操作...
默认不能被其他电脑连接 需要在Windows上测试的话 在conf文件里配置
#绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
bind_ip指访问ip,设置0.0.0.0就没有限制,都可以连接
同时
auth = true就必须要配了
并且要设置防火墙
iptables -A INPUT -p tcp -m tcp --dport 27017 -j ACCEPT
这样往往不成功 因为没添加成功
解决办法直接编辑/etc/sysconfig/iptables-config文件
1.编辑/etc/sysconfig/iptables文件:vi /etc/sysconfig/iptables-config
加入内容并保存:-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
2.重启服务:/etc/init.d/networkrestart
3.查看端口是否开放:/sbin/iptables -L -n
https://blog.csdn.net/wlzx120/article/details/52301799 这是个很详尽的教程
mongo的roles
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数据库中可用。超级账号,超级权限