暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

YashanDB 部署太复杂?10分钟搞定 Docker 体验攻略

原创 shunwahⓂ️ 2025-10-23
190

国产数据库实战,详解 YashanDB 部署全流程,从权限配置到业务验证,一份完整的避坑指南

个人简介
作者: ShunWah
公众号: “顺华星辰运维栈”主理人。

持有认证: OceanBase OBCA/OBCP、MySQL OCP、OpenGauss、崖山 DBCA、亚信 AntDBCA、翰高 HDCA、GBase 8a | 8c | 8s、Galaxybase GBCA、Neo4j Graph Data Science Certification、NebulaGraph NGCI & NGCP、东方通 TongTech TCPE 等多项权威认证。
获奖经历: 崖山YashanDB YVP成员,墨天轮MVP,在OceanBase&墨天轮征文大赛、OpenGauss、TiDB、YashanDB、Kingbase、KWDB 征文等赛事中多次斩获一、二、三等奖,原创技术文章常年被墨天轮、CSDN、ITPUB 等平台首页推荐。

  • 公众号_ID:顺华星辰运维栈
  • CSDN_ID: shunwahma
  • 墨天轮_ID:shunwah
  • ITPUB_ID: shunwah
  • IFClub_ID:shunwah

手办风格图片制作 1.png

前言

在国产数据库加速替代的背景下,YashanDB 作为面向企业级应用的国产数据库代表,凭借优异的兼容性、稳定性和性能,成为企业级稳定性与高性能,成为金融、能源、政务等核心领域的迁移首选。然而,传统部署需配置复杂环境变量、依赖库,对新手门槛较高。本文将通Docker 容器部署方案,完整演示 YashanDB 通过「环境准备→问题排查→数据验证→性能初探」的闭环流程,提供可直接复制的命令、可视化的报错解决方案,帮你10分钟完成从“零环境”到用户创建、库表设计“可操作数据库”的全流程,提供可直接复用的实操命令和原理说明,帮助读者快速上手 YashanDB 核心能力。

一、前置准备:软件与环境说明

在开始部署前,需完成软件包下载和服务器环境确认,确保后续操作顺畅。

1.1 软件包下载

前往 YashanDB 下载中心 获取对应版本的软件包,核心包说明如下(以 V3.0.0 版本为例):

项目 描述 软件包名称(示例) 用途说明
数据库安装包 YashanDB V3.0.0 yashandb-V3.0.0-linux-x86_64.tar.gz 本地部署核心包,包含数据库服务和基础工具
Docker 镜像包 YashanDB 个人版镜像 yashandb-image-personal-V3.0.0-linux-x86_64.tar.gz 容器部署专用镜像,轻量化打包
数据库客户端工具 YashanDB YASQL yashandb-client-V3.0.0-windows-amd64.zip Windows 端连接工具,用于远端访问数据库
数据迁移工具 Yashan Migration Platform yashan-migrate-platform-V3.0.0-linux-x86_64.zip 后续 Oracle 迁移使用,本文暂不涉及

下载页面截图

同意下载协议:

同意下载截图

1.2 服务器基础配置

两种部署方案均需满足以下最小配置(开发测试环境),本文以 CentOS 7.6 系统为例:

项目 配置要求 说明
操作系统 CentOS 7.6+/KylinOS V10 需 64 位系统,本文以 CentOS 7.6 为例
CPU X86_64 4 核 确保部署和查询时 CPU 资源充足,避免卡顿
内存 8GB 数据库启动和数据操作需足够内存支持
硬盘 50GB 以上 用于存储数据库安装包、数据文件和日志
文件系统 ext4/xfs 主流 Linux 文件系统,兼容性好
网络 千兆以太网,支持 TCP/UDP 确保本地或远端能正常连接数据库端口(1688)

image.png

二、Docker 容器部署 YashanDB 全流程

Docker 部署无需手动配置环境变量,容器隔离性强,可快速创建和销毁环境,适合临时测试或快速验证。

2.1 步骤 1:安装 Docker 环境(前提准备)

若服务器未安装 Docker,需先执行以下命令安装(CentOS 7.6 为例):

# 1. 切换 root 用户 su root # 2. 安装 Docker(yum 自动处理依赖) yum install -y docker # 3. 启动 Docker 服务并设置开机自启 systemctl start docker systemctl enable docker # 4. 验证 Docker 安装成功(显示版本即正常) docker --version
[root@instance2 ~]# docker --version
Docker version 20.10.12, build e91ed57
[root@instance2 ~]# 

image.png

验证标准:执行docker --version无报错,且能看到清晰的版本信息,说明Docker环境正常。

2.2 步骤 2:创建用户与挂载目录(数据持久化)

容器内数据默认随容器删除而丢失,需创建挂载目录,将容器内数据映射到主机,实现持久化。

# 1. 创建 yashan 用户和数据目录 su root useradd -d /home/yashan -m yashan passwd yashan # 密码仍用 Yasdb@123 groupadd YASDBA

创建用户截图

usermod -a -G YASDBA yashan mkdir -p /data/yashan chown -R yashan:yashan /data/yashan

创建数据目录截图

# 2. 创建 Docker 挂载目录(用于映射容器内数据) su - yashan mkdir /home/yashan/yashandb_mount

创建挂载目录截图

关键说明/home/yashan/yashandb_mount 将通过 -v 参数映射到容器内的 /data/yashan,确保容器删除后数据不丢失。

2.3 步骤 3:导入 Docker 镜像并启动容器

将下载的 Docker 镜像包导入服务器,再通过 docker run 命令启动容器,自动完成部署。

# 1. 切换 yashan 用户,上传镜像包到 /home/yashan 目录 su - yashan # (上传 yashandb-image-personal-V3.0.0-linux-x86_64.tar.gz 到该目录) # 2. 导入 Docker 镜像(-i 指定镜像包路径) docker load -i yashandb-image-23.4.1.102-linux-x86_64.tar.gz

导入镜像截图

# 3. 验证镜像导入成功(显示 yashan 镜像即正常) docker images

验证镜像截图

2.4 解决 Docker 权限问题

在操作过程中遇到 Docker 权限问题:

[yashan@instance2 ~]$ docker ps Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied

权限错误截图

🔍 问题分析:Docker 核心套接字的所属组被异常设置为 root(默认应为 docker 组),导致 yashan 用户无法访问 Docker。

💡 解决方案

# 1. 确认并创建 docker 组(若不存在) [root@instance2 opt]# grep docker /etc/group [root@instance2 opt]# groupadd docker

创建 docker 组截图

# 2. 修改 docker.sock 的所属组和权限(核心修复) [root@instance2 opt]# chown root:docker /var/run/docker.sock

修改所属组截图

[root@instance2 opt]# chmod g+rw /var/run/docker.sock

修改权限截图

# 3. 验证修改结果 [root@instance2 opt]# ls -l /var/run/docker.sock

验证权限截图

# 4. 将 yashan 加入 docker 组 [root@instance2 opt]# usermod -a -G docker yashan

加入 docker 组截图

# 5. 验证加入结果 [root@instance2 opt]# id yashan

验证用户组截图

# 6. 重新登录 yashan,验证 Docker 权限 [root@instance2 opt]# su - yashan [yashan@instance2 ~]$ docker ps

验证 Docker 权限截图

2.5 启动 YashanDB 容器

# 查看已有镜像 [yashan@instance2 ~]$ docker images yashandb

查看镜像截图

# 启动容器(关键参数详解) docker run -d \ -p 1688:1688 \ # 端口映射(主机1688→容器1688) -v /home/yashan/yashandb_mount:/data/yashan \ # 数据持久化挂载 -e SYS_PASSWD=Yasdb@123 \ # sys用户密码(符合复杂度) --name yashandb \ # 容器名称(可自定义,如yashandb-test) yashandb:yashandb-image-23.4.1.102-linux-x86_64 # 替换为本地实际镜像标签

启动容器截图

🚀 参数说明

  • -d:容器后台运行,避免终端关闭后容器停止;
  • -v:挂载目录是数据持久化的核心,必须配置,否则容器删除后数据丢失;
  • -e:通过环境变量设置 sys 密码,无需手动输入,简化部署。

2.6 解决容器启动失败问题

容器启动后遇到配置检查失败问题,核心原因是挂载目录存在残留文件或权限异常

💡 解决方案

# 1. 停止并删除异常容器 [yashan@instance2 ~]$ docker rm yashandb # 2. 清空挂载目录(关键!确保初始状态) [yashan@instance2 ~]$ cd /home/yashan/yashandb_mount [yashan@instance2 yashandb_mount]$ rm -rf ./* # 3. 重新启动容器 [yashan@instance2 ~]$ docker run -d \ -p 1688:1688 \ -v /home/yashan/yashandb_mount:/data/yashan \ -e SYS_PASSWD=Yasdb@123 \ --name yashandb \ yashandb:yashandb-image-23.4.1.102-linux-x86_64

重新启动容器截图

2.7 解决 SELinux 权限问题

在 CentOS 系统中,SELinux 可能拦截容器对挂载目录的访问,需要额外处理:

# 1. 临时关闭 SELinux(仅测试) [root@instance2 yashan]# setenforce 0 [root@instance2 yashan]# getenforce # 2. 更换挂载目录到 /data 下 [root@instance2 yashan]# mkdir -p /data/yashan_mount

创建新挂载目录截图

[root@instance2 yashan]# chown -R yashan:yashan /data/yashan_mount

修改目录权限截图

# 3. 用新目录重新启动容器 [yashan@instance2 ~]$ docker run -d \ -p 1688:1688 \ -v /data/yashan_mount:/data/yashan \ -e SYS_PASSWD=Yasdb@123 \ --name yashandb \ yashandb:yashandb-image-23.4.1.102-linux-x86_64

使用新目录启动容器截图

2.8 常见问题:容器启动失败解决方案

启动后执行docker ps若看不到yashan容器(或STATUS显示Exited),需按以下步骤排查:

报错现象 原因分析 解决方案
permission denied(Docker权限不足) yashan用户无Docker操作权限 1. 切换root:su root
2. 添加docker组:groupadd docker
3. 加入用户:usermod -a -G docker yashan
4. 重新登录yashan:su - yashan
config check failed(配置检查失败) CentOS SELinux拦截容器访问挂载目录 1. 临时关闭SELinux:setenforce 0(root执行)
2. 重新启动容器:docker start yashan
3. 生产环境需配置SELinux规则:chcon -Rt svirt_sandbox_file_t /data/yashan_mount
port is already allocated(端口被占用) 1688端口已被其他服务占用 1. 查看占用服务:netstat -tunlp | grep 1688
2. 停止占用服务或修改端口(如-p 1689:1688

2.9 验证容器部署状态

# 查看容器运行状态 [yashan@instance2 ~]$ docker ps | grep yashandb

执行docker ps | grep yashan,若STATUS显示“Up X分钟”,说明容器启动成功
容器状态截图

# 查看部署日志 [yashan@instance2 ~]$ docker logs yashandb

通过日志确认数据库初始化成功

成功标志
日志末尾显示以下内容,说明数据库部署完成:

+------+------------------+--------------------+--------+----------+---------+-------------+----------+------+
| task | 12f4478299776893 | DeployYasdbCluster | -      | yashandb | SUCCESS | 0           | 100      | 9    |
+------+------------------+--------------------+--------+----------+---------+-------------+----------+------+
task completed, status: SUCCESS

image.png

进入容器(交互式终端,–l参数加载环境变量)

# 进入容器内部 [yashan@instance2 ~]$ docker exec -it yashandb /bin/bash -l [yashan@1dec4a8a9991 /]$

image.png

2.10 进入容器连接数据库

通过YashanDB自带的yasql工具(命令行客户端)连接数据库:

# 在容器内连接数据库 [yashan@1dec4a8a9991 /]$ yasql sys/Yasdb#123@127.0.0.1:1688

连接数据库截图

# 查询实例状态 SQL> SELECT status FROM V$INSTANCE;

查询实例状态截图

💡 兼容性说明V$INSTANCE 是 YashanDB 的动态性能视图,类似 Oracle 的同名视图,用于查看实例运行状态,体现了 YashanDB 对 Oracle 的高度兼容性。

三、创建测试用户与业务库表

默认的 sys 用户仅用于管理,需创建普通测试用户(如 sales),并设计业务表(如销售表 sales_info),验证数据操作能力。

3.1 创建测试用户并授权

-- 1. 用 sys 用户连接后,创建sales用户(密码Sales#123,符合复杂度要求) SQL> CREATE USER sales IDENTIFIED BY Sales#123;

创建用户截图

-- 2. 授予基础权限(CONNECT:允许连接数据库;RESOURCE:允许创建表、索引等) SQL> GRANT CONNECT TO sales; SQL> GRANT RESOURCE TO sales;

授予基础权限截图

-- 3. 授予查询数据字典权限(方便查看表结构、用户信息等) SQL> GRANT SELECT_CATALOG_ROLE TO sales;

授予数据字典权限截图

-- 4. 授权数据操作权限(对自己的表有读写权限,生产环境需按最小权限原则分配) SQL> GRANT DBA TO sales;

授予 DBA 权限截图

🔐 安全提示CONNECTRESOURCE 是 Oracle 兼容的角色,YashanDB 直接支持,降低迁移成本;生产环境中应避免给普通用户授予 DBA 权限,需按实际需求分配权限(如 SELECTINSERT),生产环境中应删除SELECT_CATALOG_ROLE(敏感信息保护),仅授予业务必需的表级权限 。

3.2 用 sales 用户创建业务表

# 退出 sys 连接,用 sales 用户重新连接 SQL> exit [yashan@1dec4a8a9991 /]$ yasql sales/Sales#123@127.0.0.1:1688

sales 用户连接截图

-- 创建销售表sales_info(模拟电商场景,含核心业务字段) SQL> CREATE TABLE sales_info ( id NUMBER(10) PRIMARY KEY, -- 销售记录ID(主键,唯一标识) sale_date DATE, -- 销售日期 product_id VARCHAR2(20), -- 产品ID amount NUMBER(12,2), -- 销售金额(保留2位小数) region VARCHAR2(50) -- 销售地区 );

创建业务表截图

-- 插入5条测试数据(覆盖不同地区和产品) SQL> INSERT INTO sales_info VALUES (1, TO_DATE('2024-01-05', 'YYYY-MM-DD'), 'PROD001', 1500.50, '北京'); SQL> INSERT INTO sales_info VALUES (2, TO_DATE('2024-01-08', 'YYYY-MM-DD'), 'PROD002', 2300.00, '上海'); SQL> INSERT INTO sales_info VALUES (3, TO_DATE('2024-01-10', 'YYYY-MM-DD'), 'PROD001', 1800.75, '北京'); SQL> INSERT INTO sales_info VALUES (4, TO_DATE('2024-01-15', 'YYYY-MM-DD'), 'PROD003', 3200.20, '广州'); SQL> INSERT INTO sales_info VALUES (5, TO_DATE('2024-01-20', 'YYYY-MM-DD'), 'PROD002', 2100.30, '上海');

插入数据截图

-- 提交事务(YashanDB默认手动提交,确保数据写入磁盘) SQL> COMMIT;

提交事务截图

📊 表结构设计说明

  • id 设为主键避免重复数据
  • CHECK(amount > 0)避免金额为负的无效数据
  • amountNUMBER(12,2) 符合财务数据精度要求
  • sale_dateDATE 类型便于时间维度查询
  • DEFAULT SYSDATE减少插入时的日期输入,符合业务习惯
  • 字段设计覆盖常见业务场景

3.3 执行 SQL 查询与性能验证

通过常见 SQL 操作,验证 YashanDB 的查询能力和Oracle兼容性,同时简单测试性能。

-- 1. 基础查询:查看所有销售记录 SQL> SELECT * FROM sales_info;

查询所有数据截图

-- 2. 聚合查询:按地区统计总销售额(带排序) SQL> SELECT region, SUM(amount) AS total_amount FROM sales_info GROUP BY region ORDER BY total_amount DESC;

分组统计截图

-- 3. 条件查询:筛选2024年1月10日后的上海地区数据 SQL> SELECT product_id, amount, region FROM sales_info WHERE sale_date > TO_DATE('2024-01-10', 'YYYY-MM-DD');

条件查询截图

-- 4. 执行计划分析:查看查询优化器行为(验证性能优化能力) SQL> EXPLAIN SELECT * FROM sales_info WHERE region = '北京';

查询计划截图

⚡ 性能说明:上述查询均瞬间完成,即使后续数据量增至万级,简单查询仍能保持高效;若需优化复杂查询,可通过创建索引(如 CREATE INDEX idx_sales_region ON sales_info(region);)进一步提升性能。

四、总结与展望

4.1 🎯 部署经验总结

通过本次完整的 Docker 部署实操,我们总结出以下关键经验:

✅ 部署优势

  • 快速启动:Docker 部署方案轻量化、高隔离,适合快速验证和测试环境
  • 兼容性优异:支持 Oracle 兼容的角色、视图和 SQL 语法,降低迁移成本
  • 企业级特性:具备完整的事务 ACID、高可用、备份恢复等企业级功能

⚠️ 常见问题与解决方案

  • Docker 权限问题:确保用户加入 docker 组,且 /var/run/docker.sock 权限正确
  • SELinux 拦截:CentOS 系统需注意 SELinux 对容器访问目录的限制
  • 挂载目录清理:确保挂载目录为空,避免配置检查失败
  • 端口冲突:检查 1688 端口是否被占用,必要时更换端口

4.2 🌟 YashanDB 核心优势

通过本次实操体验,YashanDB 展现出以下核心优势:

🏢 企业级能力

  • 完整支持事务 ACID 特性
  • 提供高可用、备份恢复等企业级功能
  • 性能优异,查询响应迅速

🔄 Oracle 高度兼容

  • 语法、函数、视图等方面高度兼容 Oracle
  • 支持 Oracle 兼容的角色和权限体系
  • 降低从 Oracle 迁移的学习成本和改造工作量

🔧 完善生态

  • 提供完整的迁移工具链
  • 具备完善的运维管理工具
  • 活跃的社区支持和文档资源

4.3 📚 后续学习路径

作为国产数据库的代表,YashanDB 在兼容性、性能和稳定性上的表现,为企业数据库国产化替代提供了可靠选择。通过本文的实操流程,读者已掌握 YashanDB 的核心部署和使用能力,建议后续:

  1. 深入功能探索:进一步体验分区表、存储过程、触发器等高级功能
  2. 性能压测:使用真实业务数据模型进行性能测试和调优
  3. 迁移实践:使用 Yashan Migration Platform 工具进行 Oracle 迁移验证
  4. 生产部署:在测试验证通过后,规划生产环境部署方案

YashanDB 作为国产数据库的优秀代表,正以其卓越的性能和良好的兼容性,为各行各业的数字化转型提供强有力的数据底座支撑。

作者注
——本文所有操作及测试均基于 CentOS 系统通过 Docker 部署的 YashanDB 23.4.1.102 企业版完成,核心围绕 「环境准备→问题排查→数据验证→兼容初探」 特性展开实操兼容适配验证等关键环节。建议实际应用时参考崖山数据库官方文档指南。请注意,崖山数据库与 Docker 版本处于持续迭代中,部分语法或功能可能随更新发生变化,请以 YashanDB 崖山数据库官方文档最新内容为准。

——以上仅为个人思考与建议,不代表行业普遍观点。以上所有操作均需在具备足够权限的环境下执行,涉及生产环境时请提前做好备份与测试。文中案例与思路仅供参考,若与实际情况巧合,纯属无意。期待与各位从业者共同探讨更多可能!

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论