文档目录

持久化边界

真正持久化的目录

当前 deploy.sh 只挂载两个业务目录:

宿主机路径容器路径说明
${DCMP_DATA_ROOT}/dbdata/usr/dcmp/dbdataGreatSQL 数据文件
${DCMP_DATA_ROOT}/dbfiles/usr/dcmp/dbfilesGreatSQL 运行文件及首次初始化标记

默认 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/elasticsearchElasticsearch 索引
/usr/dcmp/upload上传文件
/usr/dcmp/logs业务日志
/usr/dcmp/dcmp-agent/logsAgent 日志
/usr/dcmp/cache缓存
/usr/dcmp/dbbackup容器内数据库备份
/usr/dcmp/volume_data业务卷数据
/usr/dcmp/dcmp-agent/config.jsonAgent 现场修改

因此必须注意:

  • bash start.shbash 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 数据也必须保证版本、权限和目录结构一致。