[学习笔记]Rocket.Chat业务数据备份
Rocket.Chat 的业务数据主要存储于mongodb数据库的rocketchat
库中,聊天中通过发送文件功能产生的文件储存于/app/uploads
中(文件方式设置为"FileSystem"
),因此在对Rocket.Chat做数据移动或备份主要分为两步,数据库备份和文件备份。
前提
已在本地或docker中部署完成Rocket.Chat服务,部署方法请查看[学习笔记] Rocket.Chat 安装与设置启动项。
使用docker-compose方式部署时
- 确保mongodb暴露了端口以供宿主机访问。
- 确保宿主机的目录映射至rocketchat服务的
/app/uploads
目录,此目录应在后台管理已正确设置
docker-compose.yml
文档中rocketchat和mongo部分的内容应如下
1 | rocketchat: |
1 | mongo: |
准备工作
我们可以在服务宿主机中执行备份(本地备份),或者在远程计算机中执行备份(异地备份)
安装 mongodb-org-tools
工具,我们要用的是数据库备份mongodump
和以及恢复mongorestore
工具
详情请查看官网或教程
1 | cd /etc/yum.repos.d |
1 | nano mongodb-org-4.0.repo |
1 | [mongodb] |
运行安装命令
1 | yum install mongodb-org-tools |
备份
数据库备份
运行下列命令进行备份
1 | mongodump -d="rocketchat" --gzip -o "/home/xamarin/dump" |
等待备份完成,打印如下
1 | 2023-02-21T03:07:23.140+0000 writing rocketchat.users to |
此时备份文件将在/home/xamarin/dump
目录下
在异地备份时可以使用-h
和 -port
指定服务器地址
1 | mongodump -h="<数据库服务器地址>" --port="27017" -d="rocketchat" --gzip -o "/home/xamarin/dump" |
文件备份
前往已映射到宿主机的uploads
所在目录,此处以/home/xamarin
为例
1 | cd /home/xamarin |
添加压缩文件和快照文件,并保存在/home/xamarin/backups
下
1 | tar -g /home/xamarin/uploads-snapshot -zcvf /home/xamarin/uploads-full.tar.gz /home/xamarin/backups/uploads/ |
还原
数据库还原
运行如下命令进行mongodb数据库还原
1 | mongorestore --gzip --drop --dir="/home/xamarin/backups/mongodb/dump/gzip/" |
在异地还原时可以使用 -h
和 -port
指定服务器地址
1 | mongorestore -h="<数据库服务器地址>" --port="27017" --gzip --drop --dir="/home/xamarin/backups/mongodb/dump/gzip/" |
文件还原
前往uploads-full.tar.gz
备份文件所在目录
1 | cd /home/xamarin/backups/uploads/ |
运行解压缩文件
1 | tar -g uploads-snapshot -zxvf uploads-full.tar.gz -C /home/xamarin |
打开Web端,观察到业务数据已悉数恢复
Troubleshooting
在还原过程中若出现Unrecognized field 'snapshot'
字样如下
1 | 2023-02-21T14:06:07.022+0800 Failed: error writing data for collection `rocketchat.users` to disk: error reading collection: Failed to parse: { find: "users", skip: 0, snapshot: true, $readPreference: { mode: "secondaryPreferred" }, $db: "rocketchat" }. Unrecognized field 'snapshot'. |
请确保备份和还原的工具版本一致,使用--version
参数查看 mongodump
或 mongorestore
版本
1 | mongodump --version |
[学习笔记]Rocket.Chat业务数据备份