
做了这么多年数据库运维最近把 YashanDB 23.4.1 企业版完整安装部署跑通了一遍顺手把 YashanDB 认证YCA/YCP 这类里和安装部署直接相关的实操点整成了这篇记录。先说结论这套数据库的安装思路和很多国产数据库类似——分用户、解压、初始化、启动但企业版里打包了不少跟共享集群、并行计算强相关的组件所以环境准备阶段比一般的开源库要更讲究。这篇教程就是从零走一遍从选机器、装环境到初始化实例、验证 Oracle 兼容特性最后把踩过的坑也一并记下来。这篇内容适合几类人准备考 YashanDB 认证的学员、做国产数据库选型评估的 DBA、以及手头正好有数据库适配任务但第一次接触 YashanDB 的读者。我不贴官方文档原文只讲我在一台 CentOS 7.9 测试机上从头折腾的实际过程参数和命令都是可落地的你照着敲就行。1. 动手前的三件事想清楚版本、授权和机器1.1 企业版和认证考试是两回事很多人一听“YashanDB 认证”就以为必须装企业版其实不是。认证考的是你对数据库产品能力、架构原理和实操流程的把控而安装部署是企业版里最基础的实操考点。我这次装的是 23.4.1 企业版主要是为了验证企业版特性比如并行查询、共享集群模块、细粒度权限这些能力单机环境也能用并不需要真的搭一套集群。企业版和一般免费版本最大的区别在授权机制和组件完整性。企业版安装包里会带有授权相关的配置文件安装初始化时会校验授权信息比如 license 的机器指纹、申请日期、允许的 CPU 核数等。我看过不少人拿到安装包后随手解压就初始化结果实例能起但功能受限甚至数据库直接进入受限模式。所以动手前先去官网或授权渠道确认好企业版授权文件是否就位这是最容易被忽略的“前置条件”。我这次准备了企业版授权文件并且核对过授权允许的 CPU 数量是 16 核测试机的 CPU 也是 16 核刚好卡线。如果你手里的授权是 8 核机器却是 32 核初始化也不会直接报错但后续用企业版特性时会弹警示考试环境下容易扣分。建议做认证练习时租一台和授权规格完全一致的云主机别让这种低级问题影响练习进度。1.2 服务器配置怎么定才不浪费安装数据库之前先算清楚机器规格。我见过太多人在 8G 内存的小机器上硬塞企业版启动都稀碎然后跑来问是不是安装包有问题。说实话YashanDB 的最低配置要求不算高但如果要跑企业版的并行计划和共享集群验证至少建议按“4 核 8G 起步8 核 16G 舒适16 核 64G 完整验证”这个梯度选。我这次用的测试机参数如下项目配置说明CPU16 核授权文件也验证了 16 核内存64 GB分区规划时给了数据库约 40GB系统盘200 GB安装程序、日志放这里数据盘500 GB单独挂载 /data/yashan操作系统CentOS 7.9glibc 2.17满足安装要求内存分配是个值得展开的点。64G 机器不能全给数据库我按下面这个逻辑切的操作系统和日常运维工具预留 4G 到 6G数据库共享内存区类似 SGA大概给 32G占总内存一半每个用户会话的私有内存区总和控制在 8G 以内剩余内存留给文件系统缓存磁盘读写会受益这个分配思路和装 Oracle、OpenGauss 都类似但 YashanDB 对共享内存的依赖更明显因为它自己管理缓冲区和日志缓冲。初始化实例时我直接指定了 SGA 相关参数后面会专门讲到计算方式。磁盘方面数据目录一定要单独挂分区和系统盘分开否则后续做数据备份、日志轮转时容易把根分区撑爆。企业版安装包解压后体积不小跑一段时间后 redo 日志、归档日志、慢查询日志会持续增长500G 其实是保守值生产环境按业务量另算。1.3 操作系统兼容性别凭感觉YashanDB 支持主流 Linux 发行版包括 CentOS、openEuler、麒麟、统信 UOS 等。我会优先选 CentOS 7.9 和 openEuler因为跟官方验证过最多的就是这两个系列。安装前第一件事是确认 glibc 版本和 CPU 架构cat /etc/os-release uname -a ldd --version这三个命令一分钟就能执行完但能避开 80% 的安装失败。我记得有一次在低版本 glibc 的机器上装 23.4.1解压时就提示缺少符号后来用strings /lib64/libc.so.6 | grep GLIBC一看才发现版本太旧。别急着怀疑安装包损坏先查基础库。另外X86_64 和 ARM 架构对应的安装包不通用下载时一定要选对。企业版安装包解压后的目录结构里有一个bin目录里面是各平台编译好的可执行文件如果拿错包跑初始化命令时通常直接报“cannot execute binary file”。这个错误信息很直白但经常有人被它带偏以为是权限问题。2. 环境准备这些细节决定了后面 90% 的成败2.1 创建专用用户和目录务必拒绝 rootYashanDB 的安装运维强烈不建议用 root 直接操作。原因有两层一层是安全层面数据库进程如果被攻击root 权限会直接危及整个操作系统另一层是运维层面用普通用户跑数据库文件权限、日志清理、备份恢复都更容易管理。我习惯创建一个名为yasdb的系统用户useradd -m yasdb passwd yasdb然后规划两个核心目录软件安装目录/opt/yashandb放可执行文件和动态库数据目录/data/yashan放数据文件、控制文件、日志目录的属主和权限必须明确mkdir -p /opt/yashandb /data/yashan chown -R yasdb:yasdb /opt/yashandb /data/yashan chmod 755 /opt/yashandb /data/yashan这里我吃过一次亏数据目录的属主改好了但父目录/data没有执行权限导致yasdb用户根本进不去初始化时报Permission denied。后来我养成了习惯——ll /data先把父目录权限看一遍所有中间层级都要有x权限。2.2 内核参数和资源限制少一项都容易翻车数据库一大类问题来自系统资源限制。YashanDB 同样需要调整信号量、共享内存、进程数、文件句柄这些参数。我调整了以下几个核心参数sysctl -w vm.swappiness10 sysctl -w vm.overcommit_memory1 sysctl -w fs.file-max6815744vm.swappiness10是为了尽量少用交换分区数据库进程一旦被换出内存性能会断崖式下跌。vm.overcommit_memory1则是允许操作系统为数据库一次性申请大块内存避免明明物理内存够用却申请失败。进程数和文件句柄限制也要放开。编辑/etc/security/limits.conf加入如下配置yasdb soft nproc 65535 yasdb hard nproc 65535 yasdb soft nofile 65535 yasdb hard nofile 65535 yasdb soft memlock unlimited yasdb hard memlock unlimitedmemlock unlimited这个很多人忽略。YashanDB 的共享内存段可能使用shmget/mmap方式创建memlock不放开大内存场景会报Cannot allocate memory。我一开始就没加这两行结果初始化实例时指定 32G 内存被系统拒绝了查日志才发现是 memlock 的问题。内核参数改完后重新登录yasdb用户或者执行ulimit -a验证一下。注意limits.conf对已经登录的会话不生效必须重新su - yasdb或者重新 SSH 登录。这种细节在认证考试里也算实操分监考老师最喜欢看你会不会验证。2.3 防火墙、时间同步和字符集提前搞定关闭防火墙不是最优解但测试阶段最省事。我在 CentOS 7.9 上是这样处理的systemctl stop firewalld systemctl disable firewalld setenforce 0生产环境建议不要在初始化阶段关 SELinux直接用semanage port放行数据库端口更规范。不过测试机我图省事先把 SELinux 置为 permissive避免出现“进程起不来、日志无内容”这种诡异问题。如果不想关防火墙至少要放行默认端口 1688。YashanDB 默认服务端口是 1688这个端口号要记住初始化、连接、考试问答里都会出现。放行命令大概是firewall-cmd --permanent --add-port1688/tcp firewall-cmd --reload时间同步也建议提前配好尤其以后要搭共享集群或者做增量备份节点间时间漂移会导致日志乱序。测试环境我用chronyd同步systemctl enable chronyd systemctl restart chronyd timedatectl status字符集我直接选了 UTF8。YashanDB 支持的字符集里有 GBK、UTF8、GB18030 等如果业务侧有历史数据初始化之前确定好字符集不然后期迁移会有字符乱码的风险。初始化命令里我会显式传入--charset UTF8不依赖系统环境变量。3. 安装包处理与初始化实例核心流程详解3.1 下载校验和解压不能直接双击企业版安装包从官网下载后是一个 tar.gz 压缩包文件名类似yashandb-23.4.1-enterprise-linux-x86_64.tar.gz。下载完第一件事是校验完整性最简单的办法是对比官方提供的 SHA256 校验值sha256sum yashandb-23.4.1-enterprise-linux-x86_64.tar.gz校验通过后用yasdb用户解压到软件目录su - yasdb tar -zxf yashandb-23.4.1-enterprise-linux-x86_64.tar.gz -C /opt/yashandb解压后目录结构大致包括bin、lib、share、conf、license等我简单列一下目录作用备注bin可执行文件yasql、yasdb、ys_backup 等lib动态链接库客户端连接依赖conf配置文件模板安装时按需修改license授权文件目录企业版必查shareSQL 脚本和字符集文件初始化时读取解压完之后把授权文件放到license目录下并确认权限是yasdb用户可读。授权文件一般是一个.dat或.lic结尾的文件如果权限不对初始化阶段会报授权校验失败。3.2 环境变量配错了连客户端都跑不起来YashanDB 的运行离不开环境变量核心是YASDB_HOME和YASDB_DATA。在yasdb用户的.bashrc里写入export YASDB_HOME/opt/yashandb export YASDB_DATA/data/yashan export PATH$PATH:$YASDB_HOME/bin export LD_LIBRARY_PATH$LD_LIBRARY_PATH:$YASDB_HOME/lib然后source ~/.bashrc。这里有个顺序坑LD_LIBRARY_PATH一定要先追加再看别把原来的路径覆盖掉否则系统命令都受影响。我第一次配置时直接写死LD_LIBRARY_PATH$YASDB_HOME/lib结果ls和cat都报动态库找不到吓出一身冷汗。YASDB_DATA表示数据目录后续初始化、启动都会用到如果你反复在命令行里写--datadir倒也不是不行但考试时容易漏参数。配好环境变量后执行echo $YASDB_DATA确认路径无误再继续往下走。3.3 初始化实例内存参数我这样算的初始化是安装过程的分水岭。我用的是命令行方式先yasdb init --help看一下参数说明再实际执行。不建议直接复制网上的命令因为不同版本参数名可能有差异但核心参数长这样yasdb init \ --datadir /data/yashan \ --port 1688 \ --charset UTF8 \ --memory-size 32G \ --redo-log-size 1G \ --log-buffer-size 512M内存参数的计算逻辑是这样的64G 物理内存我预留 4G 给系统再预留 8G 给文件缓存和运维工具剩下 52G取其中 32G 作为数据库的共享内存池。剩下的 20G 里再细分给后台进程、会话私有内存和归档缓冲区。--redo-log-size 1G是每个 redo 日志文件的大小。数据库会预分配多个 redo 文件如果太小高频写入场景下频繁切换日志性能会有明显波动。1G 是比较稳的中间值小业务可以降到 512M但对 64G 内存的测试机来说1G 更合理。初始化执行完成后控制台会打印一段摘要包含数据目录、端口、字符集、内存参数等信息。建议截图保留因为后续排障、认证报名时偶尔会用到。同时检查数据目录下是否生成了yashan.ini或类似命名的实例配置文件这是数据库实例的身份文件不能随意删除。3.4 启动实例与第一登录初始化完成后启动就很简单了yasdb start启动期间如果报错第一件事是看日志日志目录一般在数据目录下的log子目录里。正确启动后用ps -ef | grep yasdb能看到多个数据库进程数量一般大于 10 个和别的数据库一个主进程带多个后台进程的模式不太一样。第一登录用系统内置账号yasql sys/sys127.0.0.1:1688或者如果你在初始化时设了用户口令就用实际密码。登录后先跑一句最简单的 SQL 验证实例正常select name, value from v$system_parameter where name like %version%;如果能看到 23.4.1 相关版本信息说明核心安装已经跑通了。到这里基本的安装部署链路已经完成但离“企业版完整部署”还差几块——连接验证、企业特性验证、服务化配置。4. 连接验证与企业版功能核对4.1 修改默认口令禁用不必要远程登录系统内置账号sys是企业版初始化之后的最高权限账号默认口令在测试阶段一定要尽快改掉。执行alter user sys identified by 新密码;我一开始图省事用一个弱口令顶着结果写脚本时不小心把口令打印到了日志里虽然只是测试环境但那种感觉就像保险箱钥匙挂在门把手上。认证考试里也常考默认账号安全配置改完口令要专门commit并验证新口令生效。同时确认监听绑定地址。默认监听可能绑在本机回环地址上如果需要其他服务器通过客户端远程连接要把监听地址改成实际网卡 IP 或0.0.0.0。这个改动通常在实例配置文件的网络段里设置改完要重启数据库。4.2 建库建用户验证 Oracle 兼容特性YashanDB 对 Oracle 的兼容性是卖点之一安装完不验证一下等于没装。我先建了一个测试表空间和用户create tablespace tbs_test datafile /data/yashan/tbs_test.dbf size 2G; create user test identified by test123 default tablespace tbs_test; grant dba to test;然后切到test用户下执行几个典型的 Oracle 兼容点select sysdate from dual; select rownum, name from users; select nextval for my_seq from dual;dual表、rownum伪列、序列的这些行为我实测和 Oracle 的相似度非常高。如果你在公司做过从 Oracle 到其他国产库的迁移你会知道这套兼容能力能省掉多少改 SQL 的工作量。另外我也用 JDBC 驱动从另一台机器做了连接测试。YashanDB 提供标准 JDBC 驱动驱动包在安装目录的lib下URL 格式类似jdbc:yasdb://ip:1688/dbname。第一次用客户端连不上不要急着怀疑驱动按后面第 6 节的排查清单走一遍基本都是端口、监听、防火墙这三个地方。4.3 认证考试里关于安装部署的高频考点结合我接触到的 YashanDB 认证相关信息实操考试中安装部署环节特别喜欢问这几类问题考点易错点正确操作环境变量忘记配 YASDB_DATA初始化前确认 echo 输出初始化参数端口、字符集写错初始化前 --help 核对权限处理忘记 memlocklimits.conf 加 memlock unlimited默认账号不修改 sys 口令首次登录立即改密远程连接监听地址没改检查实例配置并重启考试环境和真实部署最大的不同是时间紧凑不会给你机会慢慢试错。所以平时练习时就要把命令背成条件反射尤其init、start、stop、yasql这几个命令之间不要有明显的停顿感。我练习时是先把所有环境配置写成一个 shell 脚本反复在自己的测试机上重置环境直到脚本一次跑通为止。5. 企业版日常运维服务化、日志与备份5.1 把数据库注册成 systemd 服务重启服务器后手动启动数据库不是不行但一个完整的部署方案应该支持开机自启。我把 YashanDB 注册成了 systemd 服务写了一个单元文件内容大概如下[Unit] DescriptionYashanDB Database Service Afternetwork.target [Service] Useryasdb Groupyasdb EnvironmentYASDB_HOME/opt/yashandb EnvironmentYASDB_DATA/data/yashan EnvironmentLD_LIBRARY_PATH/opt/yashandb/lib ExecStart/opt/yashandb/bin/yasdb start ExecStop/opt/yashandb/bin/yasdb stop Restarton-failure LimitNOFILE65535 LimitNPROC65535 [Install] WantedBymulti-user.target然后systemctl daemon-reload systemctl enable yashandb systemctl start yashandb。这里有一个细节systemd 给服务设置了独立的资源限制即使系统limits.conf里写了memlock unlimited服务文件里最好再显式声明LimitMEMLOCKinfinity否则服务方式启动时仍可能受限。测试完服务化之后我用systemctl status yashandb看了一下状态确认进程身份是yasdb这样安全性和资源隔离都满足要求了。5.2 日志体系排障先从这看YashanDB 的日志体系比很多国产库清晰我整理出下面这个对应关系日志位置解决什么问题实例告警日志log/alert_log启动、关闭、错误信息redo 日志data 目录 redo 子目录崩溃恢复慢查询日志log/slow_log性能排查审计日志log/audit_log安全审计遇到排障场景我第一反应是打开实例告警日志。如果日志里出现ORA-风格错误码说明数据库层面有明确报错比如ORA-12541之类兼容 Oracle 时错误风格相近如果日志里只是空洞的连接超时那问题往往在网络层。企业版还有一个好处是并行操作的相关日志更完整比如并行导入导出、并行 DDL都能在日志里看到每个工作线程的执行情况。调并行度时我会先开大日志级别压测完了再调回来避免日志量爆炸。5.3 备份恢复要不要现在做安装部署完成不等于万事大吉。企业版带逻辑备份和物理备份两套路径我测试时用了 SQL 层面的导出工具ys_dump -u sys -d sys -h 127.0.0.1 -p 1688 -f /backup/yashan_full.dmp这个工具会把数据目录里的逻辑对象导出成一个文件用于日常备份足够。更彻底的物理备份要配合归档日志使用简单说就是把数据文件、控制文件、redo 日志、归档目录整体复制走恢复时按时间点回放。测试机我做了逻辑备份验证生产环境建议至少一周做一次带校验的物理备份。备份恢复还有一个容易忽略的点恢复环境的版本要和备份时完全一致小版本不一致可能导致控制文件不兼容。我踩过一次从 23.4.1 备份的数据恢复到 23.4.1 没问题但想恢复到同系列的 23.4.0 就报了版本不匹配。好在报错信息很明确所以平时备份机尽量保持和线上同版本。6. 排障实录安装部署中我踩过的坑6.1 初始化失败报 Permission denied我第一遍初始化时数据目录的属主改好了但父目录/data的执行权限没放开yasdb用户进不去初始化程序报Permission denied。排查顺序su - yasdb cd /data/yashancd一执行就现原形了。解决办法是chmod ox /data然后重跑初始化。这个坑很基础但提醒我一点目录权限要查整条路径不只是最后一层。尤其是三层以上目录结构逐层namei -l /data/yashan看权限更靠谱。6.2 启动失败端口 1688 被占用第二次启动时实例一直处于启动中状态告警日志提示bind: Address already in use。排查方式是ss -lntp | grep 1688发现是被自己上一次启动失败后残留的进程占用了端口。处理办法是先看残留进程再决定是kill还是等它自然退出。这里不能盲目kill -9因为数据库进程可能正在做恢复强制干掉会留下更复杂的启动状态。正确做法是用自带的停止命令如果停止不了再考虑信号处理。确认端口释放后重新启动这次状态正常。之后我学乖了启动脚本里加了一句每次启动前先检查端口占用。6.3 远程连接超时防火墙和监听地址一起改数据库主机上本地用yasql连接是好的换到另一台机器用 JDBC 连接就超时。排查顺序是这样ping主机网络通telnet ip 1688结果显示不通firewall-cmd --list-all发现防火墙没放行放行端口后再试还是不通检查监听配置发现监听地址绑定了回环地址改监听地址重启实例远程连接成功这个案例很有代表性。很多时候大家只查防火墙忘了监听地址这个变量。用户态的问题和系统态的问题重叠在一起时按网络栈从外到内、从下到上排查最有效率。6.4 32G 内存初始化报 Cannot allocate memory初始化时指定了--memory-size 32G结果报无法分配内存。物理内存明明有 64G为什么不够原因就是前面提的memlock限制。执行ulimit -l如果显示不是unlimited那就是内存锁限制没放开。去/etc/security/limits.conf补上yasdb soft memlock unlimited yasdb hard memlock unlimited重新登录用户后再跑初始化问题解决。这个坑在国产数据库里很常见也不只 YashanDB 一家装过 OpenGauss、Doris 这类内存敏感型组件的同事应该都遇到过类似场景。6.5 常见问题速查表现象可能原因排查/解决解压包执行报错glibc 版本过低升级系统或换兼容系统初始化目录无权限父目录缺少执行权限逐层检查权限启动失败端口占用残留进程未释放ss 查端口并正常停止内存申请失败memlock 未放开limits.conf 加 unlimited远程连接失败防火墙/监听地址放行 1688 并绑定真实 IPSQL 工具连不上LD_LIBRARY_PATH 错误确认动态库加载路径授权校验失败license 未放入目录检查 license 路径与权限最后再分享一个小技巧所有安装部署流程跑完最后我会用三条命令“自检”整套环境是不是干净的yasdb status yasql sys/password127.0.0.1:1688 -e select 1 from dual; systemctl is-enabled yashandb如果 alias 和 systemd 都是 enabled再检查一遍授权文件和磁盘空间基本就能放心的进入后续的数据库初始化和业务配置阶段。我在实际练习中的体会是安装部署这类任务最怕的就是“前面环境一塌糊涂后面问题连环爆”。只要环境准备阶段按部就班、逐项验证后面运行起来会意外地顺利。这也是我写这篇记录的原因——把容易翻车的细节提前亮出来大家少踩坑。希望这些实操记录能帮到正在备考或正在做国产化数据库适配的你。