备份 docker 数据库 -dump

前提说明:

  • A 环境:我在阿里云上部署的 fastgpt,需要挪到 B 环境。
  • B 环境:是新环境,而且特殊一点的是,NAS(群晖或者 QNAP)部署了 fastgpt,mongo 必须改成 4.2 或者 4.4 版本(其实云端更方便,支持 fastgpt mongo 默认版本)
  • C 环境:妥善考虑,用本地电脑作为 C 环境过渡,保存相关文件并分离操作

1. 进入 docker mongo 【A 环境】

docker exec -it mongo sh
mongo -u 'username' -p 'password'
>> show dbs
看到fastgpt数据库,以及其它几个,确定下导出数据库名称
准备:

检查数据库,容器和宿主机都创建一下 backup 目录 【A 环境 + C 环境】

【A环境】
容器:(先进入docker)
mkdir -p /data/backup

如果没同步到本地,手动建一下,配合docker cp 把文件拷到本地用
【C环境】宿主机 
到fastgpt目录,进入mongo目录,有data目录,下面建backup
mkdir -p /fastgpt/data/backup

2.mongodump 导出 【A 环境】

2.1 导出 使用 mongodump 在源头容器中导出数据文件

导出的文件是在容器的/data/backup 中,因为 fastgpt 配置文件已经建立了 data 的持久化,所以你去本地 fast/mongo/data 应该就能看到这个导出的目录:backup,里面有文件,

docker exec -it mongo bash -c "mongodump --db fastgpt -u 'username' -p 'password' --authenticationDatabase admin --out /data/backup"
mongodump --host 127.0.0.1:27017 --db fastgpt -u "username" -p "password" --authenticationDatabase admin --out /data/backup

补充:手工导出到宿主机【A 环境】

当然你也可以使用:

docker cp mongo:/data/backup  <C环境fastgpt目录:/fastgpt/data/backup>

稳妥起见,压缩这个导出文件目录,并下载到本地或者服务器【A 环境 -> C 环境】

先进入源头系统的 fastgpt/mongo/data 目录

cd /usr/fastgpt/mongo/data   【A环境】

#执行,压缩文件
`tar -czvf ../fastgpt-mongo-backup-$(date +%Y-%m-%d).tar.gz ./  【A环境】

#下载到本地 【A环境-》C环境】

scp  -i /Users/qinxiaoqiang/Downloads/aliyunsamqin.pem root@101.133.158.80:/usr/fastgpt/mongo/data/backup/backup/fastgptbackup-2024-05-03.tar.gz /Users/qinxiaoqiang/Downloads/fastgpt2。

2.2 检查 【C 环境】

导出后在宿主机目录解压缩,放在一个置顶目录比如. < user/fastgpt/mongobackup/data>

tar -xvzf fastgptbackup-2024-05-03.tar.gz -C user/fastgpt/mongobackup/data
解压缩后里面是bson文件

image

3 上传准备:【C 环境】进入宿主机 fastgpt 安装目录

3.3.1 上传到新系统所在的 docker 容器里备用 【C 环境】
docker cp user/fastgpt/mongobackup/data mongo:/tmp/backup

3.3.2 清空 docker compose 运行后建立的 mongo/data 持久化目录 【C 环境】

这样会把 docker 容器的 mongo/db 目录也清空了,否则 mongorestore 导入会报错

cd /fastgpt安装目录/mongo/data
rm -rf *

4.恢复: mongorestore 恢复 [C 环境】

简单一点退回到本地,用 docker 命令一键导入,当然你也可以在容器里操作

docker exec -it mongo mongorestore -u "username" -p "password" --authenticationDatabase admin /tmp/backup/ --db fastgpt

5.重启容器 【C 环境】

docker compose restart
docker logs -f mongo 

6. 登陆:

基本就能看到原来的数据库内容导入系统了

image

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    483 引用 • 905 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...