openGauss 7.0 Docker 部署 跨版本迁移全流程aarch64沉淀范围镜像资源获取 → Compose 部署 → 环境认知 → 跨版本数据迁移 → 全链路踩坑根因与解决方案适用场景arm/aarch64 环境、Docker 单机部署、旧版RC3→ 新版7.0 正式逻辑迁移、MySQL 兼容 B 模式价值后续同类场景直接复用步骤、快速定位踩坑避免重复排错一、镜像资源获取aarch64 架构1. 国内可用稳定路径避开海外仓库超时坑表格方案操作命令 / 地址适用场景华为 SWR 仓库在线拉取推荐docker pull swr.cn-south-1.myhuaweicloud.com/opengauss/arm/opengauss:7.0.0-RC3公网服务器快速部署离线 tar 包下载下载wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/7.0.0-RC3/openEuler22.03/arm/openGauss-Docker-7.0.0-RC3-aarch64.tar加载docker load -i 包名.tar内网 / 离线环境2. 镜像选型认知7.0.0 正式版官方无公开预构建 Docker 镜像仅提供裸机二进制包需自行构建镜像测试场景无需追求7.0.0-RC3功能完整支持 B 模式 dolphin 插件满足 MySQL 迁移、业务测试需求底层系统官方预构建 Docker 镜像基于openEuler 22.03 LTSopenEuler 24.03 只有裸机包无成品 Docker 镜像架构严格匹配aarch64 镜像无法在 x86 服务器加载反之亦然3. 避坑记录Docker Hub、quay.io 海外仓库国内服务器普遍超时、且无对应 7.0 标签不要浪费时间尝试不要尝试修改镜像底层系统测试场景优先用官方预构建镜像减少环境问题二、Docker Compose 部署与核心环境认知1. 可复用 compose 模板services: openGauss7: image: opengauss:7.0.0 container_name: openGauss7 restart: always privileged: true shm_size: 1g ports: - 5432:5432 volumes: - /zkhome/openGauss-Docker/openGauss7:/var/lib/opengauss # 数据持久化 - /zkhome/all_backup/og_dump:/backup:ro # 备份目录只读挂载 - /etc/localtime:/etc/localtime:ro environment: - GS_USERNAMEroot - GS_PASSWORDZongKe888 networks: - zk_net2. 核心认知高频混淆点GS_USERNAME / GS_PASSWORD 本质作用容器首次初始化空数据库实例时自动创建 1 个数据库普通账号同时设置超级管理员omm的数据库密码生效边界仅全新空数据目录第一次启动生效实例初始化完成后修改环境变量重启容器不会新增 / 修改数据库用户误区纠正不是容器操作系统账号密码不能批量创建业务账号不会同步到已存在的数据库实例本次验证配置GS_USERNAMEroot初始化后数据库内自动创建root账号sysadmin 角色容器启动告警过滤无需处理表格告警内容原因影响could not create any HA TCP/IP sockets单机容器无集群高可用无libubsm_sdk.so 等库缺失鲲鹏硬件加速库非必需无Failed to obtain $GAUSSLOG日志路径环境变量未配置无gscgroup_omm.cfg 不存在容器内无需 cgroup 资源管控无三、跨版本数据迁移全流程旧 RC3 → 新 7.0 正式版迁移方案gs_dump 逻辑备份 → gs_restore 导入适用10G 以内中小库跨版本兼容性好风险可控回滚简单1. 备份文件挂载与权限处理方案宿主机备份目录只读挂载配置/zkhome/all_backup/og_dump:/backup:ro核心坑挂载 ≠ 授权文件权限独立现象omm用户执行gs_restore报Permission denied根因宿主机 dump 文件属主 root、权限 600仅 root 可读挂载只是目录映射文件权限原样带入容器omm无读取权限误区挂载到/home/ommomm 家目录也无法解决目录权限 ≠ 目录内文件权限解决方案二选一【长期推荐】宿主机端执行chmod 644 备份文件开放其他用户读权限保留:ro挂载的安全性【本次迁移用】容器内 root 账号将备份拷贝到/home/omm修改副本属主为omm不改动原始备份# root复制dump到omm家目录(必须用容器内的 root 用户来复制文件) cp /backup/backup_logistics_zkch_opengauss_20261014_0200.dump /home/omm/ # 修改副本文件属主给omm chown omm:omm /home/omm/backup_logistics_zkch_opengauss_20261014_0200.dump验证root 下校验ls -lh /home/omm/看到 dump 文件属主是 omm:omm 就成功。2. 目标数据库创建踩坑zh_CN.utf8 字符集报错现象建库指定LC_COLLATEzh_CN.utf8报invalid locale name根因openEuler 容器镜像默认仅带C.utf8、en_US.utf8无中文 locale 包方案使用en_US.utf8中文存储完全不受影响仅文本排序规则为英文业务无感知建库标准 SQLMySQL 兼容 B 模式进入 opengauss7 容器切换 omm预创建用户和库 docker exec -it opengauss7 bash su - omm # 登录postgres库 gsql -U omm -d postgres -- 创建业务账号 CREATE USER logistics WITH PASSWORD ZongKe888; GRANT ALL PRIVILEGES TO logistics; -- 创建目标库B模式必须在建库时指定后续不可修改 CREATE DATABASE logistics_zkch_opengauss ENCODING UTF8 LC_COLLATE en_US.utf8 LC_CTYPE en_US.utf8 TEMPLATE template0 DBCOMPATIBILITY B; -- 查看所有数据库 \l -- 执行完\q退出 gsql3. 数据导入执行常用可选参数-c导入前先删除库内已有对象测试环境重置使用生产割接不要随便加-e遇到报错直接终止方便排查问题-vverbose 详细日志输出推荐加上看进度# omm 用户下执行输出详细日志 gs_restore -U omm -d logistics_zkch_opengauss -v /home/omm/备份文件.dump /tmp/restore.log 21导入完成后可以查看日志cat /tmp/restore.log导入结果校验日志校验grep -i error /tmp/restore.log注意字段注释文本中包含error单词不是报错是表注释内容成功标志日志无 ERROR 级报错、末尾出现Finished restore库内校验-- 1. 查看所有业务表清单\dt-- 2. 统计表总数量和旧库对比SELECTcount(*)FROMpg_tablesWHEREschemanamepublic;-- 3. 抽样核对核心业务表行数替换为你的实际表名SELECTcount(*)FROMeqp_device;SELECTcount(*)FROMbase_user;-- 4. 确认兼容模式生效showsql_compatibility;四、核心踩坑沉淀同类问题快速定位表格问题现象根因本质标准解决方案docker pull 海外仓库超时 / 镜像不存在国内网络限制 官方镜像未发布到海外仓库改用华为 SWR 国内仓库 / 离线 tar 包修改 GS_USERNAME 后数据库没新增用户环境变量仅数据库首次初始化生效手动执行CREATE USER创建业务账号挂载备份后 omm 读不了文件Permission denied挂载只是目录映射文件权限原样继承目录权限≠文件权限宿主机chmod 644或 容器 root 拷贝文件并改属主建库指定 zh_CN.utf8 报错容器系统无中文 locale 包改用en_US.utf8不影响中文存储gsql 粘贴 SQL 报空行语法错误粘贴带入多余换行符解析失败短 SQL 手动输入或输入\r重置当前语句Navicat 迁移报selected_dependencies递归 CTE 类型错误Navicat 内部依赖分析 SQL 与 openGauss 类型不兼容取消迁移外键 / 视图只迁表结构 数据后续手动建外键A 模式下字段内联 COMMENT 报错A 模式不支持 MySQL 风格行内注释改用COMMENT ON COLUMN独立语句或使用 B 模式库五、可复用命令速查容器操作# 直接在宿主机执行容器内 omm 用户命令 docker exec -it 容器名 su - omm -c gsql -V # 进入容器交互 docker exec -it 容器名 bash su - omm # 切换数据库管理员账号数据库常用操作\du -- 查看所有数据库用户 \l -- 查看所有数据库 \dt -- 查看当前库所有表 show sql_compatibility; -- 查看兼容模式迁移专用# 全库导出自定义格式 dump gs_dump -U omm -d 源库名 -F c -f 导出文件路径 # 导入 dump 并输出日志 gs_restore -U omm -d 目标库 -v dump文件路径 日志路径 21 # 过滤导入错误 grep -i error 日志文件六、方法论沉淀迁移类工作前置验证优先先确认版本兼容性、字符集、兼容模式再全量导入避免大规模返工权限问题分层排查区分「挂载层面权限」「文件系统权限」「数据库权限」三层逐层定位不要混淆概念环境变量确认生效时机所有配置先明确是「初始化生效」还是「运行时生效」不要默认修改就立即生效官方镜像能力有边界复杂初始化多业务账号、预制库表优先用 SQL 脚本实现不要依赖镜像环境变量后续遇到 openGauss Docker 部署、数据迁移、权限类问题可直接对照本沉淀快速定位解决。