持久化边界
真正持久化的目录
当前 deploy.sh 只挂载两个业务目录:
| 宿主机路径 | 容器路径 | 说明 |
|---|---|---|
${DCMP_DATA_ROOT}/dbdata | /usr/dcmp/dbdata | GreatSQL 数据文件 |
${DCMP_DATA_ROOT}/dbfiles | /usr/dcmp/dbfiles | GreatSQL 运行文件及首次初始化标记 |
默认 DCMP_DATA_ROOT=/usr/dcmp,所以宿主机实际路径为:
/usr/dcmp/dbdata
/usr/dcmp/dbfiles
系统挂载 /sys/fs/cgroup:/sys/fs/cgroup:ro 只用于 systemd 容器运行,不是业务数据持久化。
确认实际挂载:
docker inspect dcmp --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'
预期只有 cgroup、dbdata 和 dbfiles 三条挂载。
当前不持久化的内容
以下内容位于容器可写层,停止后再次启动同一容器时仍存在,但删除并重新创建容器后会丢失:
| 路径 | 说明 |
|---|---|
/usr/dcmp/data/elasticsearch | Elasticsearch 索引 |
/usr/dcmp/upload | 上传文件 |
/usr/dcmp/logs | 业务日志 |
/usr/dcmp/dcmp-agent/logs | Agent 日志 |
/usr/dcmp/cache | 缓存 |
/usr/dcmp/dbbackup | 容器内数据库备份 |
/usr/dcmp/volume_data | 业务卷数据 |
/usr/dcmp/dcmp-agent/config.json | Agent 现场修改 |
因此必须注意:
bash start.sh、bash stop.sh只操作同一个容器,不会删除上述内容bash deploy.sh会执行docker rm -f并重新创建容器,上述内容会随旧容器一起删除- 换镜像或重新部署前,如果这些内容需要保留,必须先单独导出
backup.sh只备份 dbdata 和 dbfiles,不会备份 ES、upload、日志、Agent 配置或/usr/dcmp/dbbackup
这是当前交付设计,不要再按旧手册把整个 /usr/dcmp 或九个子目录理解为已持久化。
重新部署前导出非持久化内容
在维护窗口先受控停止容器,再按现场需求复制。示例:
cd <delivery-dir>
bash stop.sh
EXPORT=/opt/dcmp-container-export-$(date +%Y%m%d-%H%M%S)
mkdir -p "$EXPORT"
docker cp dcmp:/usr/dcmp/upload "$EXPORT/upload"
docker cp dcmp:/usr/dcmp/dcmp-agent/config.json "$EXPORT/config.json"
docker cp dcmp:/usr/dcmp/dbbackup "$EXPORT/dbbackup"
docker cp dcmp:/usr/dcmp/logs "$EXPORT/logs"
docker cp dcmp:/usr/dcmp/dcmp-agent/logs "$EXPORT/agent-logs"
只有确实需要时才导出 ES 数据目录。直接复制运行中的 ES 数据不安全,应先停止容器;恢复 ES 数据也必须保证版本、权限和目录结构一致。