搜索 K
主题
主题
受控内容
该页面需要完成登录认证后才能查看。
智档宝的备份迁移不是复制一个程序目录。一次可回滚的迁移至少要同时处理业务数据库、对象文件、搜索索引、配置文件、版本信息和服务清单。
这篇文档面向实施、运维和研发,用于现场升级、换机、系统重装、Windows / Linux 形态切换和老现场迁移。

| 场景 | 目标 |
|---|---|
| 升级前 | 保留升级前数据和版本,升级失败时能回退 |
| 换机前 | 把旧机器上的业务数据、文件、配置和版本迁到新机器 |
| 磁盘风险操作前 | 避免分区、扩容、重装、杀毒误删导致数据不可恢复 |
| Windows / Linux 形态切换 | 确认数据对象、服务组件和路径差异 |
| 现场重装前 | 先拿到可验证备份,再处理系统环境 |
备份迁移的核心判断是:新环境能否复现旧环境的业务状态,并且旧环境还能在回滚窗口内重新接管。
| 对象 | 常见位置 / 组件 | 备份方式 | 影响 |
|---|---|---|---|
| 业务数据库 | MySQL,默认库 tdpub | mysqldump 导出 SQL | 登录、档案、库房、权限、流程、配置 |
| 对象文件 | Minio bucket fit 或本地文件目录 | Minio mirror / 停写后复制数据目录 | 附件、扫描件、图片、电子档案 |
| 搜索索引 | Elasticsearch | 快照或重建前保留原索引数据 | 全文搜索、关键字检索 |
| 时序数据 | InfluxDB | 导出或复制数据目录 | 温湿度、环境控制和设备历史曲线 |
| 消息与设备配置 | EMQX 配置、用户、规则、topic 约定 | 复制配置和数据目录 | RFID、环境控制、设备联动 |
| 运行配置 | config.yaml、.env、docker-compose.yml、服务脚本 | 复制配置文件和安装目录 | 端口、路径、数据库连接、现场参数 |
| 程序版本 | 前端 hash、后端 hash、包名、README、安装脚本 | 记录包名和 git hash | 追溯代码、定位问题、复现版本 |
| 本地服务 | 打印、客户端、监控、门口机、设备接入程序 | 复制配置、安装包和服务信息 | 打印、预览、RFID、现场设备 |
只备份程序目录通常不够。程序可以从发布包恢复,业务数据和现场文件丢失后很难重建。
下面命令参考 常用维护命令 的写法。默认值按智档宝常见现场编写,执行前先确认实际账号、端口、容器名、安装目录和部署形态。
常见默认值:
| 服务 | 常见默认值 |
|---|---|
| MySQL | 用户 root,密码 123456,库名 tdpub,Linux Docker 端口常见 3307,Windows 常见 3306 或现场配置端口 |
| Minio | endpoint http://127.0.0.1:9000,用户 admin,密码 admin123456,bucket fit |
| InfluxDB | org fit,bucket sdv,token abc123123123abc,端口 8086 |
| EMQX | Dashboard admin / public,MQTT 常见匿名连接 |
先创建带时间戳的备份目录:
TS=$(date +%Y%m%d-%H%M%S)
BACKUP_DIR="$PWD/sdv-backup-$TS"
mkdir -p "$BACKUP_DIR"/{mysql,minio,influxdb,config,versions,logs}$TS = Get-Date -Format 'yyyyMMdd-HHmmss'
$BACKUP_DIR = Join-Path (Get-Location) "sdv-backup-$TS"
New-Item -ItemType Directory -Force `
"$BACKUP_DIR\mysql", "$BACKUP_DIR\minio", "$BACKUP_DIR\influxdb", "$BACKUP_DIR\config", "$BACKUP_DIR\versions", "$BACKUP_DIR\logs" | Out-Null备份 MySQL:
mysqldump \
-h 127.0.0.1 \
-P 3307 \
-uroot \
-p123456 \
--single-transaction \
--routines \
--triggers \
--events \
--default-character-set=utf8mb4 \
tdpub > "$BACKUP_DIR/mysql/tdpub.sql".\mysqldump.exe `
-h 127.0.0.1 `
-P 3306 `
-uroot `
-p123456 `
--single-transaction `
--routines `
--triggers `
--events `
--default-character-set=utf8mb4 `
tdpub | Out-File -Encoding utf8 "$BACKUP_DIR\mysql\tdpub.sql"恢复 MySQL:
mysql \
-h 127.0.0.1 \
-P 3307 \
-uroot \
-p123456 \
--default-character-set=utf8mb4 \
tdpub < "$BACKUP_DIR/mysql/tdpub.sql"Get-Content "$BACKUP_DIR\mysql\tdpub.sql" `
| .\mysql.exe -h 127.0.0.1 -P 3306 -uroot -p123456 --default-character-set=utf8mb4 tdpub备份 Minio bucket:
mc alias set sdv-minio http://127.0.0.1:9000 admin admin123456
mc mirror --overwrite sdv-minio/fit "$BACKUP_DIR/minio/fit".\mc.exe alias set sdv-minio http://127.0.0.1:9000 admin admin123456
.\mc.exe mirror --overwrite sdv-minio/fit "$BACKUP_DIR\minio\fit"恢复 Minio bucket:
mc mirror --overwrite "$BACKUP_DIR/minio/fit" sdv-minio/fit.\mc.exe mirror --overwrite "$BACKUP_DIR\minio\fit" sdv-minio/fit备份 InfluxDB:
influx backup \
--host http://127.0.0.1:8086 \
--bucket sdv \
--org fit \
--token abc123123123abc \
"$BACKUP_DIR/influxdb".\influx.exe backup `
--host http://127.0.0.1:8086 `
--bucket sdv `
--org fit `
--token abc123123123abc `
"$BACKUP_DIR\influxdb"压缩备份目录:
tar -czf "${BACKUP_DIR}.tar.gz" -C "$(dirname "$BACKUP_DIR")" "$(basename "$BACKUP_DIR")"
sha256sum "${BACKUP_DIR}.tar.gz" > "${BACKUP_DIR}.tar.gz.sha256"Compress-Archive -Path "$BACKUP_DIR" -DestinationPath "$BACKUP_DIR.zip" -Force
Get-FileHash "$BACKUP_DIR.zip" -Algorithm SHA256 | Out-File "$BACKUP_DIR.zip.sha256.txt"恢复类命令会覆盖目标数据。恢复前先停止业务写入,并再次备份当前新环境数据。
Linux Docker 形态优先参考 4-打包分发 里的服务表。容器名按现场调整,常见为 sdv-mysql、sdv-minio、sdv-influxdb、sdv-emqx、sdv-es。
记录 Docker 状态和版本:
docker compose ps > "$BACKUP_DIR/versions/docker-compose-ps.txt"
docker images > "$BACKUP_DIR/versions/docker-images.txt"
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Ports}}' > "$BACKUP_DIR/versions/docker-ps.txt"
cp docker-compose.yml "$BACKUP_DIR/config/" 2>/dev/null || true
cp .env "$BACKUP_DIR/config/" 2>/dev/null || true容器内执行 MySQL 备份:
docker exec sdv-mysql sh -c 'mysqldump -uroot -p123456 --single-transaction --routines --triggers --events --default-character-set=utf8mb4 tdpub' \
> "$BACKUP_DIR/mysql/tdpub.sql"容器内恢复 MySQL:
docker exec -i sdv-mysql sh -c 'mysql -uroot -p123456 --default-character-set=utf8mb4 tdpub' \
< "$BACKUP_DIR/mysql/tdpub.sql"如果宿主机没有 influx 命令,但容器内有,可以在容器内备份后复制出来:
docker exec sdv-influxdb influx backup \
--bucket sdv \
--org fit \
--token abc123123123abc \
/tmp/influx-backup
docker cp sdv-influxdb:/tmp/influx-backup "$BACKUP_DIR/influxdb"
docker exec sdv-influxdb rm -rf /tmp/influx-backup备份配置和安装脚本:
cp -a ./config "$BACKUP_DIR/config/" 2>/dev/null || true
cp -a ./scripts "$BACKUP_DIR/config/" 2>/dev/null || true
cp -a ./install*.sh "$BACKUP_DIR/config/" 2>/dev/null || true
cp -a ./README* "$BACKUP_DIR/versions/" 2>/dev/null || true如果现场没有配置 mc,Minio、Elasticsearch、InfluxDB、EMQX 这类数据目录只能在维护窗口复制实际 volume 目录。不要在业务持续上传时直接复制对象目录,否则容易出现数据库记录和文件不一致。
Windows 形态优先参考 4-打包分发 里的服务表。备份前先通过 serviceMonitor.exe、services.msc 或安装脚本停止智档宝和依赖服务,避免文件复制过程中仍在写入。
建议先进入运行目录,常见为 sdv-test:
cd C:\Users\pc\Documents\sdv-test记录 Windows 服务列表:
sc.exe query state= all > "$BACKUP_DIR\versions\service-list.txt"
Get-Service | Out-File "$BACKUP_DIR\versions\powershell-service-list.txt"备份运行目录里的配置、脚本和本地工具:
Copy-Item .\SDV\config -Destination "$BACKUP_DIR\config\SDV-config" -Recurse -Force -ErrorAction SilentlyContinue
Copy-Item .\*.bat -Destination "$BACKUP_DIR\config\" -Force -ErrorAction SilentlyContinue
Copy-Item .\DEPLOY.md -Destination "$BACKUP_DIR\versions\" -Force -ErrorAction SilentlyContinue
Copy-Item .\serviceMonitor.exe -Destination "$BACKUP_DIR\versions\" -Force -ErrorAction SilentlyContinue需要整体保留现场运行目录时,可以复制或压缩整个安装目录。目录体积通常较大,里面可能包含数据库和对象文件,复制前必须停止服务。
Compress-Archive -Path .\* -DestinationPath "$BACKUP_DIR\windows-runtime.zip" -ForceWindows 迁移时要特别注意服务路径。新机器上的盘符、目录名、空格和权限变化,都会导致服务注册成功但实际启动失败。
迁移不是“复制完成就上线”,而是“验证通过后切换”。切换前必须明确旧环境能否快速恢复接管。
| 能力 | 验证动作 | 通过标准 |
|---|---|---|
| 登录和权限 | 使用管理员和普通用户登录 | 能登录,菜单和库房权限符合旧环境 |
| 档案查询 | 查询旧档案、库房、位置和借阅状态 | 关键数据数量和状态一致 |
| 文件预览 | 打开历史附件、扫描件和图片 | 能预览、下载,路径不报错 |
| 文件上传 | 新上传一个测试文件 | 数据库有记录,对象存储有文件 |
| 全文搜索 | 搜索历史关键字和新文件 | 旧索引可用或重建后可搜到 |
| 环境控制历史 | 查看温湿度或设备历史曲线 | 历史数据连续,时间范围正确 |
| RFID / 设备 | 执行读卡、盘点、门口机或设备联动 | MQTT、设备程序和业务状态一致 |
| 打印 | 打印测试单据或标签 | 模板、打印机和本地服务正常 |
| 版本追溯 | 核对前端 hash、后端 hash 和包名 | 能反查到对应仓库和提交 |
验证结果建议写进现场记录。失败项要记录时间、现象、日志位置和当时使用的备份包。
| 问题 | 常见原因 | 处理方向 |
|---|---|---|
| 复制了程序但登录后没有数据 | 只复制了前后端程序,没有恢复 MySQL | 导入 tdpub 数据库并核对配置 |
| 档案能查到但文件打不开 | Minio / 文件目录未迁移,或 bucket / 路径不一致 | 核对对象文件、bucket、后端文件配置 |
| 文件能打开但搜不到 | Elasticsearch 未恢复或未重建索引 | 恢复索引或执行重建 |
| Windows 服务注册后启动失败 | 服务路径、权限、端口或依赖目录变化 | 查 services.msc、事件查看器和服务脚本 |
| Linux 容器启动但数据是空的 | volume 没挂到旧数据目录,或恢复到了错误路径 | 查 docker inspect、compose volume 和实际目录 |
| 设备业务正常页面不刷新 | MQTT / EMQX、设备接入程序或前端缓存异常 | 查 EMQX、设备日志、浏览器缓存和接口返回 |
备份迁移的文档粒度应该比安装文档更细,因为它处理的是现场已有数据。新装失败可以重装,迁移失败可能直接影响业务连续性。