MongoDB - 创建备份
MongoDB - 备份与恢复策略
Section titled “MongoDB - 备份与恢复策略”创建备份是任何数据库的关键管理任务。本章探讨了备份和恢复 MongoDB 数据的现代方法,从用于本地开发的命令行工具到用于生产环境的托管云解决方案。
现代方法:MongoDB Atlas(云备份)
Section titled “现代方法:MongoDB Atlas(云备份)”对于生产环境,推荐的最佳实践是使用像 MongoDB Atlas 这样的托管服务。Atlas 提供自动化的连续备份和时间点恢复(point-in-time recovery)功能。这消除了自行编写备份脚本所带来的手动操作和潜在错误。
Atlas 备份的主要优势:
Section titled “Atlas 备份的主要优势:”- 完全托管: 备份自动进行计划和管理。
- 持续备份与时间点恢复: 可以在保留期内的任何特定时间点恢复数据库。
- 可查询快照: 您无需完全恢复即可直接查询备份快照,这对于数据探索或审计非常有用。
- 地理分布式: 备份存储在您选择的云区域,确保灾难恢复。
如果您正在运行生产应用程序,强烈建议迁移到 Atlas,以利用其包括备份在内的运营优势。
本地/手动方法:mongodump 和 mongorestore
Section titled “本地/手动方法:mongodump 和 mongorestore”对于本地开发、环境间数据迁移,或无法使用托管服务的情况,MongoDB 提供了 mongodump 和 mongorestore 命令行工具。它们是 MongoDB 数据库工具(MongoDB Database Tools)的一部分,可能需要与 MongoDB 服务器分开安装。
使用 mongodump 创建备份
Section titled “使用 mongodump 创建备份”mongodump 将数据库内容导出为 BSON 文件格式,并创建一个包含导出数据的目录。现代且最可靠的连接方式是使用连接字符串 URI(Uniform Resource Identifier)。
mongodump --uri="<connection-string>" --out="<output-directory>"示例:备份特定数据库
Section titled “示例:备份特定数据库”此命令将本地 MongoDB 实例中的 inventory 数据库备份到名为 backup_dir 的目录中。
# 此命令将在当前位置创建一个名为 'backup_dir' 的目录。
mongodump --uri="mongodb://localhost:27017/inventory" --out="backup_dir"
# 示例输出:# 2023-07-06T10:30:00.123+00:00 正在将 inventory.products 写入 backup_dir/inventory/products.bson# 2023-07-06T10:30:00.125+00:00 inventory.products 导出完成 (1500 文档)# 2023-07-06T10:30:00.125+00:00 有关集合元数据,请参阅 backup_dir/inventory/products.metadata.json使用 mongorestore 恢复数据
Section titled “使用 mongorestore 恢复数据”mongorestore 可以读取 mongodump 的输出并将其恢复到正在运行的 MongoDB 实例中。
要恢复数据,您需要将 mongorestore 指向由 mongodump 创建的备份目录。
mongorestore --uri="<connection-string>" <backup-directory>示例:恢复到新数据库
Section titled “示例:恢复到新数据库”此命令将 backup_dir 中的数据恢复到本地 MongoDB 实例中名为 inventory_restored 的新数据库。
# --nsFrom 和 --nsTo 选项允许在恢复期间重新映射数据库/集合名称。mongorestore --uri="mongodb://localhost:27017" --nsFrom="inventory.*" --nsTo="inventory_restored.*" backup_dir
# 示例输出:# 2023-07-06T10:35:00.200+00:00 在此用例中,--db 和 --collection 标志已被废弃;请改用 --nsInclude# 2023-07-06T10:35:00.250+00:00 正在准备要恢复的集合# 2023-07-06T10:35:00.300+00:00 正在从 backup_dir/inventory/products.metadata.json 读取 inventory_restored.products 的元数据# 2023-07-06T10:35:00.500+00:00 正在从 backup_dir/inventory/products.bson 恢复 inventory_restored.products# 2023-07-06T10:35:01.000+00:00 inventory_restored.products 恢复完成 (1500 文档)# 2023-07-06T10:35:01.000+00:00 成功恢复 1500 个文档。0 个文档恢复失败。mongodump 的最佳实践
Section titled “mongodump 的最佳实践”- 使用
--archive和--gzip: 对于大型数据库,您可以通过使用--archive标志来流式传输输出,从而避免将文件写入临时目录。将其与--gzip结合使用可以在备份时即时压缩数据。 - 示例:
mongodump --uri="..." --archive --gzip > my_backup.gz - 从归档文件恢复:
mongorestore --uri="..." --archive --gzip < my_backup.gz - 定期测试备份: 如果备份无法恢复,那么它是无用的。定期在测试环境(staging environment)中练习恢复备份,以确保其完整性。
- 包含身份验证: 对于需要身份验证的数据库,请始终使用包含用户名和密码的连接字符串 URI,以确保工具具有正确的权限。