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

安装

系统要求

平台架构备注
Linuxx86_64musl 静态链接,无 glibc 依赖
Linuxaarch64musl 静态链接,无 glibc 依赖
macOSApple Silicon11.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.gzLinux x86_64
dm_installer-aarch64-unknown-linux-musl.tar.gzLinux ARM64
dm_installer-aarch64-apple-darwin.tar.gzmacOS 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

工具会自动:

  1. 检测目标服务器的 OS 和架构,下载对应安装包
  2. 通过 SFTP 上传安装包(带进度条)
  3. 在目标机器上静默安装并注册服务

主备集群安装(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/dmdbmsDM 程序安装目录
data_path/home/dmdba/dmdbms/data数据文件目录
backup_path—数据库备份目录(可选)。未配置、或与 data_path/归档目录路径重叠时,安装完成后会输出配置建议提醒

[instance] — 实例参数

键默认值有效值说明
instance_nameDMSERVER任意字符串实例名称
port52361–65535数据库监听端口
page_size324 / 8 / 16 / 32页大小(KB),建议生产环境使用 32
charset10 / 1 / 20=GB18030 1=UTF-8 2=EUC-KR
case_sensitivetruetrue / falseSQL 标识符大小写敏感
extent_size3216 / 32区段大小(页数)

[ssh_target] — SSH 远程目标(可选)

省略此节时在本机安装。填写后,工具会通过 SSH 将安装包推送到目标服务器并在远端执行安装。

键默认值说明
host—目标主机 IP 或域名(必填)
ssh_port22SSH 端口
user—SSH 用户名(必填)
password—SSH 密码;不填则安装时提示输入(推荐)
max_retries3SSH 连接失败重试次数
retry_interval_secs5重试间隔(秒)

完整示例:

[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_confirmtruetrue=确认监视器(参与自动切换仲裁);false=通知监视器(仅通知,不参与仲裁)

[[nodes]] — 节点配置

每个节点必须包含以下字段:

键默认值说明
role—"primary" 或 "standby"(必填,且只能有一个 primary)
host—节点 IP 或域名(必填)
instance_name—实例名称,同一集群内必须唯一(必填)
install_path/home/dmdba/dmdbmsDM 程序安装目录(与 standalone 默认一致)
data_path/home/dmdba/dmdbms/data数据文件目录(与 standalone 默认一致)
arch_path{data_path}/arch本节点本地归档目录
port5236数据库监听端口
mal_port5237MAL 通信端口(不能与 port 相同)
dw_port5238数据守护监听端口(即 MAL_DW_PORT,dmmonitor 也用此端口)
inst_dw_port5239实例向守护进程注册的端口
page_size32页大小(KB):4 / 8 / 16 / 32
charset10=GB18030 1=UTF-8 2=EUC-KR
case_sensitivetrueSQL 标识符大小写敏感
extent_size32区段大小(页数):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_days15备份保留天数,至少 15 天
full_backup_interval_days7全量备份间隔天数
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_interval60MAL 链路检测间隔(秒),0=禁用,范围 0–1800
mal_conn_fail_interval60判定连接失败的时长阈值(秒),范围 2–1800
mal_login_timeout60节点间登录超时(秒),范围 3–1800
mal_buf_size100单连接缓冲区上限(MB),0=不限
mal_sys_buf_size0系统全局 MAL 内存上限(MB),0=不限
mal_compress_level0压缩级别:0=不压缩,1–9=lz,10=snappy;所有节点必须一致

[watcher] — 数据守护(dmwatcher.ini,可选)

键默认值说明
dw_mode"MANUAL""MANUAL"(需人工介入)/ "AUTO"(故障自动切换)
dw_error_time60守护进程故障确认时间(秒),范围 3–1800
inst_error_time60数据库实例故障确认时间(秒),范围 3–1800
inst_recover_time60备库恢复检测间隔(秒),范围 3–86400
inst_auto_restart0实例崩溃后自动重启:0=否,1=是
inst_restart_cnt0最大连续重启次数,0=不限制
dw_open_force_timeout0MANUAL 模式无监视器时强制 Open 超时(秒),0=永久等待
dw_failover_force1无监视器时允许主库强制 Open:1=允许,0=禁止
dw_reconnect1断链重连策略:0=不重连,1=重连继续守护,2=重连降为 OPEN
rlog_send_threshold0实时归档发送延迟告警阈值(秒),0=不告警
rlog_apply_threshold0备库日志应用延迟告警阈值(秒),0=不告警
inst_service_ip_check0检测主库对外服务 IP 可达性:0=不检测,1=检测

[arch] — 日志归档(dmarch.ini,可选)

键默认值说明
arch_wait_apply1同步备库是否等待日志应用后再回应主库:1=等待,0=不等待
arch_reserve_time0本地归档保留时长(分钟),0=不自动清理
arch_send_policy0主库发送策略:0=立即等待备库响应,1=先写本地再发送
arch_recover_time60同步备库归档状态检测间隔(秒),范围 1–86400
arch_file_size1024本地归档单文件大小(MB),范围 64–2048
arch_space_limit不填=自动本地归档总空间上限(MB):不填时自动取归档目录所在磁盘总容量的 20%,探测失败时退回默认值 20480(20GB);显式填 0=不限;其他正整数=固定上限

[monitor] — 确认监视器(dmmonitor.ini,可选)

键默认值说明
mon_log_path"."监视器日志输出目录
mon_log_interval60日志刷新间隔(秒),范围 1–600
mon_log_file_size32单个日志文件大小上限(MB),范围 1–2048
mon_log_space_limit4096日志总空间上限(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_PORT5236监听端口
DM_INSTANCEDMSERVER实例名称
DM_DB_NAMEDAMENG数据库名称
DM_PAGE_SIZE32页大小(KB):4 / 8 / 16 / 32
DM_EXTENT_SIZE32区段大小(页数):16 / 32
DM_CHARSET0字符集:0=GB18030 1=UTF-8 2=EUC-KR
DM_CASE_SENSITIVEYSQL 标识符大小写敏感: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 dwdw✅ 已支持
读写分离(RWS)dm_installer init rwsrws🚧 开发中
共享存储(DSC)dm_installer init dscdsc🚧 开发中

主备集群(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/32
  • instance_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

部署流程

工具按官方数据守护搭建文档的步骤顺序自动完成:

  1. 连接并预检:并行检查所有节点的磁盘空间、端口占用、内存/CPU、SELinux/ulimit
  2. 环境准备:创建 dmdba 用户、关闭 SELinux/THP/防火墙、内核参数调优等(与单机安装相同)
  3. 上传安装包:逐节点 SFTP 上传(带进度条)
  4. 静默安装:在各节点执行 DMInstall.bin 静默安装 DM8
  5. dminit 初始化:在各节点(primary 与 standby 均)执行 dminit 各自初始化一个新实例
  6. 备份还原同步备库数据:在 primary 上用 dmrman 做一次脱机全量备份,经控制机中转打包传输到每个 standby,再在 standby 上 dmrman 执行 RESTORE + RECOVER,使备库与主库数据基线一致
  7. 分发主备守护配置:
    • 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,不参与自动切换)
  8. 以 Mount 方式启动数据库并设置角色:primary 先以 dmserver dm.ini mount 启动,通过 disql 执行 sp_set_oguid 与 ALTER DATABASE PRIMARY;随后并发对 standby 执行相同流程(角色改为 STANDBY)
  9. 启动守护进程与监视器:各节点启动 dmwatcher(自动将 Mount 状态的实例切换为 Open),并在第一个 standby 节点启动 dmmonitor 确认监视器(集群无 standby 时 fallback 到 primary;监视器本身可以共置于任意节点,与该节点自身的 sync_mode 无关);dmmonitor.ini 的仲裁列表(MON_DW_IP)只包含 GLOBAL 类型节点(primary + realtime 备库),sync/async 备库不参与
  10. 配置备份作业 / 开启 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 MB
  • dm_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>.service systemd 服务并自动启动
  • 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