前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB入门实战教程(3)

MongoDB入门实战教程(3)

作者头像
Edison Zhou
发布2021-06-11 18:12:00
5350
发布2021-06-11 18:12:00
举报
文章被收录于专栏:EdisonTalk

上一篇我们了解了MongoDB的复制集概念和复制集的搭建,本篇我们来了解一下如何实现数据恢复 和 提升安全性的一些实践。

1 Mongo Tools实现数据恢复

MongoDB 4.4之后,备份与恢复功能就和主版本分离开了,因此如果我们想要实现备份与恢复就需要独立下载Tools包。

下载地址:https://www.mongodb.com/try/download/database-tools

这里,我们下载后将tgz包放到master节点下。

配置Mongo Tools

首先,解压压缩包并重命名,然后将其移动到指定目录下:

代码语言:javascript
复制
tar -zvxf mongodb-database-tools-rhel70-x86_64-100.3.1.tgz
mv mongodb-database-tools-rhel70-x86_64-100.3.1 tools
mv tools /usr/local/mongodb

然后,为tools在master节点下配置环境变量:

Step1. 修改profile文件并刷新

代码语言:javascript
复制
cat >>/etc/profile<<"EOF"
>export PATH=$PATH:/usr/local/mongodb/tools/bin
>EOF

source /etc/profile

Step2. 修改.bashrc文件

代码语言:javascript
复制
cat >>/root/.bashrc<<"EOF"
>export PATH="$PATH:/usr/local/mongodb/tools/bin"
>EOF

测试数据恢复

首先,下载测试数据备份dump:

代码语言:javascript
复制
链接: https://pan.baidu.com/s/1wII6S_-ipup4nu9NDKlWcw
提取码: ihjm

其次,将其拷贝到master节点(因为我们只在master节点安装了tools)并解压:

代码语言:javascript
复制
tar -zvxf mongodb-database-tools-rhel70-x86_64-100.3.1.tgz

最后,在解压的目录下(我这里是/usr/local/mongodb/)执行mongorestore:

代码语言:javascript
复制
mongorestore -h mongo-master:27017

执行结果如下图所示:

可以看到,有100000条记录成功恢复。

我们也可以验证一下:

可以看到orders表已经恢复到mock数据库中。

此外,我们还可以使用mongo tools实现数据的备份,只需借助 mongodump 命令,示例如下:

代码语言:javascript
复制
# 排除指定的集合
mongodump  --db test --excludeCollection=users --excludeCollection=salaries
# 指定ip,端口,用户名,认证,压缩,输出目录
mongodump --host mongo-master --port 37017 --username user --password "pass" --gzip --out /opt/backup/mongodump-2020-05-17

2 提升安全性的实践

默认是无安全性的设置

MongoDB默认的配置是无安全性的,用户名密码都不需要就可以直接连接。在默认模式下,一般不要开放外网连接端口,否则你的MongoDB很可能会被攻击和删库。

更改MongoDB默认端口

MongoDB默认的端口是27017,一般线上环境都建议更改默认端口,比如改为20270,只需在mongodb.conf中配置即可。

代码语言:javascript
复制
net:
  bindIp: 0.0.0.0
  port: 20270 # port

MongoDB的用户认证方式

MongoDB提供了以下的用户认证方式:

本次我们实践一下用户名+密码的认证方式来提高一点安全性。

MongoDB的授权基于角色的权限控制,不同权限的用户对数据库的操作不同。这一点,跟传统的关系型数据库如MySQL、MSSQL没有多大差异。

Mongo集群节点的认证

首先,我们需要配置一下Mongo集群节点的认证,目前有两种认证方式。

这里,我们采用第一种,即Keyfile的方式。

Step1.在master节点上通过openssl生成Keyfile:

代码语言:javascript
复制
mkdir /usr/local/mongodb/certs
cd /usr/local/mongodb/certs
openssl rand -base64 756 > mongo-repl-set.key
chmod 400 mongo-repl-set.key

Step2.将这个Keyfile复制到两个slave节点上,文件目录的组织可以保持一致。

Step3.分别修改各个节点的mongodb.conf,添加security的配置:

代码语言:javascript
复制
systemLog:
  destination: file
  path: /usr/local/mongodb/logs/mongodb.log # log path
  logAppend: true
storage:
  dbPath: /usr/local/mongodb/data # data directory
net:
  bindIp: 0.0.0.0
  port: 27017 # port
security:
  #authorization: enabled
  keyFile: /usr/local/mongodb/certs/mongo-repl-set.key
replication:
  replSetName: localrs
processManagement:
  fork: true

然后,重新启动这个复制集集群中的三个节点。

创建认证用户

首先,MongoDB规定,创建的第一个用户一定要在admin数据库,并且角色是 userAdminAnyDatabase。

代码语言:javascript
复制
use admin
db.createUser({user:"admin",pwd:"yourpassword",
roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

创建完第一个用户,就可以用这个用户登录并创建其他角色的用户了。

其次,创建一个集群的admin用户:

代码语言:javascript
复制
use admin
db.auth("admin","yourpassword")
db.createUser({user:"replicasAdmin",pwd:"yourpassword",
roles:[{role:"clusterAdmin",db:"admin"}]})

这时,你就可以用这个replicasAdmin用户作为你的复制集的使用账号了。

对于生产环境,你还需要自定义一些角色并生成对应用户来控制访问权限,例如下面的授权:

代码语言:javascript
复制
db.createRole(
  {
    role: 'sampleRole',
    privileges: [{
    resource: {
      db: 'sampledb', collection: 'sample'
    },
    actions: ["update"]
  }],
  roles: [{
    role: 'read',
    db: 'sampledb'
    }]
  }
)
db.createUser(
  {
    user: 'sampleUser',
    pwd: 'password',
    roles: [{role: 'sampleRole', db: 'admin'}]
  }

最后,你也可以创建一个root用户,和Linux系统一样,这是一个超级用户账号:

代码语言:javascript
复制
use admin
db.auth("admin","yourpassword")
db.createUser({user:"root",pwd:"yourpassword",
roles:[{role:"root",db:"admin"}]})

当然,由于这个账号权限太大,不建议分给应用程序层面(比如.NET或Java应用)进行联接使用。

重启复制集集群

将三个节点的mongodb.conf中的 security.authorization:true 的注释去掉,重启复制集:

代码语言:javascript
复制
......
security:
  authorization: enabled
  keyFile: /usr/local/mongodb/certs/mongo-repl-set.key
......

3 总结

本文介绍了如何通过Mongo Tools实现数据恢复 和 提高安全性的一些实践。

下一篇,我们会学习MongoDB的基本操作和查询。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Mongo Tools实现数据恢复
    • 配置Mongo Tools
      • 测试数据恢复
      • 2 提升安全性的实践
        • 默认是无安全性的设置
          • 更改MongoDB默认端口
            • MongoDB的用户认证方式
              • Mongo集群节点的认证
                • 创建认证用户
                  • 重启复制集集群
                  • 3 总结
                  相关产品与服务
                  云数据库 MongoDB
                  腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档