我们的文章会在微信公众号IT民工的龙马人生和博客网站 ( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
摘要
数据库交付的难点从来不在“能不能装上”,而在于能否把 OS 基线、离线介质、权限与目录、单机/YAC 形态、主备扩展、YCM/YMP 组件 这些碎片化动作,收敛为一条可审计、可回放、可复用的流水线。
本文以介绍一个 Go 单二进制工具 yinstall:运行在控制端,通过 SSH 编排目标机安装步骤;支持步骤过滤;并内置“自动找包 + 必要时上传”的能力,让“一键安装”真正做到可落地。
1)为什么 DBA 需要“一键安装”:把交付闭环固化下来
生产安装现场往往具备三个特征:
- 窗口短:上线前窗口很紧,任何手工差错都会放大成回滚风险
- 环境碎:不同 OS(RHEL7/8、UOS、Kylin)、不同网段、不同权限模型、不同离线源
- 链路复杂:单机、YAC、主备扩容、YCM/YMP 叠加部署,步骤依赖强
DBA 理想的交付链路应该是:
连通性 → OS 基线 → 软件包 → 配置生成 → 安装 → 创建/验收 → 产物留痕(日志/参数/版本)
yinstall的目标,就是把这条链路产品化。
2)yinstall 是什么:一个“可编排”的安装器,而不是脚本集合
yinstall 是一个 Go CLI,核心设计是步骤编排:
- 每个步骤都有
PreCheck / Action / PostCheck三段,可控、可审计 - 步骤过滤(精确裁剪执行范围):
-s/--include-steps:只跑指定步骤(支持范围)--exclude-steps:排除指定步骤(优先级高于 include)
- 控制端/目标端分离:控制端只需要
yinstall;目标端只需要能 SSH、能 sudo(默认--sudo=true)
更关键的是,它具备“工程化细节”:
- 软件包自动发现:可不显式指定安装包路径;工具会在目标端
--remote-software-dir(默认/data/yashan/soft)、目标端$HOME、控制端--local-software-dirs(默认./software,./pkg,并在存在时追加~/Downloads/yashan)中自动寻找“最新版本”介质,必要时上传到目标端使用。
3)快速上手:先看步骤目录(避免“上来就改系统”)
建议先列出步骤目录,确认会做哪些变更:
./yinstall os -l
./yinstall db -l
./yinstall ycm -l
./yinstall ymp -l
./yinstall clean -l
4)一键安装命令(可复制即用):单机 DB / YMP / YCM
本节只给命令行模式(不提供脚本拼接器),适合直接复制执行或固化到你自己的发布流程里。
4.1 单机安装数据库(yinstall db)
4.1.1 典型命令(带 OS 基线)
远程安装
./yinstall db \
-t 10.10.10.150 \
-u root \
-p 22 \
--ssh-password 'your-ssh-password'
本地安装:
./yinstall db \
-t 10.10.10.150
4.1.2 典型命令(跳过 OS 基线,仅做 DB 安装)
适用于:你已用
yinstall os或人工方式完成 OS 基线;希望 DB 部分可重复执行。
./yinstall db \
-t 10.10.10.150 \
-u root \
-p 22 \
--ssh-password 'your-ssh-password' \
--skip-os=true
4.2 安装 YMP(yinstall ymp)
说明:
yinstall ymp的多个介质参数(如--ymp-package)允许留空,由步骤在目标端/本地目录中自动搜寻最新版本。
4.2.1 典型命令(默认跳过 OS 基线)
远程安装
./yinstall ymp \
-t 10.10.10.150 \
-u root \
-p 22 \
--ssh-password 'your-ssh-password'
本地安装
./yinstall ymp \
-t 10.10.10.150
4.2.2 指定介质(不走自动搜包)
自动在对应目录中搜索指定的介质
./yinstall ymp \
-t 10.10.10.150 \
-u root \
-p 22 \
--ssh-password 'your-ssh-password' \
--skip-os=true \
--ymp-package "yashan-migrate-platform-23.5.3.2-linux-x86_64.zip" \
--ymp-instantclient-basic "instantclient-basic-linux.x64-19.29.0.0.0dbru.zip" \
--ymp-db-package "yashandb-23.4.7.100-linux-x86_64.tar.gz" \
--ymp-user ymp \
--ymp-user-password 'aaBB11@@33$$' \
--ymp-install-dir /opt/ymp \
--ymp-port 8090
4.3 安装 YCM(yinstall ycm)
4.3.1 sqlite3 后端(默认)
./yinstall ycm \
-t 10.10.10.150 \
-u root \
-p 22 \
--ssh-password 'your-ssh-password'
4.3.2 YashanDB 后端
最简单本地安装
./yinstall ycm \
-t 10.10.10.150
自定义远程安装
./yinstall ycm \
-t 10.10.10.150 \
-u root \
-p 22 \
--ssh-password 'your-ssh-password' \
--remote-software-dir /data/yashan/soft \
--local-software-dirs ./software,./pkg \
--skip-os=true \
--ycm-db-driver yashandb \
--ycm-db-url "10.10.10.150:1688" \
--ycm-db-admin-user yasman \
--ycm-db-admin-password 'your-yasman-password' \
--ycm-install-dir /opt \
--ycm-port 9060
5)参数详解(按真实 CLI 分组)
本节按参数归类解释含义,便于你把“一键命令”标准化成发布模板。
5.1 全局参数(所有子命令通用)
5.1.1 目标与 SSH
-t, --targets:目标主机列表(逗号分隔)。不指定时会走本地执行(localhost)。-u, --ssh-user:SSH 用户,默认root。-p, --ssh-port:SSH 端口,默认22。--yasboot-ssh-port:传给yasboot的 SSH 端口;默认与--ssh-port一致。--ssh-auth:认证方式,password或key。--ssh-password:SSH 密码(--ssh-auth=password时使用)。--ssh-key-path:私钥路径(--ssh-auth=key时使用)。
5.1.2 介质与日志
--remote-software-dir:目标机的软件目录(默认/data/yashan/soft)。用于自动搜包(远端优先)。--local-software-dirs:控制端本地软件目录列表(逗号分隔)。用于自动搜包与上传。--log-dir:日志目录(默认logs)。每次运行会生成 session/debug 两类日志。
5.1.3 步骤过滤与强制执行(高级用法)
-l, --list-steps:打印该子命令的步骤目录并退出。-s, --include-steps:仅执行指定步骤(支持范围,如E-011-表示从E-011到最后)。--exclude-steps:跳过指定步骤(与 include 冲突时,exclude 优先生效)。-f, --force:强制执行所有步骤(跳过部分前置保护逻辑;危险)。--force-steps:只强制指定步骤。--force-delete-user:允许强制执行时删除并重建已存在用户/组(危险,生产慎用)。
5.2 yinstall db(数据库安装)
5.2.1 OS 基线开关
--skip-os:是否跳过 OS 基线准备。false表示会做 OS 基线;true表示仅做连通性检查 + DB 安装部分。--os-yum-mode:依赖安装时 YUM/DNF 模式:none:使用系统现有 repo(常见:客户已配好内网源)local-iso:使用 ISO 挂载配置本地源(适合纯离线环境)online:使用互联网源(生产一般不建议)
--os-iso-device:local-iso时使用的 ISO 设备/路径(默认/dev/cdrom,也可给 ISO 文件名/路径)。
5.2.2 DB 关键参数
--db-port:数据库起始端口(默认1688)。--db-sys-password:数据库 SYS 密码(创建实例用)。--db-character-set:字符集(如utf8、gb18030等,大小写不敏感)。--db-memory-percent:内存百分比(0-100),用于生成推荐配置。--os-user:数据库产品用户(默认yashan)。--os-user-password:产品用户密码(远程场景下yasboot生成配置会用到)。
5.3 yinstall ymp(YMP 安装)
--skip-os:是否跳过 OS 基线准备(默认true,只做最小连通性检查 + YMP 安装相关步骤)。--ymp-user:YMP 系统用户(默认ymp)。--ymp-user-password:YMP 用户密码(默认aaBB11@@33$$)。--ymp-install-dir:安装目录(默认/opt/ymp;若端口不是 8090 且未显式指定,工具可能自动拼接端口后缀)。--ymp-port:YMP Web 端口(默认8090)。其他端口自动计算:db=port+1,yasom=port+3,yasagent=port+4。--ymp-db-mode:YMP 内置库模式:yashandb(默认)或mysql。
5.3.1 介质参数(可选,支持自动搜包)
--ymp-package:YMP zip 包路径(可选,未指定则自动找最新)。--ymp-instantclient-basic:Oracle instantclient basic zip(可选,未指定则自动找最新)。--ymp-instantclient-sqlplus:Oracle instantclient sqlplus zip(可选)。--ymp-db-package:YashanDB 安装包(供内置库使用,可选,未指定则自动找最新)。
5.3.2 JDK 参数
--ymp-jdk-enable:是否安装 JDK(默认false:只校验)。--ymp-jdk-version:期望 JDK 版本(8/11/17)。--ymp-jdk-package:JDK 安装包路径(当--ymp-jdk-enable=true时必填)。
5.4 yinstall ycm(YCM 安装)
--skip-os:是否跳过 OS 基线准备(默认true)。--ycm-install-dir:安装目录(默认/opt)。--ycm-deploy-file:deploy.yml 路径(默认<ycm-install-dir>/ycm/etc/deploy.yml)。--ycm-port:YCM Web 端口(默认9060)。--ycm-db-driver:后端数据库:sqlite3(默认)或yashandb。--ycm-db-url:YashanDB 连接串(当--ycm-db-driver=yashandb时必填)。--ycm-db-admin-user:YashanDB 管理用户名(默认yasman)。--ycm-db-admin-password:YashanDB 管理密码(当--ycm-db-driver=yashandb时必填)。
6)清理(yinstall clean):什么时候用、怎么用、风险是什么
yinstall clean 用于清理已部署的组件(DB/YCM/YMP/standby 等)。它是“回滚/重装”场景的最后手段:清理往往意味着删除目录、停止服务、移除用户/环境文件,需要按范围精确执行。
6.1 先看清理步骤目录
./yinstall clean -l
6.2 清理 YMP(示例)
说明:具体 clean 参数以
./yinstall clean --help为准;常见做法是指定清理类型与安装目录(例如 YMP home)。
./yinstall clean \
-t 10.10.10.150 \
-u root \
-p 22 \
--ssh-password 'your-ssh-password' \
--type ymp \
--ymp-home /opt/ymp
6.3 清理 DB(示例)
说明:DB 清理默认类型就是
db,也可以显式写--type db。请确保--yasdb-home/--yasdb-data/--cluster-name与安装时一致。
./yinstall clean \
-t 10.10.10.150 \
-u root \
-p 22 \
--ssh-password 'your-ssh-password' \
--type db \
--yasdb-home /data/yashan/yasdb_home \
--yasdb-data /data/yashan/yasdb_data \
--yasdb-log /data/yashan/log \
--cluster-name yashandb \
--os-user yashan


YashanDB一键安装工具,支持DB、YCM、YMP、新增备库:等您坐沙发呢!