mongodb逻辑结构

Mongodb 逻辑结构         MySQL逻辑结构
库 (database) 库
集合(collection) 表
文档(document) 数据行

安装部署

1 系统准备

1 这里用的mongodb版本是3.6.12
2 redhat或centos6.2以上系统
3 系统开发包完整
4 ip地址和hosts文件解析正常
5 iptables防火墙&SElinux关闭
6 关闭大页内存机制 root用户下
在vi /etc/rc.local最后添加如下代码(永久关闭,重启生效)
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 临时关闭:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag 其他系统关闭参照官方文档:
https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/ 为什么要关闭?
You should disable THP on Linux machines to ensure best performance with MongoDB.

2 mongodb安装

创建所需用户和组
useradd mongod
passwd mongod 创建mongodb所需目录结构
mkdir -p /mongodb/conf
mkdir -p /mongodb/log
mkdir -p /mongodb/data 上传并解压软件到指定位置
cd /server/tools/
tar xf mongodb-linux-x86_64-rhel70-3.6.12.tgz
cp -r /server/tools/mongodb-linux-x86_64-rhel70-3.6.12/bin/ /mongodb 设置目录结构权限
chown -R mongod:mongod /mongodb 设置用户环境变量
[root@db01 mongodb]# su - mongod
[mongod@db01 ~]$ vi .bash_profile
export PATH=/mongodb/bin:$PATH
[mongod@db01 ~]$ source .bash_profile 启动mongodb
mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork 登录mongodb
[mongod@server2 ~]$ mongo
或者
[mongod@server2 ~]$ mongo 127.0.0.1:27017 注:连接之后会有warning,需要修改(使用root用户)
vim /etc/security/limits.conf
#* - nofile 65535
reboot重启生效 ############################################################################################
使用配置文件
[mongod@db01 ~]$ vim /mongodb/conf/mongodb.conf
logpath=/mongodb/log/mongodb.log
dbpath=/mongodb/data
port=27017
logappend=true
fork=true 使用配置文件启动mongodb
mongod -f /mongodb/conf/mongodb.conf
关闭mongodb
mongod -f /mongodb/conf/mongodb.conf --shutdown
############################################################################################ YAML模式
YAML does not support tab characters for indentation: use spaces instead.
YAML不支持缩进的制表符:请改用空格。 -- 系统日志有关
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> -- 监听地址
port: <port> -- 端口号,默认不配置端口号,是27017 -- 安全验证有关配置
security:
authorization: enabled -- 是否打开用户名密码验证 ------------------以下是复制集与分片集群有关----------------------------
replication:
oplogSizeMB: <NUM>
replSetName: "<REPSETNAME>"
secondaryIndexPrefetch: "all" sharding:
clusterRole: <string>
archiveMovedChunks: <boolean> ---for mongos only
replication:
localPingThresholdMs: <int> sharding:
configDB: <string>
-------------------------------------------------------------------- # 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
bindIp: 10.0.0.51,127.0.0.1
EOF 启动和停止mongodb
mongod -f /mongodb/conf/mongo.conf
mongod -f /mongodb/conf/mongo.conf --shutdown mongodb 使用systemd管理
cat > /etc/systemd/system/mongod.service <<EOF
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
User=mongod
Type=forking
ExecStart=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf --shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF [root@db01 ~]# systemctl restart mongod
[root@db01 ~]# systemctl stop mongod
[root@db01 ~]# systemctl start mongod

mongodb常用操作

mongodb 默认存在的库
test :登录时默认存在的库
admin :系统预留库,MongoDB系统管理库
local :本地预留库,存储关键日志
config :MongoDB配置信息库 show databases/show dbs
show tables/show collections
use admin
db/select database() db 对象相关命令
db.[TAB][TAB]
db.help()
db.oldboy.[TAB][TAB]
db.oldboy.help() rs 复制集有关(replication set)
rs.[TAB][TAB]
rs.help() sh 分片集群(sharding cluster)
sh.[TAB][TAB]
sh.help() 库的操作
> use test
>db.dropDatabase() 删库跑路
{ "dropped" : "test", "ok" : 1 } 集合的操作
方法1
admin> use app
app> db.createCollection('a')
{ "ok" : 1 }
app> db.createCollection('b') 方法2:当插入一个文档的时候,一个集合就会自动创建。
use oldboy
db.test.insert({name:"zhangsan"})
db.stu.insert({id:101,name:"zhangsan",age:20,gender:"m"})
show tables;
db.stu.insert({id:102,name:"lisi"})
db.stu.insert({a:"b",c:"d"})
db.stu.insert({a:1,c:2}) 文档操作
数据录入:
for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new
Date()})} 查询数据行数:
> db.log.count() 全表查询:
> db.log.find() 每页显示50条记录:
> DBQuery.shellBatchSize=50; 按照条件查询
> db.log.find({uid:999}) 以标准的json格式显示数据
> db.log.find({uid:999}).pretty()
{
"_id" : ObjectId("5cc516e60d13144c89dead33"),
"uid" : 999,
"name" : "mongodb",
"age" : 6,
"date" : ISODate("2019-04-28T02:58:46.109Z")
} 删除集合中所有记录
app> db.log.remove({}) 查看集合存储信息
app> db.log.totalSize() //集合中索引+数据压缩存储之后的大小 重命名集合
//把log改名为log1
app> db.log.renameCollection("log1")
{ "ok" : 1 }
app> show collections
a b c
log1
app

用户和权限管理

1 注意
验证库: 建立用户时use到的库,在使用用户时,要加上验证库才能登陆
对于管理员用户,必须在admin下创建.
1. 建用户时,use到的库,就是此用户的验证库
2. 登录时,必须明确指定验证库才能登录
3. 通常,管理员用的验证库是admin,普通用户的验证库一般是所管理的库设置为验证库
4. 如果直接登录到数据库,不进行use,默认的验证库是test,不是我们生产建议的.
5. 从3.6版本开始,不添加bindIp参数,默认不让远程登录,只能本地管理员登录 2 用户创建语法
use 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 oldboy -p 123 10.0.0.53/oldboy 3 用户管理例子
创建超级管理员:管理所有数据库(必须use admin再去创建)
$ mongo
use admin
db.createUser(
{
user: "root",
pwd: "root123",
roles: [ { role: "root", db: "admin" } ]
}
) 验证用户
db.auth('root','123') 配置文件中,加入以下配置
security:
authorization: enabled 重启mongodb
mongod -f /mongodb/conf/mongo.conf --shutdown
mongod -f /mongodb/conf/mongo.conf 登录验证
mongo -uroot -p123 # 注意这个登录是未验证成功的,需要去验证
mongo -uroot -p123 10.0.0.51/admin 或者
mongo
use admin
db.auth('root','root123') 查看用户
use admin
db.system.users.find().pretty() 创建应用用户
use oldboy
db.createUser(
{
user: "app01",
pwd: "app01",
roles: [ { role: "readWrite" , db: "oldboy" } ]
}
) mongo -uapp01 -papp01 10.0.0.51/oldboy 查询mongodb中的用户信息
mongo -uroot -p123 10.0.0.51/admin
db.system.users.find().pretty() 4 删除用户(root身份登录,use到验证库)
# 在root用户下进行
# 创建用户
use oldboy1
db.createUser({user: "app02",pwd: "app02",roles: [ { role: "readWrite" , db: "oldboy1" } ]}) # 查询用户
use admin
db.system.users.find().pretty() # 删除用户
use oldboy1
db.dropUser("app02") 5 用户管理注意事项
1. 建用户要有验证库,管理员admin,普通用户是要管理的库
2. 登录时,注意验证库
mongo -uapp01 -papp01 10.0.0.51:27017/oldboy
3. 重点参数
net:
port: 27017
bindIp: 10.0.0.51,127.0.0.1
security:
authorization: enabled

MongoDB-01-基础的更多相关文章

  1. Java 之 I/O 系列 01 ——基础

    Java 之 I/O 系列 目录 Java 之 I/O 系列 01 ——基础 Java 之 I/O 系列 02 ——序列化(一) Java 之 I/O 系列 02 ——序列化(二) 整理<疯狂j ...

  2. 一点MongoDB的基础及mongodb在mac上的安装

    最近发现维持写博客的习惯还是挺困难的,尤其对我来说,计划好的事过了好长时间才想到要去做. 这段时间一直在熟悉MongoDB,首先我是参考的这一篇:8天学通MongoDB   原博主写得非常好,我这里就 ...

  3. linux 01 基础命令

    linux 01 基础命令 对于Linux要记住一个概念,一切皆文件,哪怕是目录,也是一个文件 1.修改用户密码 sudo passwd pyvip@Vip:~$ #pyvip表示用户名, Vip表示 ...

  4. Mongodb最基础入门教程

      Mongodb最基础入门教程 如果想了解一下redis的入门教程,可以去看一下我的上一篇博客 Mongodb的安装大家可以参考一下其他博主的博客,这里我就不做介绍了.不过值得注意的是,在Linux ...

  5. 01.基础架构:一条SQL查询语句是如何执行的?学习记录

    01.基础架构:一条SQL查询语句是如何执行的?学习记录http://naotu.baidu.com/file/1c8fb5a0f2497c3a2655fed89099cb96?token=ff25d ...

  6. 01 基础版web框架

    01 基础版web框架 服务器server端python程序(基础版): import socket server=socket.socket() server.bind(("127.0.0 ...

  7. MongoDB学习——基础入门

    MongoDB--基础入门 MongoDB是目前比较流行的一种非关系型数据库(NoSql),他的优势这里不废话,我们关注怎么使用它. 安装 下载,首先肯定要去下载,我们去官网下载,在国内,可能没FQ可 ...

  8. mongodb 索引基础

    一 .索引基础:    MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧.下面是创建索引的命令:    > db.test.ensureIndex({&quo ...

  9. NOSQL学习笔记系列之MongoDB 一 基础

    主题:MongoDB 学习资料参考网址: 1.http://www.w3cschool.cc/mongodb/mongodb-tutorial.html 2.http://www.icoolxue.c ...

  10. PHP学习笔记01——基础语法

    <!DOCTYPE html> <html> <?php // 1.使用$加变量名来表示变量,php是弱类型语言,不要求在使用变量前声明,第一次赋值时变量才被创建 $a ...

随机推荐

  1. Python管道进行数据的吞吐处理

    import multiprocessing import random import time import datetime import struct import os import getF ...

  2. SpringMVC(1)流程框架总体介绍

    SpringMVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能MVC 模块,其功能和Strtus2 ...

  3. Outlook配置163邮箱

    一.在163邮箱设置处设置POP3/SMTP/IMAP 二.开启客户端授权码 三.打开Outlook,选择手动设置 选择POP/IMAP 密码是上文中的授权码 点击其它设置,勾选以下选项 点击完成即可

  4. UI自动化测试框架Gauge 碰到无法识别Undefined Steps 红色波纹标记

    如果碰到无法识别的情况,例如下面的红色波纹,可以试一下: 第一步: 第二步: 不勾选'offline work' 第三部:刷新之后可以重新编译.

  5. JProfiler监控java应用使用情况,故障情况分析

    1.软件部署(java环境已提前准备) 服务器:centos7.4 https://download-gcdn.ej-technologies.com/jprofiler/jprofiler_linu ...

  6. 浅析vue-cli脚手架命令的执行过程

    上一篇文章,已经大致了解脚手架是什么以及脚手架是如何工作的.接下来,稍微深入一下脚手架的工作过程(以vue-cli为例).首先抛出3个问题: 1.明明全局安装的是@vue/cli,最后执行的命令却是v ...

  7. kubernetes/k8s CSI分析-容器存储接口分析

    更多 k8s CSI 的分析,可以查看这篇博客kubernetes ceph-csi分析,以 ceph-csi 为例,做了详细的源码分析. 概述 kubernetes的设计初衷是支持可插拔架构,从而利 ...

  8. springMVC-6-restful_CRUD

    1.大体框架 POJO层代码 Employee @Data public class Employee { private Integer id; private String lastName; p ...

  9. MySQL 8.x 新版本特性赶紧学!!Linux 服务器上安装 MySQL 8.x

    我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 引言 ...

  10. erase

    erase详细解释及原理 我们先定义一个字符串string string.erase(iterator) iterator表示要删除元素的迭代器. string.erase(it_begin,it_e ...