如何用 mongodump 与 mongorestore 备份和恢复 TradingAgents-CN 的 MongoDB 数据?
【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN
TradingAgents-CN 使用 MongoDB 作为主数据库,存储行情、新闻、分析结果、系统配置等核心数据。当数据库数据量较大(文档建议以 100MB 为界)时,官方指南建议改用 MongoDB 原生命令行工具mongodump和mongorestore完成备份与还原,而不是走 Web 界面:命令行直接操作 BSON 格式并支持 gzip 压缩,文档给出的 500MB 数据库性能对比中,mongodump(BSON + gzip)备份约 30 秒、文件约 50MB,而 Web 界面(JSON)约需 10 分钟、文件 500MB(该表格为文档示例数据,不是固定预期)。本文基于 数据库备份与还原指南 给出完整的操作路径:安装工具、执行备份、验证备份、还原数据,以及定期自动备份和迁移场景。
安装 MongoDB Database Tools
mongodump、mongorestore属于 MongoDB Database Tools,需要单独安装。安装方式按平台选择:
Windows:从 MongoDB 官方 Database Tools 下载页下载,解压到任意目录(文档示例路径C:\Program Files\MongoDB\Tools\100\bin),然后把该目录加入系统 PATH 环境变量。
Linux(Ubuntu/Debian):
sudo apt-get install mongodb-database-toolsmacOS:
brew install mongodb-database-tools安装后验证:
mongodump --version mongorestore --version两条命令都能打印版本号,说明工具已就绪。
确认连接信息与数据库名
备份命令需要知道两件事:MongoDB 的连接串,以及要备份的数据库名。
- TradingAgents-CN 的 Docker 部署中,MongoDB 使用
mongo:4.4镜像,并将宿主机 27017 端口映射到容器,认证凭据在 docker-compose.yml 中定义为admin/tradingagents123。 - 数据库名以你实际使用的 compose 文件为准:docker-compose.yml 中
MONGO_INITDB_DATABASE为tradingagents,而 docker-compose.hub.nginx.yml 中为tradingagentscn。备份命令里的--db参数和连接串中的库名要与实际部署一致,不要照抄示例中的值而不核对。
指南中的无认证示例连接串是mongodb://localhost:27017;Docker 部署默认启用了 root 用户认证,应使用带认证的连接串形式(见下节)。
执行备份
基本全量备份
备份整个数据库:
mongodump \ --uri="mongodb://localhost:27017" \ --db=tradingagents \ --out=./backup \ --gzip参数说明(来自文档):
--uri:MongoDB 连接字符串--db:数据库名称--out:备份输出目录--gzip:启用 gzip 压缩(推荐)
带认证的备份
你的 MongoDB 启用了认证时(Docker 默认部署即是),把用户名、密码写进连接串:
mongodump \ --uri="mongodb://username:password@localhost:27017/tradingagents?authSource=admin" \ --out=./backup \ --gzip其中username、password需替换为你部署的实际凭据,Docker 部署即 docker-compose.yml 中的admin/tradingagents123,库名按 compose 文件替换为tradingagents或tradingagentscn。
只备份指定集合
只备份某个集合,例如配置集合:
mongodump \ --uri="mongodb://localhost:27017" \ --db=tradingagents \ --collection=system_configs \ --out=./backup \ --gzip一次备份多个集合用--nsInclude(可重复出现),例如只备份配置相关集合:
mongodump \ --uri="mongodb://localhost:27017" \ --db=tradingagents \ --out=./backup_config \ --gzip \ --nsInclude="tradingagents.system_configs" \ --nsInclude="tradingagents.llm_providers" \ --nsInclude="tradingagents.market_categories" \ --nsInclude="tradingagents.datasource_groupings"反过来,排除大数据量集合(如行情集合)用--nsExclude:
mongodump \ --uri="mongodb://localhost:27017" \ --db=tradingagents \ --out=./backup \ --gzip \ --nsExclude="tradingagents.market_quotes" \ --nsExclude="tradingagents.stock_basic_info"备份远程服务器上的数据库,只需把连接串指向远端地址,例如mongodb://username:password@remote-server:27017/tradingagents,其余参数不变。
备份过程不会锁库:mongodump使用快照读取,不阻塞写操作(文档 FAQ 明确说明)。
验证备份结果
文档给出三种验证方式:
方法 1:查看备份文件大小
du -sh backup/tradingagents/方法 2:用bsondump抽查集合内容
# 查看备份包含的集合 ls -lh backup/tradingagents/ # 抽查某个集合的文档 bsondump backup/tradingagents/system_configs.bson.gz | head -n 10方法 3:还原到测试数据库做完整校验
mongorestore \ --uri="mongodb://localhost:27017" \ --db=tradingagents_test \ --gzip \ ./backup/tradingagents注意这里--db指向一个独立的tradingagents_test库,不影响生产数据。还原到测试库能跑通,即可确认备份文件可用。
还原数据
基本还原与 --drop 的区别
还原整个数据库:
mongorestore \ --uri="mongodb://localhost:27017" \ --db=tradingagents \ --gzip \ ./backup/tradingagents文档对此操作有明确警告:还原会覆盖现有数据。如果希望还原前先清空目标集合,使用--drop:
mongorestore \ --uri="mongodb://localhost:27017" \ --db=tradingagents \ --drop \ --gzip \ ./backup/tradingagents--drop的含义是还原前先删除现有集合,两者效果都是破坏性的,执行前请先确认目标库可以覆盖,或再备份一次当前数据。
还原到不同数据库或单个集合
验证备份、或在测试环境复现数据时,把备份还原到其他库:
mongorestore \ --uri="mongodb://localhost:27017" \ --db=tradingagents_test \ --gzip \ ./backup/tradingagents只还原一个集合,直接指定对应的.bson.gz文件:
mongorestore \ --uri="mongodb://localhost:27017" \ --db=tradingagents \ --collection=system_configs \ --gzip \ ./backup/tradingagents/system_configs.bson.gz不覆盖方式合并还原(索引已存在时不重复建索引):
mongorestore \ --uri="mongodb://localhost:27017" \ --db=tradingagents \ --gzip \ --noIndexRestore \ ./backup/tradingagents--noIndexRestore表示不还原索引(适用于索引已存在的情况)。
灾难恢复流程
文档给出的恢复步骤是:先停应用、用--drop还原最近一次备份、再重启应用:
# 1. 停止应用 docker-compose stop web # 2. 删除现有数据并还原 mongorestore \ --uri="mongodb://localhost:27017" \ --db=tradingagents \ --drop \ --gzip \ ./backup/tradingagents # 3. 重启应用 docker-compose start web需要说明:仓库当前的 docker-compose.yml 与 docker-compose.hub.nginx.yml 中后端服务的名字是backend(前端为frontend),没有名为web的服务,文档示例中的web需按你实际部署的 compose 文件替换为对应服务名。
可选:设置每日自动备份
如果希望备份定期执行,文档提供了一个 Linux 备份脚本示例,保存为backup.sh:
#!/bin/bash # 配置 BACKUP_DIR="/data/backups/tradingagents" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_PATH="$BACKUP_DIR/backup_$DATE" # 创建备份目录 mkdir -p "$BACKUP_PATH" # 执行备份 mongodump \ --uri="mongodb://localhost:27017" \ --db=tradingagents \ --out="$BACKUP_PATH" \ --gzip # 删除 7 天前的备份 find "$BACKUP_DIR" -type d -name "backup_*" -mtime +7 -exec rm -rf {} \; echo "✅ 备份完成: $BACKUP_PATH"副作用说明:脚本中find ... -exec rm -rf一行会永久删除BACKUP_DIR下修改时间超过 7 天的备份目录,请确认 7 天的保留期符合你的要求后再启用;同时脚本内的连接串和库名要按实际部署替换。然后加入 crontab 每天凌晨 2 点执行(/path/to/backup.sh替换为脚本实际路径):
0 2 * * * /path/to/backup.sh >> /var/log/tradingagents_backup.log 2>&1可选:迁移到新服务器
文档给出的迁移路径是:旧服务器mongodump→ 打包 → 传输 → 解压 → 新服务器mongorestore:
# 1. 旧服务器备份 mongodump \ --uri="mongodb://localhost:27017" \ --db=tradingagents \ --out=./backup \ --gzip # 2. 打包 tar -czf tradingagents_backup.tar.gz backup/ # 3. 传输(user@new-server 替换为目标服务器) scp tradingagents_backup.tar.gz user@new-server:/tmp/ # 4. 新服务器解压 cd /tmp tar -xzf tradingagents_backup.tar.gz # 5. 新服务器还原 mongorestore \ --uri="mongodb://localhost:27017" \ --db=tradingagents \ --gzip \ ./backup/tradingagents常见问题与限制
- 备份文件可以跨 MongoDB 版本使用吗?可以,但文档建议:3.x → 4.x 兼容,4.x → 5.x 兼容,跨大版本(如 3.x → 5.x)建议先测试。
- 备份会锁库吗?不会,
mongodump快照读取不阻塞写操作。 - 版本对应关系:TradingAgents-CN 的 Docker 部署使用
mongo:4.4镜像,落在文档"4.x → 5.x 兼容"范围内。 - 安全提示:文档明确提醒备份文件包含敏感数据(配置、Token 等),需要妥善保管。
- 如果只是想清理数据卷前留一手备份,数据卷分析文档 中另有一个在容器内执行
docker exec tradingagents-mongodb mongodump --out /tmp/backup再用docker cp拷出的做法,适合没有宿主机 mongodump 的场景。
参考
- 数据库备份与还原指南:本文所有命令与参数的来源文档
- docker-compose.yml、docker-compose.hub.nginx.yml:确认连接凭据与实际数据库名
【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考