ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

openGauss 7.0 Docker 部署 + 跨版本迁移全流程(aarch64)

openGauss 7.0 Docker 部署 + 跨版本迁移全流程(aarch64)

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 LTS;openEuler 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_USERNAME=root - GS_PASSWORD=ZongKe@888 networks: - zk_net

2. 核心认知(高频混淆点)

GS_USERNAME / GS_PASSWORD 本质
  • 作用:容器首次初始化空数据库实例时,自动创建 1 个数据库普通账号,同时设置超级管理员omm的数据库密码
  • 生效边界:仅全新空数据目录第一次启动生效;实例初始化完成后,修改环境变量重启容器,不会新增 / 修改数据库用户
  • 误区纠正:
    • 不是容器操作系统账号密码
    • 不能批量创建业务账号
    • 不会同步到已存在的数据库实例
  • 本次验证:配置GS_USERNAME=root,初始化后数据库内自动创建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/omm(omm 家目录)也无法解决,目录权限 ≠ 目录内文件权限
    • 解决方案二选一:
      1. 【长期推荐】宿主机端执行chmod 644 备份文件,开放其他用户读权限,保留:ro挂载的安全性
      2. 【本次迁移用】容器内 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_COLLATE='zh_CN.utf8'报invalid locale name
  • 根因:openEuler 容器镜像默认仅带C.utf8、en_US.utf8,无中文 locale 包
  • 方案:使用en_US.utf8,中文存储完全不受影响,仅文本排序规则为英文,业务无感知
建库标准 SQL(MySQL 兼容 B 模式)
进入 opengauss7 容器,切换 omm,预创建用户和库 docker exec -it opengauss7 bash su - omm # 登录postgres库 gsql -U omm -d postgres -- 创建业务账号 CREATE USER logistics WITH PASSWORD 'ZongKe@888'; 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`退出 gsql

3. 数据导入执行

常用可选参数

  • -c:导入前先删除库内已有对象(测试环境重置使用,生产割接不要随便加)
  • -e:遇到报错直接终止,方便排查问题
  • -v:verbose 详细日志输出,推荐加上看进度
# omm 用户下执行,输出详细日志 gs_restore -U omm -d logistics_zkch_opengauss -v /home/omm/备份文件.dump > /tmp/restore.log 2>&1

导入完成后可以查看日志:cat /tmp/restore.log

导入结果校验
  1. 日志校验:grep -i error /tmp/restore.log

注意:字段注释文本中包含error单词不是报错,是表注释内容

  1. 成功标志:日志无 ERROR 级报错、末尾出现Finished restore
  2. 库内校验:
-- 1. 查看所有业务表清单\dt-- 2. 统计表总数量,和旧库对比SELECTcount(*)FROMpg_tablesWHEREschemaname='public';-- 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文件路径 > 日志路径 2>&1 # 过滤导入错误 grep -i error 日志文件

六、方法论沉淀

  1. 迁移类工作前置验证优先:先确认版本兼容性、字符集、兼容模式,再全量导入,避免大规模返工
  2. 权限问题分层排查:区分「挂载层面权限」「文件系统权限」「数据库权限」三层,逐层定位,不要混淆概念
  3. 环境变量确认生效时机:所有配置先明确是「初始化生效」还是「运行时生效」,不要默认修改就立即生效
  4. 官方镜像能力有边界:复杂初始化(多业务账号、预制库表)优先用 SQL 脚本实现,不要依赖镜像环境变量

后续遇到 openGauss Docker 部署、数据迁移、权限类问题,可直接对照本沉淀快速定位解决。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进