mongodb 简介 及安装自启动
一、MongoDB 简介
mongodb介绍
1.MongoDB是一个开源文档数据库,提供高性能,高可用性和自动扩展。
2.MongoDB中的记录是一个文档,它是由字段(key=>vlaue)组成的数据结构。MongoDB文档与JSON对象相似。字段的值可能包括其他文档,数组和文档数组。
主要特点
1.高性能
MongoDB提供了高性能的数据持久性。尤其是,
- 对嵌入式数据模型的支持减少了数据库系统上的I / O活动。
- 索引支持更快的查询,并且可以包含来自嵌入文档和数组的键。
2.存储性
比较适合存储大量的没有规则无序的数据。
存储量单表达到了1PB 级别的数据
3.结构
二、安装合和配置
1.安装方式
两种方式
yum方式安装:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
手动通用安装:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-linux/
参考官方网站
选择通用二进制包安装比较方便
[[email protected] soft]# ls
mongodb-linux-x86_64-rhel62-3.6.5.tgz
[[email protected] soft]# tar zxf mongodb-linux-x86_64-rhel62-3.6.5.tgz -C /usr/local /mongodb
解压到指定的路径即可 不用编译
[[email protected] soft]# cd /usr/local/mongodb/
[[email protected] mongodb]# ls
bin data GNU-AGPL-3.0 log.txt MPL-2 README THIRD-PARTY-NOTICES
看到这些文件 说明就安装完了 简单吧
2.启动
[[email protected] bin]# ls
bsondump mongo mongodump mongofiles mongoperf mongorestore mongostat
install_compass mongod mongoexport mongoimport mongoreplay mongos
mongo 客户端脚本
mongod 启动脚本
[[email protected] bin]# cd /usr/local/mongodb/bin/
[[email protected] bin]#./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/log.txt --fork
--dbpath 数据文件的路径 默认没有自行创建
--logpath 日志文件的路径 指定好路径系统自动生成
--fork 后台模式 开启后台模是 必须指定log路径
注意:不用后台模式的话会一直在前台 无法进行操作 退出的话 程序也会停止
这样启动 很麻烦 可以编写一个启动脚本
[[email protected] init.d]# vim mongod
#!/bin/bash
#
# chkconfig: - 85 15
# description: Mongodb database.
# processname: mongod
# Source function library
#启用系统函数
. /etc/rc.d/init.d/functions
#启动加的选项
OPTIONS=" --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/log.txt --fork"
mongod="/usr/local/mongodb/bin/mongod"
lockfile=/var/lock/subsys/mongod
start()
{
echo -n $"Starting mongod: "
daemon $mongod $OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $lockfile
}
stop()
{
echo -n $"Stopping mongod: "
killproc $mongod -QUIT
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $lockfile
}
restart () {
stop
start
}
ulimit -n 12000
RETVAL=0
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload|force-reload)
restart
;;
condrestart)
[ -f $lockfile ] && restart || :
;;
status)
status $mongod
RETVAL=$?
;;
*)
echo "Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
RETVAL=1
esac
exit $RETVAL
给权限
[[email protected] init.d]# chmod +x mongod
[[email protected] init.d]# service mongod start
Starting mongod: about to fork child process, waiting until server is ready for connections.
forked process: 2035
child process started successfully, parent exiting
[确定]
[[email protected] init.d]# netstat -tnlp|grep mongod
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 2035/mongod
添加开机自启动
[[email protected] init.d]# chkconfig --add mongod
[[email protected] init.d]# chkconfig mongod on
[[email protected] init.d]# chkconfig |grep mongod
mongod 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
三、安全设置
1.限制登陆
查看帮助可以看到 登陆得方式
[[email protected] bin]# ./mongo --help
MongoDB shell version v3.6.5
usage: ./mongo [options] [db address] [file names (ending in .js)]
db address can be:
foo foo database on local machine
192.168.0.5/foo foo database on 192.168.0.5 machine
192.168.0.5:9999/foo foo database on 192.168.0.5 machine on port 9999
[[email protected] bin]# ./mongo 192.168.16.144
MongoDB shell version v3.6.5
connecting to: mongodb://192.168.16.144:27017/test
2018-06-05T20:01:42.623+0800 W NETWORK [thread1] Failed to connect to 192.168.16.144:27017, in(checking socket for error after poll), reason: Connection refused
2018-06-05T20:01:42.624+0800 E QUERY [thread1] Error: couldn't connect to server 192.168.16.144:27017, connection attempt failed :
[email protected]/mongo/shell/mongo.js:251:13
@(connect):1:6
exception: connect failed
错误信息:远程不允许登陆
先关闭 mongodb服务
[[email protected] bin]# service mongod stop
Stopping mongod: [确定]
[[email protected] bin]# vim /etc/init.d/mongod //编辑启动脚本加入 在启动选项加入以下内容
OPTIONS=" --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/log.txt --fork --bind_ip=127.0.0.1, 192.168.16.144"
启动mongodb
[[email protected] bin]# service mongod start
Starting mongod: about to fork child process, waiting until server is ready for connections.
forked process: 2219
child process started successfully, parent exiting
[确定]
[[email protected] bin]# ./mongo 192.168.16.144
MongoDB shell version v3.6.5
connecting to: mongodb://192.168.16.144:27017/test
MongoDB server version: 3.6.5
Server has startup warnings:
只有这个ip可以远程登陆,但是还不安全 需要添加一个管理用户
2.用户权限限制
设置一个超级管理员账户,对于所有库具有读写权限
语法:
db.createUser({user:"root",pwd:"root",roles:["root"]})
实现步骤:
切换到 admin 库
> use admin
switched to db admin
创建 管理员用户
> db.createUser({user:'admin',pwd:'admin',roles:['root']})
Successfully added user: { "user" : "admin", "roles" : [ "root" ] }
>
关闭mongodb 服务
在启动脚本中得启动选项中再添加一条
OPTIONS=" --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/log.txt --fork --bind_ip=127.0.0.1, 192.168.16.144 --auth"
--auth 启动权限校验
启动服务测试
[[email protected] bin]# ./mongo
MongoDB shell version v3.6.5
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.5
> use admin
switched to db admin
> db.goods.find()
Error: error: {
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { find: \"goods\", filter: {}, $db: \"admin\" }",
"code" : 13,
"codeName" : "Unauthorized"
}
可以看到 不是 admin 没有权限
查看帮助 找到登陆 方式
> db.help --help
db.auth(username, password)
> db.auth('admin','admin')
1 //看到1 登陆成功
> db.goods.insert({user:'root'}) 插入一条字段 测试
WriteResult({ "nInserted" : 1 })
>
创建成功 这样 不是 这个ip 和这个 管理账号 登陆得话就不能做任何操作 服务就会安全很多