三. Mongodb核心技术
1. 逻辑结构
Mongodb 逻辑结构 | MySQL逻辑结构 |
---|---|
库(database) | 库 |
集合(collection) | 表 |
文档(document) | 数据行 |
2. 安装部署
2.1 系统准备
1 | (1)redhat或cnetos6.2以上系统 |
2.2 关闭大页内存机制
1 | 1.root用户下 |
2.3 MongoDB安装
1 | 1.创建所需的用户和组:wan1314520 |
1 | 注:连接之后会有warning,需要修改(使用root用户) |
2.4 YAML模式:非常经典的专门用作配置文件的格式
1. 一定不能出现有tab空格,不然解析不了
2. 配置的介绍
1 | --系统日志有关 |
3. 复制集相关配置
1 | replication: |
4. YAML例子
1 | cat >> /mongodb/conf/mongo.conf << EOF |
3. MongoDB常用的基本操作
3.1 mongodb 默认存在的库
1 | 1.登录后默认使用的库 |
3.2 命令分类
3.2.1 逻辑对象
1 | 库(database) |
3.3 db.命令
3.3.1 DB级别命令
1 | DB级别命令 |
3.4 复制集有关(replication set)
1 | rs. |
3.5 分片集群(sharding cluster)
1 | sh. |
3.6 常用操作
1 | --查看当前db版本 |
3.7 库的操作
1 | – 创建数据库: |
3.8 集合的操作
1 | 方法1 |
4. Mongodb数据查询语句
4.1 查询集合中的记录数
1 | app> db.log.find() //查询所有记录 |
4.2 删除集合中的记录数
1 | app> db.log.remove({}) //删除集合中所有记录 |
4.3 查看集合存储信息
1 | app> db.log.stats() |
5. 用户管理
1 | 验证库,建立用户时use到的库,在使用用户时,要加上验证库才能登陆。 |
5.1 基本语法
1 | use admin |
5.2 基本语法说明
1 | 基本语法说明: |
5.3 验证数据库
1 | mongo -u oldguo -p 123 10.0.0.200/oldguo |
5.4 用户管理的例子:创建超级管理员
5.4.1 创建超级管理员:管理所有的数据库(必须use admin 再去创建)
1 | use admin |
5.4.2 验证用户
1 | db.auth('root','root123') |
5.4.3 配置文件中,加入以下配置(开启密码认证)
1 | security: |
5.4.4 重启MongoDB
1 | mongod -f /mongodb/conf/mongo.conf --shutdown |
5.4.5 登录验证
1.方式一
1 | [mongod@zcg conf]$ mongo -uroot -proot123 admin |
2.方式二
1 | mongo |
5.5 用户管理的例子:创建库管理用户
5.5.1 首先root用户登录
1 | mongo -uroot -proot123 admin |
5.5.2 创建库
1 | use app |
5.5.3 创建库管理用户
1 | db.createUser( |
5.5.4 验证
1 | db.auth('admin','admin') |
5.5.5 登录测试
1 | mongo -uadmin -padmin 10.0.0.100/app |
5.6 创建对app数据库,读、写权限的用户app01
5.6.1 超级管理员登录
1 | mongo -uroot -proot123 admin |
5.6.2 选择一个验证库
1 | use app |
5.6.3 创建用户
1 | db.createUser( |
5.6.4 登录
1 | mongo -uapp01 -papp01 app |
5.7 创建app数据库读写权限的用户并对test数据库具有读权限
1 | mongo -uroot -proot123 10.0.0.200/admin |
5.8 查询MongoDB中的用户信息
1 | mongo -uroot -proot123 10.0.0.200/admin |
5.9 删除用户(root身份登录,use到验证库)
1 | # mongo -uroot -proot123 10.0.0.200/admin |
6. mongodb复制集RS
6.1 基本原理
1 | 基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB) Paxos(mysql MGR 用的是变种)) |
6.2 Replcation Set配置过程详解
6.2.1 规划
1 | 1.三个以上的mongodb节点(或多实例) |
6.2.2 配置复制集:一主两从(从库在默认情况下,只是实现了高可用,并没有实现高性能)
1 | 1.随便登录其中一个节点 |
6.2.2 一主一从一个仲裁者
1 | mongo -port 28017 admin |
6.2.3 删除一个节点
1 | rs.remove("ip:port"); // 删除一个节点 |
6.2.4 新增一个节点
1 | rs.add("ip:port"); // 新增从节点 |
注意
1 | 添加特殊节点时, |
6.3 配置特殊节点
6.3.1 特殊节点
1 | 1.投票使用的 |
注意: 一般情况下会将delay+hidden一起配置使用
6.3.2 配置延时节点(一般延时节点也配置成hidden)
1 | cfg=rs.conf() |
6.3.3 副本集其他操作命令
1 | --查看副本集的配置信息 |
注意: OPlog日志(备份恢复章节)
7. MongoDB Sharding Cluster 分片集群
7.1 规划
1 | 10个实例:38017-38026 |
7.1.1 configserver
1 | 3台构成的复制集(1主两从,不支持arbiter)38018-38020(复制集名字configsvr) |
7.1.2 shard节点
1 | shard1:38021-23 (1主两从,其中一个节点为arbiter,复制集名字shard1) |
7.2 分片集群配置过程
7.2.1 shard复制集配置
1.目录创建
1 | mkdir -p /mongodb/38021/conf /mongodb/38021/log /mongodb/38021/data |
2.修改配置文件
1 | 1.shard1 |
1 | 2.shard2 |
3.启动所有的节点,并搭建复制集
1 | mongod -f /mongodb/38021/conf/mongodb.conf |
1 | mongo --port 38021 |
1 | mongo --port 38024 |
7.3 config节点配置
7.3.1 目录创建
1 | mkdir -p /mongodb/38018/conf /mongodb/38018/log /mongodb/38018/data |
7.3.2 修改配置文件
1 | cat >> /mongodb/38018/conf/mongodb.conf << EOF |
7.3.3 启动节点,并配置复制集
1.启动节点
1 | mongod -f /mongodb/38018/conf/mongodb.conf |
2.配置复制集
1 | mongo --port 38018 |
注意:
1 | 注:configserver 可以是一个节点,官方建议复制集。configserver不能有arbiter。 |
7.4 mongos节点配置
7.4.1 创建目录
1 | mkdir -p /mongodb/38017/conf /mongodb/38017/log |
7.4.2 配置文件
1 | cat >> /mongodb/38017/conf/mongos.conf <<EOF |
7.4.2 启动mongos
1 | mongos -f /mongodb/38017/conf/mongos.conf |
7.5 range 分片配置及测试
7.5.1 激活数据库分片功能
1 | mongo --port 38017 admin |
7.5.2 指定分片建对集合分片
1 | eg:范围片键 |
7.5.3 集合分片验证
1 | admin> use test |
7.5.4 分片结果测试(连接到分片的主节点)
1 | shard1: |
7.6 Hash分片例子
7.6.1 对于oldguo开启分片功能
1 | mongo --port 38017 admin |
7.6.2 对于oldguo库下的vast表建立hash索引
1 | use oldguo |
7.6.3 开启分片
1 | use admin |
7.6.4 录入10w行数据测试
1 | use oldguo |
7.6.5 hash分片结果测试
1 | mongo --port 38021 |
7.7 判断是否是shard集群
1 | admin> db.runCommand({ isdbgrid : 1}) |
7.8 列出所有分片信息
1 | admin> db.runCommand({ listshards : 1}) |
7.9 列出开启分片的数据库
1 | admin> use config |
8.0 查看分片的片键
1 | config> db.collections.find().pretty() |
8.1 查看分片的详细信息
1 | admin> db.printShardingStatus() |
8.2 删除分片节点(谨慎)
1 | (1)确认blance是否在工作 |
8.3 balancer操作
1 | 介绍: |
8.4 自定义 自动平衡进行的时间段
1 | https://docs.mongodb.com/manual/tutorial/manage-sharded-cluster-balancer/#schedule-the-balancing-window |
1 | 关于集合的balance(了解下) |
8. 备份恢复
8.1 备份恢复工具介绍
1 | (1)** mongoexport/mongoimport |
8.2 备份工具区别在哪里
1 | 2.1. mongoexport/mongoimport 导入/导出的是JSON格式或者CSV格式, |
8.3 导出工具mongoexport
1 | Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。 |
8.4 数据恢复
1 | 1.恢复json格式表数据到log |
8.5 注意
1 | 注意: |
9. 异构平台迁移案例
9.1 mysql —–> mongodb
9.1.1 mysql开启安全路径
1 | vim /etc/my.cnf --->添加以下配置 |
9.1.2 导出mysql的city表数据
1 | source /root/world.sql |
9.1.2 处理备份文件(表的字段:mysql不会导出字段)
1 | password,last_login,is_superuser,username,first_name,last_name,email,is_staff,is_active,date_joined,id,phone,avatar,blog_id |
9.1.3 vim /tmp/city.csv —-> 添加第一行列名信息
1 | password,last_login,is_superuser,username,first_name,last_name,email,is_staff,is_active,date_joined,id,phone,avatar,blog_id |
9.1.4 在mongodb中导入备份
1 | mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -c city --type=csv -f ID,Name,CountryCode,District,Population --file /tmp/city1.csv |
9.1.5 查看
1 | use world |
9.2 mysql导出csv
1 | select * from test_info |
9.3 mysql导入csv
1 | load data infile '/tmp/test.csv' |
10. python连接使用MongoDB
10.1 单机链接
1 | client = MongoClient('mongodb://localhost:27017/') |
10.2 replication set 链接
1 | from pymongo import MongoReplicaSetClient |
10.3 分片集群连接
1 | conn = pymongo.Connection('192.168.1.1', 27017) |