1. 创建空 B 模式库
⚠️注意:
LC_COLLATE/LC_CTYPE的值来自操作系统 locale,执行locale -a查看系统可用;如果服务器没有zh_CN.UTF‑8,改用en_US.UTF‑8。不能写 zh_CN.UTF‑8B,系统无此 locale,会报错建库失败openGauss。DBCOMPATIBILITY='B'只能在建库时指定,建好库之后无法 ALTER 修改,一旦建错库只能重建。dolphin扩展,B 模式数据库必须创建,提供ifnull、date_format、字符串隐式转换等 MySQL 语法兼容,不开启很多 MySQL 语法直接报错
-- 如果库存在先删除(测试环境,谨慎!)
DROP DATABASE IF EXISTS test_opengauss;
CREATE DATABASE test_opengauss
ENCODING 'UTF8'
LC_COLLATE 'zh_CN.utf8'
LC_CTYPE 'zh_CN.utf8'
TEMPLATE template0
DBCOMPATIBILITY = 'B'; -- MySQL兼容B模式,重点!
-- gsql客户端切换数据库
\c test_opengauss;
-- 可选:创建业务schema,隔离业务对象(如果不想用public)
-- CREATE SCHEMA jsbos;
-- SET search_path TO jsbos,public;
-- 可选:创建业务用户并授权(生产环境建议,测试环境可跳过)
-- CREATE USER jsbos_user WITH PASSWORD 'Jsbos@123456';
-- GRANT ALL PRIVILEGES ON DATABASE test_opengaussTO jsbos_user;
-- GRANT ALL PRIVILEGES ON SCHEMA public TO jsbos_user;
-- 开启dolphin插件(B模式必须,模拟MySQL函数、语法)
CREATE EXTENSION IF NOT EXISTS dolphin;
2. 验证数据库是否 B 模式
连接库后执行 SQL 查看:
show sql_compatibility;
返回结果是 B,代表兼容模式配置正确。

3. 检查 dolphin 扩展是否真的注册
select * from pg_extension where extname='dolphin';
有记录 = 当前业务库 dolphin 已就绪
建扩展是初始化 DBA 操作,放在脚本手动执行一次即可。
Docker 部署 openGauss6.0.5:gs_restore 跨版本恢复
✅容器内正确 gs_restore 命令
#1 进入容器
docker exec -it opengauss bash
#2 切换omm用户
su - omm
#3 加载环境变量(docker镜像不会自动加载!)
source /usr/local/opengauss/bin/gs_env
#4 执行恢复,端口写5432(容器内部端口)
gs_restore -d dev_opengauss -U root --password='root@888' -p 5432 --no-owner --no-privileges /home/omm/backup_opengauss_20260826_0200.dump
参数说明:
--no‑owner --no‑privileges忽略源库属主权限,跨版本迁移强烈建议带上。
记忆口诀:
- 容器内部执行 gsql/gs_restore →
-p 5432- 宿主机访问容器数据库 →
-h 127.0.0.1 -p 35432
将宿主机 dump 备份文件拷贝进容器
docker cp /宿主机路径/backup_opengauss_20260826_0200.dump opengauss:/home/omm/
# 修改dump文件属主为omm
docker exec -it opengauss bash
chown omm:omm /home/omm/backup_opengauss_20260826_0200.dump
二、跨版本恢复报错详情(7.0RC dump 恢复至 6.0.5)
执行完成日志输出:restore operation successful WARNING: errors ignored on restore:3
代表整体表、数据、大部分索引导入成功;3 处错误被跳过,需要手动修复。
报错 1:behavior_compat_options = 'sql_mode_full_group'
ERROR: invalid value for parameter "behavior_compat_options": "sql_mode_full_group"
DETAIL: invalid behavior compat option "sql_mode_full_group"
Command was: SET behavior_compat_options = 'sql_mode_full_group';
根因:sql_mode_full_group 是openGauss7.0 新增参数,6.0.5 不识别 ,dump 备份中保存会话 SET 语句。
✅处理:会话参数,无需修复,不影响表与业务数据。
报错 2:nls_length_semantics = 'byte'
ERROR: unrecognized configuration parameter "nls_length_semantics"
Command was: SET nls_length_semantics = 'byte';
根因:Oracle 兼容参数,6.0.5 B 模式不支持该 GUC 变量。
✅处理:会话参数,无需修复。
报错 3:索引名称为关键字index语法报错【重要,索引丢失】
ERROR: syntax error at or near "index"
LINE 1: CREATE INDEX index ON base_organize_relation USING btree (organize_id) TABLESPACE pg_default;
根因:index属于 SQL 保留关键字,不能直接作为索引名称,7.0 可以导出,6.0.5 执行 DDL 直接语法失败,该索引不会被创建。
✅修复 SQL:
-- 删除残留带关键字的索引(如果存在)
DROP INDEX IF EXISTS "index";
-- 重建索引,遵循命名规范 idx_表名_字段
CREATE INDEX idx_base_organize_relation_organize_id
ON base_organize_relation USING btree (organize_id);
-- 如果同表还有object_id索引,一并重建
CREATE INDEX idx_base_organize_relation_object_id
ON base_organize_relation USING btree (object_id);
索引规范:禁止使用
index、table、where、select等 SQL 关键字作为索引名;统一命名idx_表名_字段1_字段2。
检查库中全部关键字命名索引
SELECT relname AS index_name
FROM pg_class
WHERE relkind = 'i'
AND relname IN ('index','table','where','select','update','group','order','limit');
查到的索引全部需要重命名重建。
三、docker‑opengauss 宿主机 data 目录权限说明
宿主机映射出来的数据目录/rkhome/docker‑opengauss/opengauss/data文件属主 uid=70(容器内 omm 用户 uid)。
#普通lenovo用户没有权限访问,必须root查看
sudo -i
cd /rkhome/docker-opengauss/opengauss/data
ll
⚠️严禁在宿主机执行 chmod 777、chown 修改 data 目录权限,会直接造成数据库容器启动崩溃,仅允许查看,所有写操作在容器内 omm 用户执行。
四、B 兼容模式建库参考(MySQL 兼容库)
locale‑a 输出
zh_CN.utf8,注意大小写,不要写zh_CN.UTF‑8。
CREATE DATABASE dev_opengauss
ENCODING 'UTF8'
LC_COLLATE 'zh_CN.utf8'
LC_CTYPE 'zh_CN.utf8'
TEMPLATE template0
DBCOMPATIBILITY = 'B';