dm_installer
达梦数据库(DM8)自动化安装工具,让开发者和运维人员都能用最少的操作完成 DM8 部署。
两类用户,两种入口
开发者 — 一行命令
本地或测试机快速拉起 DM8,不安装任何工具:
curl -fsSL https://raw.githubusercontent.com/guangl/dm-database-installer/main/install.sh | bash
纯 shell 脚本,自动检测平台、下载安装包、静默安装、注册 systemd 服务、输出密码凭证卡片。
DBA / 运维 — TOML 配置驱动
安装 dm_installer 二进制,用配置文件描述目标环境,支持单机、SSH 远程、主备集群:
dm_installer init standalone # 生成配置模板
dm_installer install # 按模板安装
核心特性
| 特性 | 说明 |
|---|---|
| 自动选包 | 根据 Linux 发行版(Kylin / UOS / CentOS / RHEL / Ubuntu / Debian)和架构(x86_64 / aarch64)精确匹配 DM8 安装包 |
| SSH 远程安装 | 在控制机上一键部署到目标服务器,SFTP 上传带进度条 |
| 主备集群(DW) | 批量推送安装包、自动生成并同步 dm.ini / dmarch.ini / dmmal.ini / dmwatcher.ini |
| 断点续传 | 安装中断后重跑,自动从检查点恢复,已完成步骤不重复 |
| 配置驱动 | TOML 文件,dm_installer init 生成带注释的完整模板 |
| 配置校验 | dm_installer validate 在安装前检查所有语义约束 |
| 跨平台二进制 | Linux x86_64 / aarch64(musl 静态链接)、macOS Apple Silicon |
源码
github.com/guangl/dm-database-installer
安装
系统要求
| 平台 | 架构 | 备注 |
|---|---|---|
| Linux | x86_64 | musl 静态链接,无 glibc 依赖 |
| Linux | aarch64 | musl 静态链接,无 glibc 依赖 |
| macOS | Apple Silicon | 11.0+ |
方式一:一行命令直接安装 DM8(开发者推荐)
纯 shell 脚本,零依赖,无需安装任何工具:
curl -fsSL https://raw.githubusercontent.com/guangl/dm-database-installer/main/install.sh | bash
所有安装参数均可通过同名环境变量覆盖,无需修改脚本:
# 自定义安装目录和端口
DM_INSTALL_PATH=/opt/dmdbms DM_PORT=5237 bash -c \
"$(curl -fsSL https://raw.githubusercontent.com/guangl/dm-database-installer/main/install.sh)"
完整环境变量列表见配置参考 → 环境变量。
脚本完成后会打印凭证卡片,例如:
╔════════════════════════════════════════╗
║ DM8 安装完成 ║
╠════════════════════════════════════════╣
║ SYSDBA 密码: Dm#aB3kx9P ║
║ SYSAUDITOR 密码: Gx7@mNrQ2L ║
║ ║
║ 连接命令: ║
║ disql SYSDBA/Dm#aB3kx9P@localhost ║
╚════════════════════════════════════════╝
请立即保存密码,脚本不会再次显示。
仅支持 Linux(x86_64 / aarch64)。macOS 用户请使用方式二或三安装
dm_installer工具。
方式二:安装 dm_installer 工具(自定义 / 集群场景)
适合需要自定义参数、SSH 远程部署、主备集群等精细化场景。
Linux / macOS
curl --proto '=https' --tlsv1.2 -LsSf \
https://github.com/guangl/dm-database-installer/releases/latest/download/dm-database-installer-installer.sh | sh
安装完成后重新打开终端或执行:
source ~/.cargo/env
验证安装:
dm_installer --version
方式三:从 GitHub Releases 手动下载
访问 Releases 页面,下载对应平台的压缩包:
| 文件名 | 平台 |
|---|---|
dm_installer-x86_64-unknown-linux-musl.tar.gz | Linux x86_64 |
dm_installer-aarch64-unknown-linux-musl.tar.gz | Linux ARM64 |
dm_installer-aarch64-apple-darwin.tar.gz | macOS Apple Silicon |
解压后将 dm_installer 放入 $PATH 中的任意目录。
方式四:从 crates.io 安装
需要已安装 Rust toolchain(rustup.rs):
cargo install dm-database-installer
方式五:从源码编译
git clone https://github.com/guangl/dm-database-installer.git
cd dm-database-installer
cargo build --release
# 二进制位于 target/release/dm_installer
快速开始
路径一:一行命令(最快)
适合开发者在本地或测试机快速拉起 DM8,无需安装任何工具:
curl -fsSL https://raw.githubusercontent.com/guangl/dm-database-installer/main/install.sh | bash
脚本自动检测系统架构与发行版,下载并静默安装 DM8,注册 systemd 服务,安装完成后打印 SYSDBA / SYSAUDITOR 密码。
需要自定义安装目录或端口时,通过环境变量传入即可:
DM_INSTALL_PATH=/opt/dmdbms DM_PORT=5237 bash -c \
"$(curl -fsSL https://raw.githubusercontent.com/guangl/dm-database-installer/main/install.sh)"
仅支持 Linux(x86_64 / aarch64)。需要集群部署或更多精细配置,使用路径二。
路径二:dm_installer 工具
先按安装说明安装 dm_installer。
本地单机安装
# 1. 在当前目录生成配置模板
dm_installer init standalone
# 生成的文件:
# config.toml — 通用配置(type = "standalone")
# standalone.toml — 单机特有配置(端口、路径、字符集等)
# 2. 按需修改 standalone.toml(默认值通常够用,端口 5236 可改)
# 默认安装路径:/home/dmdba/dmdbms
# 3. 安装(自动下载适配当前系统的 DM8 安装包)
dm_installer install
安装完成后,工具会输出随机生成的 SYSDBA / SYSAUDITOR 密码,请妥善保存。
SSH 远程安装
在控制机上部署到目标服务器,无需手动登录目标机器。
# 1. 生成配置模板
dm_installer init standalone
编辑 standalone.toml,取消注释 [ssh_target] 节并填写目标信息:
[install]
install_path = "/home/dmdba/dmdbms"
data_path = "/home/dmdba/dmdbms/data"
[instance]
port = 5236
[ssh_target]
host = "192.168.1.100" # 目标服务器 IP 或域名
ssh_port = 22
user = "root"
# password 不填则安装时提示输入(推荐,避免明文存储密码)
max_retries = 3
# 2. 安装
dm_installer install
工具会自动:
- 检测目标服务器的 OS 和架构,下载对应安装包
- 通过 SFTP 上传安装包(带进度条)
- 在目标机器上静默安装并注册服务
主备集群安装(DW)
# 1. 生成配置模板
dm_installer init dw
# 生成的文件:
# config.toml — 通用配置(type = "dw")
# dw.toml — 主备特有配置(节点列表、OGUID、端口等)
# 2. 编辑 config.toml:指定本地安装包路径(集群必须预先下载)
# installer_package = "/path/to/dm8_setup_rh7_64_ent_8.1.3.100.iso"
# 3. 编辑 dw.toml:填写各节点信息(IP、SSH 凭证、OGUID 等)
# 4. 验证配置
dm_installer validate
# 5. 部署(控制机需能 SSH 访问所有节点)
dm_installer install
详细配置说明见集群部署。
验证配置
在实际安装前验证配置文件的语法和语义:
# 验证当前目录的 config.toml(及对应特有配置文件)
dm_installer validate
# 或指定路径
dm_installer validate --config /path/to/config.toml
常见语义检查项:page_size 枚举值(4/8/16/32)、charset 枚举值(0/1/2)、端口冲突、节点 SSH 凭证完整性、集群 OGUID 范围等。
断点续传
安装中途因网络或其他原因中断时,直接重跑即可:
dm_installer install
工具会检测当前目录的 dm_installer_checkpoint.json,跳过已完成的步骤,从中断处继续。
若需要强制重新开始(忽略检查点):
rm dm_installer_checkpoint.json
dm_installer install
配置参考
dm_installer 使用两个配置文件,均放在同一目录下,由 dm_installer init 生成带注释的模板。
| 文件 | 说明 |
|---|---|
config.toml | 通用配置:安装类型、安装包路径、日志级别 |
standalone.toml / dw.toml / rws.toml / dsc.toml | 各类型特有配置 |
执行 dm_installer install 时,工具从当前目录读取 config.toml,再根据其中的 type 字段加载对应的特有配置文件。
config.toml
# 安装类型(必填)
# standalone — 单机安装
# dw — 主备集群(Data Watch)
# rws — 读写分离集群(开发中)
# dsc — 共享存储集群(开发中)
type = "standalone"
# DM8 安装包本地路径或下载链接,与 installer_url 二选一
# 都不填则自动检测平台并下载(集群模式按 primary 节点平台检测)
# 确定后会将此文件推送到各节点再静默安装
# installer_package = "/path/to/dm8_setup_rh7_64_ent_8.1.3.100.iso"
# 日志级别:trace / debug / info / warn / error
log_level = "info"
standalone.toml
[install] — 安装路径
| 键 | 默认值 | 说明 |
|---|---|---|
install_path | /home/dmdba/dmdbms | DM 程序安装目录 |
data_path | /home/dmdba/dmdbms/data | 数据文件目录 |
backup_path | — | 数据库备份目录(可选)。未配置、或与 data_path/归档目录路径重叠时,安装完成后会输出配置建议提醒 |
[instance] — 实例参数
| 键 | 默认值 | 有效值 | 说明 |
|---|---|---|---|
instance_name | DMSERVER | 任意字符串 | 实例名称 |
port | 5236 | 1–65535 | 数据库监听端口 |
page_size | 32 | 4 / 8 / 16 / 32 | 页大小(KB),建议生产环境使用 32 |
charset | 1 | 0 / 1 / 2 | 0=GB18030 1=UTF-8 2=EUC-KR |
case_sensitive | true | true / false | SQL 标识符大小写敏感 |
extent_size | 32 | 16 / 32 | 区段大小(页数) |
[ssh_target] — SSH 远程目标(可选)
省略此节时在本机安装。填写后,工具会通过 SSH 将安装包推送到目标服务器并在远端执行安装。
| 键 | 默认值 | 说明 |
|---|---|---|
host | — | 目标主机 IP 或域名(必填) |
ssh_port | 22 | SSH 端口 |
user | — | SSH 用户名(必填) |
password | — | SSH 密码;不填则安装时提示输入(推荐) |
max_retries | 3 | SSH 连接失败重试次数 |
retry_interval_secs | 5 | 重试间隔(秒) |
完整示例:
[install]
install_path = "/home/dmdba/dmdbms"
data_path = "/home/dmdba/dmdbms/data"
backup_path = "/home/dmdba/dmdbms/backup"
[instance]
instance_name = "DMSERVER"
port = 5236
page_size = 32
charset = 1
case_sensitive = true
extent_size = 32
[ssh_target]
host = "192.168.1.100"
ssh_port = 22
user = "root"
max_retries = 3
retry_interval_secs = 5
dw.toml
主备集群特有配置。每个节点对应一条 [[nodes]] 条目。
顶层字段
| 键 | 默认值 | 说明 |
|---|---|---|
oguid | 当天 YYYYMMDD(如 20260623) | 守护系统全局唯一标识,同一守护系统内所有实例必须一致,范围 0–2147483647 |
mon_confirm | true | true=确认监视器(参与自动切换仲裁);false=通知监视器(仅通知,不参与仲裁) |
[[nodes]] — 节点配置
每个节点必须包含以下字段:
| 键 | 默认值 | 说明 |
|---|---|---|
role | — | "primary" 或 "standby"(必填,且只能有一个 primary) |
host | — | 节点 IP 或域名(必填) |
instance_name | — | 实例名称,同一集群内必须唯一(必填) |
install_path | /home/dmdba/dmdbms | DM 程序安装目录(与 standalone 默认一致) |
data_path | /home/dmdba/dmdbms/data | 数据文件目录(与 standalone 默认一致) |
arch_path | {data_path}/arch | 本节点本地归档目录 |
port | 5236 | 数据库监听端口 |
mal_port | 5237 | MAL 通信端口(不能与 port 相同) |
dw_port | 5238 | 数据守护监听端口(即 MAL_DW_PORT,dmmonitor 也用此端口) |
inst_dw_port | 5239 | 实例向守护进程注册的端口 |
page_size | 32 | 页大小(KB):4 / 8 / 16 / 32 |
charset | 1 | 0=GB18030 1=UTF-8 2=EUC-KR |
case_sensitive | true | SQL 标识符大小写敏感 |
extent_size | 32 | 区段大小(页数):16 / 32 |
sync_mode | "realtime" | 仅 standby 节点有意义。"realtime"(实时备库,REALTIME,加入 dmwatcher 全局守护组、参与监视器仲裁与自动切换)/ "sync"(同步备库,SYNC,本地守护)/ "async"(异步备库,ASYNC,本地守护,需配套 arch_timer_name) |
arch_timer_name | "RT_TIMER" | 仅 sync_mode = "async" 时生效,引用 DM 内置定时器名 |
[nodes.backup] — 节点备份作业配置
字段与 standalone.toml 的 [backup] 段 完全一致,每个节点独立配置(必填,用于在该节点上创建全备/增量备份作业)。
| 键 | 默认值 | 说明 |
|---|---|---|
backup_path | — | 数据库备份目录(必填) |
retain_days | 15 | 备份保留天数,至少 15 天 |
full_backup_interval_days | 7 | 全量备份间隔天数 |
full_backup_time | "02:00:00" | 全量备份执行时间 |
incr_backup_time | "02:00:00" | 增量备份执行时间 |
clean_time | "05:00:00" | 过期备份清理执行时间 |
[nodes.ssh] — 节点 SSH 凭证
每个节点的 [nodes.ssh] 节描述控制机如何 SSH 到该节点。
| 键 | 默认值 | 说明 |
|---|---|---|
user | — | SSH 用户名(必填) |
identity_file | — | SSH 私钥路径(与 password 二选一) |
password | — | SSH 密码(与 identity_file 二选一;不填则安装时提示) |
[mal] — MAL 通信层(dmmal.ini,可选)
每节点的 MAL_INST_NAME/MAL_HOST/MAL_PORT 等由 [[nodes]] 自动推导,以下为全局参数,省略则使用默认值。
| 键 | 默认值 | 说明 |
|---|---|---|
mal_check_interval | 60 | MAL 链路检测间隔(秒),0=禁用,范围 0–1800 |
mal_conn_fail_interval | 60 | 判定连接失败的时长阈值(秒),范围 2–1800 |
mal_login_timeout | 60 | 节点间登录超时(秒),范围 3–1800 |
mal_buf_size | 100 | 单连接缓冲区上限(MB),0=不限 |
mal_sys_buf_size | 0 | 系统全局 MAL 内存上限(MB),0=不限 |
mal_compress_level | 0 | 压缩级别:0=不压缩,1–9=lz,10=snappy;所有节点必须一致 |
[watcher] — 数据守护(dmwatcher.ini,可选)
| 键 | 默认值 | 说明 |
|---|---|---|
dw_mode | "MANUAL" | "MANUAL"(需人工介入)/ "AUTO"(故障自动切换) |
dw_error_time | 60 | 守护进程故障确认时间(秒),范围 3–1800 |
inst_error_time | 60 | 数据库实例故障确认时间(秒),范围 3–1800 |
inst_recover_time | 60 | 备库恢复检测间隔(秒),范围 3–86400 |
inst_auto_restart | 0 | 实例崩溃后自动重启:0=否,1=是 |
inst_restart_cnt | 0 | 最大连续重启次数,0=不限制 |
dw_open_force_timeout | 0 | MANUAL 模式无监视器时强制 Open 超时(秒),0=永久等待 |
dw_failover_force | 1 | 无监视器时允许主库强制 Open:1=允许,0=禁止 |
dw_reconnect | 1 | 断链重连策略:0=不重连,1=重连继续守护,2=重连降为 OPEN |
rlog_send_threshold | 0 | 实时归档发送延迟告警阈值(秒),0=不告警 |
rlog_apply_threshold | 0 | 备库日志应用延迟告警阈值(秒),0=不告警 |
inst_service_ip_check | 0 | 检测主库对外服务 IP 可达性:0=不检测,1=检测 |
[arch] — 日志归档(dmarch.ini,可选)
| 键 | 默认值 | 说明 |
|---|---|---|
arch_wait_apply | 1 | 同步备库是否等待日志应用后再回应主库:1=等待,0=不等待 |
arch_reserve_time | 0 | 本地归档保留时长(分钟),0=不自动清理 |
arch_send_policy | 0 | 主库发送策略:0=立即等待备库响应,1=先写本地再发送 |
arch_recover_time | 60 | 同步备库归档状态检测间隔(秒),范围 1–86400 |
arch_file_size | 1024 | 本地归档单文件大小(MB),范围 64–2048 |
arch_space_limit | 不填=自动 | 本地归档总空间上限(MB):不填时自动取归档目录所在磁盘总容量的 20%,探测失败时退回默认值 20480(20GB);显式填 0=不限;其他正整数=固定上限 |
[monitor] — 确认监视器(dmmonitor.ini,可选)
| 键 | 默认值 | 说明 |
|---|---|---|
mon_log_path | "." | 监视器日志输出目录 |
mon_log_interval | 60 | 日志刷新间隔(秒),范围 1–600 |
mon_log_file_size | 32 | 单个日志文件大小上限(MB),范围 1–2048 |
mon_log_space_limit | 4096 | 日志总空间上限(MB),0=不限 |
完整示例:
# 守护系统全局唯一标识(主备节点必须相同),省略则默认为当天 YYYYMMDD
oguid = 453331
# ── 主节点 ────────────────────────────────────────────────
[[nodes]]
role = "primary"
host = "192.168.1.10"
instance_name = "DM01"
install_path = "/home/dmdba/dmdbms"
data_path = "/home/dmdba/dmdbms/data"
port = 5236
mal_port = 5237
dw_port = 5238
inst_dw_port = 5239
page_size = 32
charset = 1
case_sensitive = true
extent_size = 32
[nodes.backup]
backup_path = "/home/dmdba/dmdbms/backup"
retain_days = 15
full_backup_interval_days = 7
full_backup_time = "02:00:00"
incr_backup_time = "02:00:00"
clean_time = "05:00:00"
[nodes.ssh]
user = "root"
identity_file = "~/.ssh/id_rsa"
# password = "your_password" # 与 identity_file 二选一
# ── 备节点 ────────────────────────────────────────────────
[[nodes]]
role = "standby"
host = "192.168.1.11"
instance_name = "DM02"
# sync_mode 可省略,默认 "realtime";也可设为 "sync" 或 "async"(async 需配套 arch_timer_name)
install_path = "/home/dmdba/dmdbms"
data_path = "/home/dmdba/dmdbms/data"
port = 5236
mal_port = 5237
dw_port = 5238
inst_dw_port = 5239
page_size = 32
charset = 1
case_sensitive = true
extent_size = 32
# standby 节点无需配置 [nodes.backup],备份作业由主库同步过来
[nodes.ssh]
user = "root"
identity_file = "~/.ssh/id_rsa"
# ── [mal]/[watcher]/[arch]/[monitor] 均可省略,全部走默认值 ──
# [mal]
# mal_check_interval = 60
#
# [watcher]
# dw_mode = "MANUAL"
#
# [arch]
# arch_space_limit = 20480 # 不填则自动取磁盘总容量的 20%
#
# [monitor]
# mon_log_space_limit = 4096
环境变量
install.sh 快速安装脚本
curl | bash 脚本的所有参数均可通过同名环境变量覆盖:
| 变量 | 默认值 | 说明 |
|---|---|---|
DM_INSTALL_PATH | /home/dmdba/dmdbms | 程序安装目录 |
DM_DATA_PATH | $DM_INSTALL_PATH/data | 数据文件目录(默认跟随安装目录) |
DM_PORT | 5236 | 监听端口 |
DM_INSTANCE | DMSERVER | 实例名称 |
DM_DB_NAME | DAMENG | 数据库名称 |
DM_PAGE_SIZE | 32 | 页大小(KB):4 / 8 / 16 / 32 |
DM_EXTENT_SIZE | 32 | 区段大小(页数):16 / 32 |
DM_CHARSET | 0 | 字符集:0=GB18030 1=UTF-8 2=EUC-KR |
DM_CASE_SENSITIVE | Y | SQL 标识符大小写敏感:Y / N |
用法示例:
# 只改安装目录(数据目录自动变为 /opt/dmdbms/data)
DM_INSTALL_PATH=/opt/dmdbms bash -c \
"$(curl -fsSL https://raw.githubusercontent.com/guangl/dm-database-installer/main/install.sh)"
# 同时指定多个参数
DM_INSTALL_PATH=/opt/dmdbms DM_DATA_PATH=/data/dm DM_PORT=5237 bash -c \
"$(curl -fsSL https://raw.githubusercontent.com/guangl/dm-database-installer/main/install.sh)"
# export 后 pipe 方式
export DM_INSTALL_PATH=/opt/dmdbms
curl -fsSL https://raw.githubusercontent.com/guangl/dm-database-installer/main/install.sh | bash
dm_installer 工具
| 变量 | 说明 |
|---|---|
RUST_LOG | 覆盖日志级别,例如 RUST_LOG=debug dm_installer install |
集群部署
支持的集群类型
| 类型 | init 命令 | config.toml type | 状态 |
|---|---|---|---|
| 主备(DW) | dm_installer init dw | dw | ✅ 已支持 |
| 读写分离(RWS) | dm_installer init rws | rws | 🚧 开发中 |
| 共享存储(DSC) | dm_installer init dsc | dsc | 🚧 开发中 |
主备集群(DW)
前提条件
- 控制机可以通过 SSH 访问所有节点(22 端口,或自定义端口)
- 各节点已安装
unzip - 提前在控制机上下载好 DM8 安装包(
.iso文件)
操作步骤
第一步:生成配置模板
dm_installer init dw
生成两个文件:
config.toml— 通用配置,设置type = "dw"和安装包路径dw.toml— 节点列表,含各节点 IP、端口、SSH 凭证
第二步:编辑 config.toml
安装包来源三选一(与单机安装一致):本地文件、自定义下载链接,或都不填自动检测 primary 节点平台后下载。下载/确定后会推送到各节点:
type = "dw"
# 三选一,都不填则自动检测下载
installer_package = "/path/to/dm8_setup_rh7_64_ent_8.1.3.100.iso"
# installer_url = "https://download.example.com/dm8.zip"
第三步:编辑 dw.toml
填写节点信息(参考配置参考 — dw.toml中的字段说明):
oguid = 453331
[[nodes]]
role = "primary"
host = "192.168.1.10"
instance_name = "DM01"
install_path = "/home/dmdba/dmdbms"
data_path = "/home/dmdba/dmdbms/data"
port = 5236
mal_port = 5237
dw_port = 5238
inst_dw_port = 5239
page_size = 32
charset = 1
case_sensitive = true
extent_size = 32
[nodes.backup]
backup_path = "/home/dmdba/dmdbms/backup"
retain_days = 15
full_backup_interval_days = 7
full_backup_time = "02:00:00"
incr_backup_time = "02:00:00"
clean_time = "05:00:00"
[nodes.ssh]
user = "root"
identity_file = "~/.ssh/id_rsa"
[[nodes]]
role = "standby"
host = "192.168.1.11"
instance_name = "DM02"
# sync_mode 可省略,默认 "realtime"(实时备库,参与自动切换);也可设为 "sync"/"async"
install_path = "/home/dmdba/dmdbms"
data_path = "/home/dmdba/dmdbms/data"
port = 5236
mal_port = 5237
dw_port = 5238
inst_dw_port = 5239
page_size = 32
charset = 1
case_sensitive = true
extent_size = 32
# standby 节点无需配置 [nodes.backup],备份作业由主库同步过来
[nodes.ssh]
user = "root"
identity_file = "~/.ssh/id_rsa"
第四步:验证配置
dm_installer validate
验证内容包括:
- 节点列表非空
- 恰好一个
primary节点 oguid在 0–2147483647 范围内- 每个节点
mal_port不与port冲突 - 每个节点至少提供
identity_file或password之一 page_size为 4/8/16/32,charset为 0/1/2,extent_size为 16/32instance_name在集群内唯一- primary 节点
backup_path已配置且retain_days至少 15 天 - 异步备库(
sync_mode = "async")的arch_timer_name不能为空
validate 会彩色分栏打印出最终生效的完整配置(含 dmwatcher.ini/dmmal.ini/dmarch.ini/dmmonitor.ini 各参数及对应原始 ini 配置项),不实际执行安装,便于在部署前确认参数是否符合预期。
第五步:部署
dm_installer install
部署流程
工具按官方数据守护搭建文档的步骤顺序自动完成:
- 连接并预检:并行检查所有节点的磁盘空间、端口占用、内存/CPU、SELinux/ulimit
- 环境准备:创建 dmdba 用户、关闭 SELinux/THP/防火墙、内核参数调优等(与单机安装相同)
- 上传安装包:逐节点 SFTP 上传(带进度条)
- 静默安装:在各节点执行
DMInstall.bin静默安装 DM8 - dminit 初始化:在各节点(primary 与 standby 均)执行
dminit各自初始化一个新实例 - 备份还原同步备库数据:在 primary 上用
dmrman做一次脱机全量备份,经控制机中转打包传输到每个 standby,再在 standby 上dmrman执行 RESTORE + RECOVER,使备库与主库数据基线一致 - 分发主备守护配置:
dm.ini追加MAL_INI=1、ARCH_INI=1、DW_INACTIVE_INTERVAL、ENABLE_OFFLINE_TS、RLOG_SEND_APPLY_MON等参数dmmal.ini(MAL 通信列表,各节点相同)dmarch.ini(本地归档 + 指向对端的归档,类型按对端sync_mode决定:realtime→REALTIME,sync→SYNC,async→ASYNC+ARCH_TIMER_NAME;本地归档空间上限不填时自动取磁盘总容量的 20%)dmwatcher.ini(数据守护配置;DW_TYPE按本节点sync_mode决定:primary 与 realtime 备库为GLOBAL,sync/async 备库为LOCAL,不参与自动切换)
- 以 Mount 方式启动数据库并设置角色:primary 先以
dmserver dm.ini mount启动,通过 disql 执行sp_set_oguid与ALTER DATABASE PRIMARY;随后并发对 standby 执行相同流程(角色改为STANDBY) - 启动守护进程与监视器:各节点启动
dmwatcher(自动将 Mount 状态的实例切换为 Open),并在第一个 standby 节点启动dmmonitor确认监视器(集群无 standby 时 fallback 到 primary;监视器本身可以共置于任意节点,与该节点自身的sync_mode无关);dmmonitor.ini的仲裁列表(MON_DW_IP)只包含GLOBAL类型节点(primary + realtime 备库),sync/async 备库不参与 - 配置备份作业 / 开启 SQL 日志 / 应用参数优化:在每个节点上创建全备/增量备份作业、开启 SVR_LOG、执行官方自动参数调整脚本(调整后以 Mount 模式重启 dmserver 生效)
断点续传
集群部署同样支持断点续传。中断后直接重跑:
dm_installer install
工具会从中断的步骤继续,已完成的节点不会重复处理。第 8 步(启动数据库)中 primary 先于 standby 的顺序约束始终保留,不做更细粒度的拆分续传。
读写分离集群(开发中)
dm_installer init rws
生成 config.toml(type = "rws")和 rws.toml 模板。
当前版本仅生成配置模板,部署逻辑尚未实现。rws.toml 结构与 dw.toml 相同,备节点需额外设置 read_only = true:
[[nodes]]
role = "standby"
read_only = true
# ... 其余字段同 dw.toml
共享存储集群 DSC(开发中)
dm_installer init dsc
生成 config.toml(type = "dsc")和 dsc.toml 模板。
当前版本仅生成配置模板,部署逻辑尚未实现。dsc.toml 在 dw.toml 基础上增加顶层字段 shared_storage(SAN 裸设备或 NFS 挂载点路径):
oguid = 453331
shared_storage = "/dev/sdc"
[[nodes]]
# ... 同 dw.toml
更新日志
Unreleased
新增
- 三种备库类型:
dw.toml备库节点新增sync_mode字段,支持realtime(默认,参与自动切换)/sync(同步备库)/async(异步备库,需配套arch_timer_name),对应dmwatcher.ini的DW_TYPE(GLOBAL/LOCAL)与dmmonitor.ini仲裁列表自动收敛 dw.toml新增[monitor]配置段,dmmonitor.ini的日志参数(路径/间隔/大小/空间上限)不再硬编码[arch]段arch_space_limit改为可选:不填自动取磁盘总容量的 20%,探测失败时退回默认值 20480 MB(20GB)dm_installer validate输出重做:彩色分栏展示完整生效配置,新增此前缺失的监视器配置展示
变更
dw.toml部分默认值调整:故障/连接相关超时统一改为 60 秒,mon_log_space_limit默认改为 4096 MBdm_installer init生成的模板新增"速览"区块,汇总常改字段(TOML 结构不变)
[2.0.0] - 2026-06-23
新增
- 主备集群(DW)安装支持:
dm_installer init dw生成配置模板,dm_installer install按官方数据守护搭建文档自动完成整套主备搭建(预检→环境准备→安装→dminit→备份还原同步备库数据→分发守护配置→Mount 模式启动并设置角色→注册并启动dmserver/dmwatcher/dmmonitor三个 systemd 服务→备份作业/SQL 日志/参数优化) - 集群断点续传:按节点维度的检查点覆盖每个独立步骤,中断后重跑自动跳过已完成部分
dw.toml的oguid可省略,默认当天YYYYMMDD;新增[nodes.backup](仅 primary 需配置,备份作业由主库自动同步到备库)dm_installer validate支持校验dw.toml(节点/oguid/端口冲突/SSH 凭证/instance_name唯一性/backup_path等)
变更
- 主版本号升级至 2.0.0:单机安装与主备集群安装并列为两条主路径
dw.toml节点默认值与standalone.toml对齐,仅集群专属字段保留差异
[1.2.3] - 2026-06-21
修复
- v1.2.2 仍未生效:target-scoped 的
CARGO_TARGET_*_RUSTFLAGS被dist build内部设置的裸RUSTFLAGS整体覆盖。改为在构建脚本中按目标条件直接export RUSTFLAGS,确保静态链接 flag 真正传给 rustc
[1.2.2] - 2026-06-21
修复
- v1.2.1 仍未完全修复 musl 动态链接问题:单独开启
crt-static与 musl target 默认的 PIE 结合产生 static-pie,旧版 musl-gcc 对其支持不完整,实际仍是动态链接。现已同时关闭 PIE 并在 CI 中通过RUSTFLAGS强制生效,产出完全静态的二进制
[1.2.1] - 2026-06-21
修复
- musl 发布产物实际为动态链接:v1.2.0 的
x86_64-unknown-linux-musl/aarch64-unknown-linux-musl二进制因未显式开启crt-static,依赖/lib/ld-musl-*.so.1动态加载器,在 CentOS 等 glibc 发行版上报bad ELF interpreter,现已修复为完全静态链接
[1.2.0] - 2026-06-21
新增
- 单机安装支持
backup_path配置:standalone.toml的[install]段新增可选backup_path字段,用于指定数据库备份目录 - 安装完成后的配置建议检查:自动检查备份目录是否配置、备份/归档目录是否与数据目录路径重叠(同盘风险),并在安装完成后输出提醒
1.1.0 - 2026-06-16
新增
install.sh支持非 root sudo 用户:具有 sudo 权限的普通用户可直接运行安装脚本,特权操作自动通过sudo执行
变更
- Linux 二进制改用 musl 静态链接:无 glibc 版本依赖,可在任意 Linux 发行版运行
- SSH 远程单机安装重构:提升远端推送稳定性、错误提示和断点续传可靠性
- 移除归档模式:
install.sh不再默认开启归档(面向开发环境) - 主备集群配置类型从
primary-standby重命名为dw:config.toml中type = "dw",对应特有配置文件改为dw.toml init子命令扁平化:dm_installer init dw(原dm_installer init cluster primary-standby)
修复
install.sh:多处sudo权限问题修复(dminit检查、临时脚本写入、rollback 清理、进程残留)- macOS 平台
HOME路径展开及 SFTP 权限设置兼容(条件编译)
1.0.0 - 2026-06-14
新增
install.sh一行安装:curl | bash单命令在 Linux 上完成 DM8 静默安装,无需编译、无需额外依赖- 自动检测平台架构(x86_64 / aarch64 / loongarch64 / mips64el / sw_64)和 CPU 型号(Hygon、飞腾、鲲鹏等)
- 从
versions.txt精确匹配下载链接,含 OS 回退逻辑 - 自动生成满足达梦密码策略的随机 SYSDBA / SYSAUDITOR 密码并打印凭证卡片
- 注册
DmAPService和DmService<INSTANCE>.servicesystemd 服务并自动启动
dm_installer二进制:TOML 配置驱动的精细安装工具- 单机静默安装:自动下载匹配当前平台的 DM8 安装包(支持 Kylin、UOS、CentOS、RHEL、Ubuntu、Debian 等发行版)
- SSH 远程安装:
[ssh_target]配置后自动推送并在远端执行安装,含上传进度条和安装 spinner - 断点续传:安装中断后重跑自动从检查点恢复,已完成步骤不重复
- 主备集群部署:批量 SSH 推送、
dm.ini/dmarch.ini/dmmal.ini/dmwatcher.ini自动生成与分发 dm_installer init standalone / dw / rws / dsc生成带注释的配置模板dm_installer validate验证配置文件语法与语义- 配置语义校验:page_size / charset / extent_size / port 枚举值域检查
- 安装引导(guide):未找到 config.toml 时打印分步操作提示
修复
- Kylin V10 SP1(Lance)现在正确识别,不再误选 SP3 安装包
- SSH 连接失败自动重试,可配置重试次数与间隔
HOME路径展开兼容性修复- 改用
unzip DMInstall.bin提取 dmdbms,放弃不稳定的-q xml静默安装方式 - SHA-256 校验和验证
平台
install.sh:Linux x86_64 / aarch64(Kylin V10、UOS 20、CentOS 7、RHEL 7+、Ubuntu 20+)dm_installer预编译二进制:Linux x86_64/aarch64(glibc ≥ 2.23)、macOS Apple Silicon