前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB 删库要跑路吗?

MongoDB 删库要跑路吗?

作者头像
数据库交流
发布2022-04-25 09:08:59
4200
发布2022-04-25 09:08:59
举报
文章被收录于专栏:悦专栏

MongoDB 删库要跑路吗?其实有合理的备份,也不一定要跑路的。

在上一节,我们聊到了 MongoDB 5.x 副本集部署,这一节来聊聊副本集的数据备份。

1 创建备份用户

在 Primary 节点执行下面语句创建备份用户:

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

2 增加备份脚本

代码语言:javascript
复制
mkdir -p /data/mongodb/{script,backup}
vim /data/mongodb/script/backup.sh

加入如下内容:

代码语言:javascript
复制
#!/bin/bash
bakdir='/data/mongodb/backup'
nowtime=$(date +%Y%m%d%H%M%S)
start(){
  /usr/bin/mongodump --host 127.0.0.1:27001 -u backup_user -p xxxxxx --out ${bakdir}/mongobak_${nowtime}
}
execute(){
  start
  if [ $? -eq 0 ]
  then
    echo "back successfully!"  
  else
    echo "back failure!"  
  fi
}

delete(){
        find $bakdir/  -name "mongobak_"   -mtime +15   -exec rm -rf {} \;
}

execute
delete
echo "backup end"

赋予可执行权限

代码语言:javascript
复制
chmod +x /data/mongodb/script/backup.sh

3 脚本测试

执行备份脚本,看是否能正常备份:

代码语言:javascript
复制
/data/mongodb/script/backup.sh

看结尾处是否显示如下内容:

代码语言:javascript
复制
back successfully!
backup end

并查看备份目录下是否有备份文件:

代码语言:javascript
复制
[root@node1 backup]# tree /data/mongodb/backup/
/data/mongodb/backup/
└── mongobak_20211124145903
    ├── admin
    │   ├── system.users.bson
    │   ├── system.users.metadata.json
    │   ├── system.version.bson
    │   └── system.version.metadata.json
    ├── config
    │   ├── external_validation_keys.bson
    │   ├── external_validation_keys.metadata.json
    │   ├── tenantMigrationDonors.bson
    │   ├── tenantMigrationDonors.metadata.json
    │   ├── tenantMigrationRecipients.bson
    │   └── tenantMigrationRecipients.metadata.json
    └── martin
        ├── martin.bson
        └── martin.metadata.json

4 directories, 12 files

4 加入到定时任务

代码语言:javascript
复制
crontab -e

加入如下内容:

代码语言:javascript
复制
代码语言:javascript
复制
0 0 * * * /data/mongodb/script/backup.sh >>/data/mongodb/backup/backup.log

5 恢复

当发生误操作需要恢复数据时,将 Secondary 节点的备份文件拷贝到 一个新的 MongoDB 实例上,然后通过下面命令进行恢复:

代码语言:javascript
复制
mongorestore --port 27001 -uroot -pxxxxxx  mongobak_20211124145903

在末尾会出现恢复详情,如下:

代码语言:javascript
复制
......
2021-11-24T15:01:45.786+0800  1 document(s) restored successfully. 0 document(s) failed to restore.

然后进行数据验证。确定数据正常,则从新实例上查询误操作的数据,在 Primary 节点上进行恢复。

到这里,MongoDB 集群的数据备份和恢复就聊完啦,可能有很多地方需要优化

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 悦专栏 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 创建备份用户
  • 2 增加备份脚本
  • 3 脚本测试
  • 4 加入到定时任务
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档