网站模板制作教程,沈阳建设工程信息网浑南新区,旅游网网站的设计,成品网站源码在线观看目录
一、基本概述
二、逻辑备份
1、全量备份
2、增量备份
3、恢复
三、物理备份
1、cp/tar/fsync
2、WiredTiger 热备份
3、恢复
四、快照备份 一、基本概述 MongoDB 是一种流行的 NoSQL 数据库#xff0c;它使用文档存储数据#xff0c;支持丰富的查询语言和索引…目录
一、基本概述
二、逻辑备份
1、全量备份
2、增量备份
3、恢复
三、物理备份
1、cp/tar/fsync
2、WiredTiger 热备份
3、恢复
四、快照备份 一、基本概述 MongoDB 是一种流行的 NoSQL 数据库它使用文档存储数据支持丰富的查询语言和索引功能。MongoDB 的设计目标是提供高性能、高可用性和易扩展性广泛应用于各种类型的应用程序中。然而任何数据库系统都有可能面临数据丢失的风险因此备份是确保数据安全和可恢复性的重要手段。 备份的重要性不言而喻它不仅可以保护数据免受硬件故障、软件错误或人为操作失误的影响还可以在灾难发生时快速恢复业务运营。对于 MongoDB 来说备份尤其重要因为它通常用于处理大量数据和高并发访问一旦出现问题可能会导致严重的业务中断和数据丢失。 关于 Mongodb 数据库备份可从逻辑备份、物理备份和快照备份三个方面进行介绍。
Database Layermongodump逻辑备份File System Layercp/tar、fsync物理备份Volume/Block Layerlvm snapshot、第三方快照驱动快照备份
1逻辑备份是通过导出数据库中的数据到一个文件或一组文件中来实现的。在 MongoDB 中可以使用 mongodump 工具来进行逻辑备份。mongodump 会将数据库中的每个集合导出为一个 BSON 文件同时还会生成一个元数据文件记录集合的名称和其他信息。 逻辑备份的优点是可以跨平台使用并且可以很容易地恢复到不同的 MongoDB 实例上。缺点是备份过程可能会影响数据库的性能并且在大型数据集上可能需要较长的时间来完成备份恢复时速度很慢特别是回放 oplog 时速度~非常~非常~非常~慢。
2物理备份则是直接复制数据库的文件系统包括数据文件、日志文件和配置文件等。在 MongoDB 中可直接拷贝文件系统内数据文件来实现物理备份的但是不支持热备份。有第三方厂商基于 MongoDB 存储引擎 WiredTiger 原生热备份进行定制支持热备份。 物理备份的优点是速度快因为它不需要遍历整个数据库来导出数据而是直接复制文件。此外物理备份通常可以在数据库运行时进行对性能的影响较小。缺点是物理备份可能无法跨平台使用因为不同操作系统的文件系统格式可能不同。另外如果数据库在备份过程中发生了变化那么备份的数据可能不是完全一致的所以备份过程中需要对数据库加锁避免数据写入。
3快照备份是一种结合了逻辑备份和物理备份特点的方法。它通过创建数据库的快照来实现备份这个快照包含了数据库在某个时间点的状态。在 MongoDB 中可以使用 LVMLogical Volume Manager或其他存储层的快照功能来实现快照备份。 快照备份的优点是可以提供几乎实时的备份因为快照的创建速度非常快。此外快照备份可以在不中断数据库服务的情况下进行。缺点是快照备份依赖于底层存储系统的支持不是所有的存储系统都支持快照功能。另外如果数据库在快照之后发生了更改那么这些更改不会反映在快照中。 二、逻辑备份 mongodump 是 mongo 集成的备份与恢复工具功能也是十分的强大其与 mongorestore 配合可以完成大多数场景的数据备份。不过在使用之前需要仔细的阅读相关文档并实际操作测试其功能特性。而且需要注意随着不同数据库的版本迭代该工具的一些功能也会随之变化需要考虑一些参数的兼容性和 json 版本的迭代。 使用 mongodump 可以对数据库进行全量备份与增量备份这个可以在网上搜到很多脚本例子。但其还是存在一些功能缺陷不过好在其在 github 上开放了源码golang用户可以基于其源码根据自己的需求进行修改。 该方案的一个不可忽略的缺点就是性能太低了远远不如物理备份。虽然可以备份的时候可以集合为单位进行多进程并发但对数据库的负载也随之增大。所以很多厂商在做灾备产品时都不会考虑它。
1、全量备份
1. 导出数据库 db1 中的集合 t1 至同目录下的dump文件夹下./mongodump --host 10.10.50.210 -u test -p testpw --authenticationDatabase admin -d db1 -c t12. 导出至指定同目录下自定义的文件夹./mongodump --host 10.10.50.210 -u test -p testpw --authenticationDatabase admin -d db1 -c t1 -o selfdir3。 以集合为单位将备份数据输出到 stdout实现流式备份./mongodump --host 10.10.50.210 -u test -p testpw --authenticationDatabase admin -d db1 -c t1 -o -
2、增量备份
需要数据库开启 oplog通过按时间导出 local.oplog.rs 中的 oplog 数据实现增量备份。
可以配合 query 进行数据过滤比如 时间戳、操作或数据空间的过滤。
./mongodump --host 10.10.50.210 -u test -p testpw --authenticationDatabase admin -d local -c oplog.rs --query {ts:{$gte:Timestamp(1660014692, 1)}, op:{$ne:n}}
3、恢复 恢复时需要使用 mongorestore 工具恢复增量数据时需要回放 oplog 日志。
# 恢复集合数据
mongorestore --host 10.10.50.210 -u test -p testpw --authenticationDatabase admin ./13-34/db1/t1.bson
# 回放日志
mongorestore --host 127.0.0.1:27017 --oplogReplay --dir deltaBK/ --oplogFile deltaBK/oplog.rs.bson 三、物理备份 物理备份目前看只支持全量备份。在物理备份期间需要加锁防止数据库数据写入。
1、cp/tar/fsync
# 1、加锁
db.fsyncLock();
# 2、执行备份操作
cp /usr/local/mongodb/data /backupdir/full
# 3、解锁
db.fsyncUnlock();
2、WiredTiger 热备份 Mongodb 原生数据库不支持物理热备份但是 WiredTiger 存储引擎是支持热备份的但是该存储引擎存在一个问题在热备份过程中若有数据写入磁盘空间会快速增长。MongoDB 的保守做法是不支持热备份。 很多第三方厂商例如 Percona MongoDB、阿里云 MongoDB基于 WiredTiger 存储引擎开源热备份进行了定制直接支持物理热备份。 3、恢复 恢复时就很简单了将原生文件拷贝到目标路径下重新编辑数据库配置文件重新拉起数据库。 若灾备环境是副本集群则需要进行如下设置。
# 副本集群下要调整数据库删除 local 数据库后重启并初始化副本集群
mongod --dbpath /data/db
rs1:PRIMARY use local
rs1:PRIMARY db.dropDatabase()
rs1:PRIMARY use admin
rs1:PRIMARY db.shutdownServer({force: true})mongod --dbpath /data/db --replSet replName
mongo
# 初始化副本集群
rs.initiate( {_id : replName,members: [ { _id : 0, host : host:port } ]
})
# 若还需要添加从节点则继续执行
rs.add( 10.90.9.101 : 27018 )
rs.add( 10.90.9.103 : 27018 )
四、快照备份 使用快照工具对数据库数据文件所在卷进行快照操作。下面以 LVM Snapshot 为例。除了本博客介绍的流程以外还可参考官方教程
使用文件系统Atlas 备份快照备份和恢复自管理部署 - MongoDB手册 v 8.0https://www.mongodb.com/zh-cn/docs/manual/tutorial/backup-with-filesystem-snapshots/#back-up-and-restore-using-lvm-on-linuxhttps://www.mongodb.com/zh-cn/docs/manual/tutorial/backup-with-filesystem-snapshots/#back-up-and-restore-using-lvm-on-linuxhttps://www.mongodb.com/zh-cn/docs/manual/tutorial/backup-with-filesystem-snapshots/#back-up-and-restore-using-lvm-on-linuxhttps://www.mongodb.com/zh-cn/docs/manual/tutorial/backup-with-filesystem-snapshots/#back-up-and-restore-using-lvm-on-linuxhttps://www.mongodb.com/zh-cn/docs/manual/tutorial/backup-with-filesystem-snapshots/#back-up-and-restore-using-lvm-on-linux LVM 快照是 Linux 系统中的一种数据备份技术用于在特定时间点对逻辑卷进行“瞬间影像”保存。它通过写时复制COW技术实现初始时几乎不占用额外空间仅记录少量元数据并与源逻辑卷共享数据块。当源逻辑卷中的数据发生变化时LVM会将原始数据块的内容复制到快照区域确保快照始终反映创建时刻的数据状态。这种机制使得快照能够高效利用存储空间同时保证数据的一致性和可追溯性。在实际应用中LVM快照常用于数据备份、恢复以及系统测试等场景。 关于快照的详细知识点可以参考之前写的博客。
快照技术的基本介绍-CSDN博客https://blog.csdn.net/qq_37437983/article/details/137657669?ops_request_misc%257B%2522request%255Fid%2522%253A%2522ce3dcb6c36e2f15652965d3136d5a96f%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_idce3dcb6c36e2f15652965d3136d5a96fbiz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-137657669-null-null.nonecaseutm_term%E5%BF%AB%E7%85%A7spm1018.2226.3001.4450https://blog.csdn.net/qq_37437983/article/details/137657669?ops_request_misc%257B%2522request%255Fid%2522%253A%2522ce3dcb6c36e2f15652965d3136d5a96f%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_idce3dcb6c36e2f15652965d3136d5a96fbiz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-137657669-null-null.nonecaseutm_term%E5%BF%AB%E7%85%A7spm1018.2226.3001.4450https://blog.csdn.net/qq_37437983/article/details/137657669?ops_request_misc%257B%2522request%255Fid%2522%253A%2522ce3dcb6c36e2f15652965d3136d5a96f%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_idce3dcb6c36e2f15652965d3136d5a96fbiz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-137657669-null-null.nonecaseutm_term%E5%BF%AB%E7%85%A7spm1018.2226.3001.4450https://blog.csdn.net/qq_37437983/article/details/137657669?ops_request_misc%257B%2522request%255Fid%2522%253A%2522ce3dcb6c36e2f15652965d3136d5a96f%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_idce3dcb6c36e2f15652965d3136d5a96fbiz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-137657669-null-null.nonecaseutm_term%E5%BF%AB%E7%85%A7spm1018.2226.3001.4450https://blog.csdn.net/qq_37437983/article/details/137657669?ops_request_misc%257B%2522request%255Fid%2522%253A%2522ce3dcb6c36e2f15652965d3136d5a96f%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_idce3dcb6c36e2f15652965d3136d5a96fbiz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-137657669-null-null.nonecaseutm_term%E5%BF%AB%E7%85%A7spm1018.2226.3001.4450 我需要备份的数据存放在 /usr/local/mongodb 目录下需要使用快照对其所在卷进行备份。 详细步骤如下所示需要注意目标目录空间需要充足需要可以完全存放数据库数据所在卷。做快照时 VG 需要有足够的剩余空间。
# 1、查看挂载目录分布可执行 df -f 或 mount 命令数据库数据存放在 /usr/local 下所以我们需要备份 /dev/mapper/centos-root 卷
[rootlocalhost ~] df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 6.1G 44G 13% /
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 13M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 170M 845M 17% /boot
/dev/mapper/centos-home 42G 37M 42G 1% /home
tmpfs 781M 12K 781M 1% /run/user/42
tmpfs 781M 0 781M 0% /run/user/0# 2、创建数据库数据所在 lv 的快照该快照随着数据库的写入会持续增长
[rootlocalhost ~] lvcreate --size 10GB --snapshot --name root-snap01 /dev/mapper/centos-rootLogical volume root-snap01 created.
# 查看 lv 列表
[rootlocalhost ~] lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Converthome centos -wi-ao---- 41.12groot centos owi-aos--- 50.00groot-snap01 centos swi-aos--- 10.00g root 7.76swap centos -wi-ao---- 7.88g# 3、备份卷数据快照关联的 lv 卷的全部数据不是快照数据本身是快照关联的卷的全部数据所以备份集占用的空间是该卷的大小
# 可压缩快照数据
[rootlocalhost ~] dd if/dev/mapper/centos-root--snap01 | gzip /home/mongodb_snap01.gz
# 或者 dd 将数据重定向到别的路径下
[rootlocalhost ~] dd if/dev/mapper/centos-root--snap01 of/root/bkdir/mongodb_snap01# 4、查看备份数据
[rootlocalhost mongo-dir] du -h /root/bkdir/mongodb_snap01
51G /root/bkdir/mongodb_snap01 恢复过程可参考官方流程。大致是先在目标机上创建 lv 卷注意不需要格式化直接将备份的数据卷文件写入创建的 lv 卷之后挂载到文件系统中访问重新配置数据库即可配置数据库的过程可参考上一章“物理备份”的恢复流程。
使用文件系统Atlas 备份快照备份和恢复自管理部署 - MongoDB手册 v 8.0https://www.mongodb.com/zh-cn/docs/manual/tutorial/backup-with-filesystem-snapshots/#restore-a-snapshothttps://www.mongodb.com/zh-cn/docs/manual/tutorial/backup-with-filesystem-snapshots/#restore-a-snapshothttps://www.mongodb.com/zh-cn/docs/manual/tutorial/backup-with-filesystem-snapshots/#restore-a-snapshothttps://www.mongodb.com/zh-cn/docs/manual/tutorial/backup-with-filesystem-snapshots/#restore-a-snapshothttps://www.mongodb.com/zh-cn/docs/manual/tutorial/backup-with-filesystem-snapshots/#restore-a-snapshothttps://www.mongodb.com/zh-cn/docs/manual/tutorial/backup-with-filesystem-snapshots/#restore-a-snapshothttps://www.mongodb.com/zh-cn/docs/manual/tutorial/backup-with-filesystem-snapshots/#restore-a-snapshot