1. 逻辑结构
Mongodb 逻辑结构 MySQL逻辑结构
库database 库
集合(collection) 表
文档(document) 数据行
2. 安装部署
1、系统准备
(1)redhat或cnetos6.2以上系统
(2)系统开发包完整
(3)ip地址和hosts文件解析正常
(4)iptables防火墙&SElinux关闭
(5)关闭大页内存机制
root用户下
cat >>/etc/rc.local <<EOF
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
[root@standby opt]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@standby opt]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
其他系统关闭参照官方文档:
https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/
3. mongodb安装配置
1\. 创建所需用户和组
groupadd -g 800 mongod
useradd -u 801 -g mongod mongod
passwd mongod
2\. 创建mongodb所需目录结构
mkdir -p /mongodb/bin
mkdir -p /mongodb/conf
mkdir -p /mongodb/log
mkdir -p /mongodb/data
3\. 上传并解压软件到指定位置
上传到:
cd /opt/
解压:
tar xf mongodb-linux-x86_64-rhel70-3.4.16.tgz
4\. 设置目录结构权限
chown -R mongod:mongod /mongodb
5\. 设置用户环境变量
su - mongod
cat >> .bash_profile << EOF
export PATH=/mongodb/bin:$PATH
EOF
source .bash_profile
6\. 启动mongodb
mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork
7\. 登录mongodb
[mongod@server2 ~]$ mongo
注:连接之后会有warning,需要修改(使用root用户)
vim /etc/security/limits.conf
#* - nofile 65535
reboot重启生效
8\. 使用配置文件
vim /mongodb/conf/mongodb.conf
logpath=/mongodb/log/mongodb.log
dbpath=/mongodb/data
port=27017
logappend=true
fork=true
9\. 关闭mongodb
mongod -f /mongodb/conf/mongodb.conf --shutdown
10\. 使用配置文件启动mongodb
mongod -f /mongodb/conf/mongodb.conf
YAML模式的配置文件
--
NOTE:
YAML does not support tab characters for indentation: use spaces instead.
--系统日志有关
systemLog:
destination: file
path: "/mongodb/log/mongodb.log" --日志位置
logAppend: true --日志以追加模式记录
--数据存储有关
storage:
journal:
enabled: true
dbPath: "/mongodb/data" --数据路径的位置
-- 进程控制
processManagement:
fork: true --后台守护进程
pidFilePath: <string> --pid文件的位置,一般不用配置,可以去掉这行,自动生成到data中
--网络配置有关
net:
bindIp: <ip> -- 监听地址,如果不配置这行是监听在0.0.0.0
port: <port> -- 端口号,默认不配置端口号,是27017
-- 安全验证有关配置
security:
authorization: enabled --是否打开用户名密码验证
YAML例子
cat >> /mongodb/conf/mongo.conf << EOF
systemLog:
destination: file
path: "/mongodb/log/mongodb.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/mongodb/data/"
processManagement:
fork: true
net:
port: 27017
EOF
4. mongodb常用基本操作
-
启动, 关闭, 配置文件启动
启动: mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --for 关闭: mongod -f mongodb.conf --shutdown 配置文件启动: mongod -f /mongodb/conf/mongo.conf
-
mongodb 默认存在的库
test: 登录时默认存在的库 管理mongodb有关的系统库 admin库: 系统预留库,mongodb系统管理库 local库: 本地预留库,存储关键日志
-
命令分类
库(database) show databases show dbs use oldguo db 表(collection集合) show tables show collections 数据行(document) db.表名.insert() 复制集有关(replication set): rs. 分片集群(sharding cluster) sh. 帮助 .help() db.help() db.a.help() rs.help() sh.help()
-
常用操作
查看当前db版本 db.version() 显示当前数据库 db 查询所有数据库 show dbs 切换数据库 use local 查看所有的collection show tables; 显示当前数据库状态 use local db.stats() 查看当前数据库的连接机器地址 db.getMongo()
-
mongo与mysql对应关系
mongo mysql
库 -----> 库
集合 -----> 表
文档 -----> 数据行 -
库的操作:
创建数据库: 当use的时候,系统就会自动创建一个数据库。 如果use之后没有创建任何集合。 系统就会删除这个数据库。 删除数据库 如果没有选择任何数据库,会删除默认的test数据库 db.dropDatabase()
-
集合的操作:
方法1: db.createCollection('a') 方法2:当插入一个文档的时候,一个集合就会自动创建。 db.stu.insert({id:101,name:"zhangsan",age:20,gender:"m"})
-
查询数据:
db.stu.find({}).pretty() db.stu.find({id:101}).pretty();
-
删除集合
db.stu.drop()
-
重命名集合 , 把log改名为log1
```
db.log.renameCollection("log1")
```
- 批量插入数据
```
for(i=0;i<10000;i++){db.log.insert({"uid":i,
"name":"mongodb","age":6,"date":new Date()})}
```
5. 用户管理
注意:
验证库,建立用户时use到的库,在使用用户时,要加上验证库才能登陆。
对于管理员用户,必须在admin下创建.
use admin
mongo 10.0.0.200/admin
db.createUser
{
user: "<name>",
pwd: "<cleartext password>",
roles: [
{ role: "<role>",
db: "<database>" } | "<role>",
...
]
}
基本语法说明:
user:用户名
pwd:密码
roles:
role:角色名
db:作用对象
role:root, readWrite,read
验证数据库:
mongo -u oldguo -p 123 10.0.0.200/oldguo
总结:
1、在创建普通用户时,一般事先use 到想要设置权限的库下;或者所有普通用户使用同一个验证库,比如test
2、root角色的创建,要在admin下进行创建
3、创建用户时你use到的库,在将来登录时候,使用以下方式登录,否则是登录不了的
-
创建超级管理员:管理所有数据库(必须use admin再去创建)
$ mongo use admin db.createUser( { user: "root", pwd: "root123", roles: [ { role: "root", db: "admin" } ] } ) 验证用户 db.auth('root','root123') 配置文件中,加入以下配置 security: authorization: enabled 重启mongodb mongod -f /mongodb/conf/mongo.conf --shutdown mongod -f /mongodb/conf/mongo.conf 登录验证 mongo -uroot -proot123 admin mongo -uroot -proot123 10.0.0.200/admin 查看用户: use admin db.system.users.find().pretty()
-
创建库管理用户
mongo -uroot -proot123 admin use app db.createUser( { user: "admin", pwd: "admin", roles: [ { role: "dbAdmin", db: "app" } ] } ) db.auth('admin','admin') 登录测试 mongo -uadmin -padmin 10.0.0.200/app
-
创建对app数据库,读、写权限的用户app01:
(1)超级管理员用户登陆 mongo -uroot -proot123 admin (2)选择一个验证库 use app (3)创建用户 db.createUser( { user: "app01", pwd: "app01", roles: [ { role: "readWrite" , db: "app" } ] } ) mongo -uapp01 -papp01 app
-
创建app数据库读写权限的用户并对test数据库具有读权限:
mongo -uroot -proot123 10.0.0.200/admin use app db.createUser( { user: "app03", pwd: "app03", roles: [ { role: "readWrite", db: "app" }, { role: "read", db: "test" } ] } )
-
查询mongodb中的用户信息
mongo -uroot -proot123 10.0.0.200/admin db.system.users.find().pretty()
-
删除用户(root身份登录,use到验证库)
删除用户 mongo -uroot -proot123 10.0.0.200/admin use app db.dropUser("app01")
网友评论