美文网首页
mongoDB(三)

mongoDB(三)

作者: 吃可爱长大鸭 | 来源:发表于2019-12-24 20:54 被阅读0次

第十章 创建用户和角色

0.与用户相关的命令

db.auth() 将用户验证到数据库。
db.changeUserPassword() 更改现有用户的密码。
db.createUser() 创建一个新用户。
db.dropUser() 删除单个用户。
db.dropAllUsers() 删除与数据库关联的所有用户。
db.getUser() 返回有关指定用户的信息。
db.getUsers() 返回有关与数据库关联的所有用户的信息。
db.grantRolesToUser() 授予用户角色及其特权。
db.removeUser() 已过时。从数据库中删除用户。
db.revokeRolesFromUser() 从用户中删除角色。
db.updateUser() 更新用户数据。

1.创建管理用户

mongo db01:27017
use admin 
db.createUser(
    {
        user: "admin",
        pwd: "123456",
        roles:[ 
                { 
                    role: "root", 
                    db:"admin"
                }
              ]
    }   
)

2.查看创建的用户

db.getUsers()

3.配置文件添加权限认证参数

security:     
  authorization: enabled

4.重启mongo

mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
mongod -f /opt/mongo_27017/conf/mongodb.conf

5.使用admin用户登录

mongo db01:27017 -uadmin -p --authenticationDatabase admin

6.创建其他用户

use test
db.createUser(
  {
    user: "mysun",
    pwd: "123456",
    roles: [ { role: "readWrite", db: "write" },
             { role: "read", db: "read" } ]
  }
)

7.创建测试数据

use write
db.write.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})
db.write.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})
db.write.insert({"name":"yazhang","age":28,"ad":"北京市朝阳区"})
db.write.insert({"name":"xiaozhang","age":28,"ad":"北京市朝阳区"})
db.write.insert({"name":"xiaozhang","age":28,"ad":"北京市朝阳区","sex":"boy"})

use read
db.read.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})
db.read.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})
db.read.insert({"name":"yazhang","age":28,"ad":"北京市朝阳区"})
db.read.insert({"name":"xiaozhang","age":28,"ad":"北京市朝阳区"})
db.read.insert({"name":"xiaozhang","age":28,"ad":"北京市朝阳区","sex":"boy"})

8.退出admin,使用mysun用户登录

mongo db01:27017 -umysun -p --authenticationDatabase test
use write
db.write.find()
db.write.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})

use read
db.read.find()
db.read.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})

9.修改用户权限

use test
db.updateUser(
  'mysun',
  { 
    pwd: "123456",
    roles: [ { role: "readWrite", db: "write" },
             { role: "readWrite", db: "read" } ,
             { role: "readWrite", db: "test" }
             ]
             
  }
)

10.删除用户

db.getUsers()
db.dropUser('mysun')

第十一章 mongo副本集配置

1.创建节点目录和数据目录

systemctl stop mongod 
mkdir -p /opt/mongo_2801{7,8,9}/{conf,log,pid}  
mkdir -p /data/mongo_2801{7,8,9}

2.创建配置文件

cat >/opt/mongo_28017/conf/mongo_28017.conf <<EOF
systemLog:
  destination: file   
  logAppend: true  
  path: /opt/mongo_28017/log/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/mongo_28017
  directoryPerDB: true
  wiredTiger:
     engineConfig:
        cacheSizeGB: 0.5 
        directoryForIndexes: true
     collectionConfig:
        blockCompressor: zlib
     indexConfig:
        prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/mongo_28017/pid/mongod.pid

net:
  port: 28017
  bindIp: 127.0.0.1,10.0.0.51

replication:
   oplogSizeMB: 1024 
   replSetName: dba
EOF

3.复制配置文件到其他节点

cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28018/conf/mongo_28018.conf
cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28019/conf/mongo_28019.conf

4.替换端口号

sed -i 's#28017#28018#g' /opt/mongo_28018/conf/mongo_28018.conf  
sed -i 's#28017#28019#g' /opt/mongo_28019/conf/mongo_28019.conf

5.启动所有节点

mongod -f /opt/mongo_28017/conf/mongo_28017.conf
mongod -f /opt/mongo_28018/conf/mongo_28018.conf
mongod -f /opt/mongo_28019/conf/mongo_28019.conf

6.初始化集群

config = {
            _id : "dba", 
            members : [
                        {_id : 0, host : "db01:28017"},
                        {_id : 1, host : "db01:28018"},
                        {_id : 2, host : "db01:28019"},
            ]}
rs.initiate(config) 

7.插入数据

db.inventory.insertMany( [
    { "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
    { "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" },
    { "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" },
    { "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" },
    { "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" }
]);

8.副本节点登录查看数据

rs.slaveOk()
use test
db.inventory.find()

9.设置副本可读

方法1:临时生效
rs.slaveOk()

方法2:写入启动文件
echo "rs.slaveOk()" > ~/.mongorc.js

第十二章 副本集权重调整

0.模拟故障转移

mongod -f /opt/mongo_28017/conf/mongo_28017.conf --shutdown
mongod -f /opt/mongo_28017/conf/mongo_28017.conf

1.查看当前副本集配置

rs.conf()

2.设置权重

config=rs.conf()
config.members[0].priority=100
rs.reconfig(config)

3.恢复成默认的权重

config=rs.conf()
config.members[0].priority=1
rs.reconfig(config)

4.主节点主动降级

rs.stepDown()

第十三章 增加新节点和删除旧节点

1.创建新节点并启动

mkdir -p /opt/mongo_28010/{conf,log,pid}
mkdir -p /data/mongo_28010
cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28010/conf/mongo_28010.conf
sed -i 's#28017#28010#g' /opt/mongo_28010/conf/mongo_28010.conf
mongod -f /opt/mongo_28010/conf/mongo_28010.conf
mongo db01:28010

2.集群添加节点

mongo db01:28017
use admin
rs.add("db01:28010")

3.新节点查看信息

mongo db01:28010

3.删除节点

rs.remove("db01:28010")
rs.remove("db01:28011")

第十四章 仲裁节点

1.不存储数据也不处理数据
2.只负责投票
3.永远不会抢占master角色
4.不消耗太多资源

1.创建新节点并启动

mkdir -p /opt/mongo_28011/{conf,log,pid}
mkdir -p /data/mongo_28011
cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28011/conf/mongo_28011.conf
sed -i 's#28017#28011#g' /opt/mongo_28011/conf/mongo_28011.conf
mongod -f /opt/mongo_28011/conf/mongo_28011.conf
mongo db01:28011

2.将仲裁节点加入集群

rs.addArb("db01:28010")

第十五章 备份与恢复

1.工具介绍

mongoexport/mongoimport     
mongodump/mongorestore      

2.应用场景

异构平台迁移mysql <---> mongodb
同平台,跨大版本:mongodb 2  ----> mongodb 3
mongoexport/mongoimport:json csv

日常备份恢复时使用.
mongodump/mongorestore

3.导出工具mongoexport

单表备份
mongoexport --port 27017 -d test -c inventory -o /data/inventory.json

单表备份至csv格式
mongoexport --port 27017 -d test -c user_info --type=csv -f name,age,ad -o /data/user_info.csv

4.恢复

mongoimport --port 27017 -d test -c inventory /data/inventory.json
mongoimport --port 27017 -d test -c user_info --type=csv --headerline --file  /data/user_info.csv

mysql配置文件添加安全目录
secure-file-priv=/tmp

5.mysql数据迁移到mongo

select * from world.city into outfile '/tmp/city.csv' fields terminated by ',';
编辑csv文件,添加列名
ID,Name,CountryCode,District,Population

mongoimport --port 27017 -d world -c city --type=csv --headerline --file  /data/city.csv
mongoexport --port 27017 -d world -c city -o /data/city.json

6.导出与恢复

mongodump  --port 27017 -o /data/backup
mongorestore --port 27017 -d world  /data/backup/world/ --drop
mongorestore --port 27017 /data/backup/ --drop

第十六章 模拟误删除

oplog介绍

1.oplog是什么?

oplog即操作记录,是副本集成员特有的集合,默认为固定大小。
他是副本集之间同步数据的关键设计。
应用端对数据的增加,删除,修改操作都会被记录在这个集合中。

2.oplog的运作

在配置副本集时,若未指定Oplog大小,则Oplog默认为数据文件所在硬盘容量的5%,但默认大小不会超过50G
若自定义大小则不受限制,只需要在配置文件里使用oplogSizeMB参数即可
注意:此参数仅在集群未初始化前配置有效,一旦Oplog创建完集合,则再修改参数也无效
所以需要提前规划好数据写入的并发程度,如果设置的过小,可能导致还未同步到副本节点,oplog就已经满了

3.oplog的内容

oplog的内容会被记录在数据节点的local数据库中一个叫做oplog.rs的mongodb原生集合中。

操作命令:
use local
db.oplog.rs.findOne()

内容解释:
ts: 操作时间
h:  全局唯一标示
v:  oplog版本
op: 操作类型 
    i: 插入
    u: 更新
    d: 删除
    c: 执行指令
ns: 操作对象(集合)
o:  操作的内容

4.oplog的初始化

如果是新增副本集,或者同步延迟太久,同步源的oplog领先太多,则会进行初始化
在初始化时,节点会从另一个副本成员进行完整的数据复制,包含整个数据文件及oplog的复制

5.oplog的同步

节点在同步时,会对比自身与其他节点的状态,从而选择数据比自己更完整的节点作为数据源进行同步。

6.查看oplog信息

rs.printReplicationInfo()

模拟误删除步骤:
准备测试数据
use backup 
db.backup.insertMany( [
    { "id": 1},
    { "id": 2},
    { "id": 3},
]);

全备环境
rm -rf /data/backup/*
mongodump --port 28017 --oplog -o /data/backup

增加新数据
mongo db01:28017
use backup 
db.backup.insertMany( [
    { "id": 4},
    { "id": 5},
    { "id": 6},
]);

模拟删除集合
mongo db01:28017
use backup 
db.backup.drop()

备份oplog
mongodump --port 28017 -d local -c oplog.rs  -o /data/backup

查找误操作时间点
use local 
db.oplog.rs.find({ns:"backup.$cmd"}).pretty();

找到时间点信息
"ts" : Timestamp(1575023546, 1),


恢复数据
cd /data/backup/local/
cp oplog.rs.bson ../oplog.bson
rm -rf /data/backup/local/
mongorestore --port 28010 --oplogReplay --oplogLimit "1577259776:1"  --drop  /data/backup/

相关文章

网友评论

      本文标题:mongoDB(三)

      本文链接:https://www.haomeiwen.com/subject/jdofoctx.html