数据库教程FGMT74:国产数据库-达梦数据库工程师实战(主备集群、读写分离、共享集群、分布式)
数据库教程FGMT74:国产数据库-达梦数据库工程师实战(主备集群、读写分离、共享集群、分布式)
一、前言与内容大纲
风哥针对本文先作说明。随着国产化替代在金融、政务、电力、通信等关键行业的加速落地,达梦数据库(简称 DM)已成为信创榜单上的主力国产数据库之一。风哥教程本文是一套面向希望快速掌握达梦 DM 的工程师的系统实战教程,内容取材于一套共 38 课时的达梦数据库实战体系。风哥设计这套内容,是为了让运维、数据库与开发人员能够从零开始,完成达梦单机部署、日常维护,以及主备集群、读写分离、共享存储集群、分布式集群四类高可用架构的搭建与验证,从而胜任达梦在开发、测试与一般业务生产环境下的工作。
风哥教程本文的结构如下:第一部分是前言与内容大纲;第二部分是达梦数据库理论基础知识,占全文约三成;第三部分是实战操作,占全文约六成,包含大量可复现的步骤与命令;第四部分是风哥针对本文的总结。本文涉及的集群技术包括:数据守护集群(DMDataWatch)、读写分离集群(DMRWC)、共享存储集群(DMDSC)、分析型大规模数据处理集群(DMMPP)以及透明分布式数据库(DMTDD)。需要说明的是,所有配置参数均按 64G 内存、8 核 CPU 的服务器规格设计,规划两台主机 fgedu-net-cn1 与 fgedu-net-cn2,数据库软件与数据文件统一放在 /fgedudb 目录,实例名与用户名统一使用 fgedudb / fgedudb / fgedu。
二、达梦数据库理论基础
2.1 达梦数据库与产品体系
达梦数据库管理系统(DM)是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,武汉达梦数据库股份有限公司成立于 2000 年,是中国电子信息产业集团(CEC)旗下的基础软件企业。达梦在语法与开发习惯上与 Oracle 高度兼容,支持 SQL:2003 标准与大部分 PL/SQL 特性,内置兼容 Oracle 模式的兼容层,因此从 Oracle 迁移到达梦的成本相对较低。达梦产品已应用于金融、电力、航空、通信、电子政务等五十多个行业领域,是信创产业榜单产品之一。
从产品线看,达梦既提供传统的单机版,也提供多种集群形态,以适应不同业务规模与可用性要求:单机架构适用于要求不高的应用场景;数据守护集群 DMDataWatch 适用于高可靠环境场景;读写分离集群 DMRWC 适用于读多写少场景;共享存储集群 DMDSC 适用于密集交易型场景;分析型大规模数据处理集群 DMMPP 适用于大规模数据分析的大规模并行计算场景;透明分布式数据库 DMTDD 则面向高并发、大规模数据存储与业务快速扩张的互联网化业务。
2.2 达梦体系架构
达梦的体系架构可以从逻辑结构、物理结构、内存结构与线程结构四个层面理解。
逻辑结构上,达梦采用数据库、表空间、段、区、页的层级组织。数据库是最高逻辑单位,一个实例管理一个数据库;数据库内部分为多个表空间,表空间由数据文件构成,表、索引等对象存放在表空间中,数据按页为单位读写,页之上是区、段。
物理结构上,达梦主要由以下文件组成:数据文件(.dbf,存放表与索引数据)、控制文件(记录数据库结构信息)、重做日志文件(记录数据变更,用于崩溃恢复)、归档日志文件(用于数据守护与时间点恢复),以及参数文件 dm.ini、服务配置文件 dm_svc.conf、报警日志与跟踪文件等。
内存结构上,达梦的内存主要分为缓冲区(Buffer Pool,缓存数据页)、日志缓冲区、字典缓存、SQL 缓存与执行上下文等,总内存通过 MEMORY_TARGET 等参数控制。线程结构上,达梦采用多线程模型,核心线程包括主线程(执行 SQL 与事务)、归档线程、守护线程、通信线程等,可通过动态视图查询线程运行状态。
2.3 四类集群技术原理
数据守护集群(DMDataWatch)是达梦高可用的基础,采用主备架构:主库提供读写服务,备库通过归档日志实时或异步同步主库数据,由守护进程(dmwatch)监控主备状态,主库故障时备库自动接管成为新主库,实现故障切换与容灾。实时主备模式下备库可提供只读查询,异步模式常用于异地容灾。
读写分离集群(DMRWC)在实时或即时主备基础上,把读操作自动分发到备库、写操作集中在主库,并具备负载均衡能力,最多可配置多个实时备库,适合读多写少的业务。
共享存储集群(DMDSC)是达梦的 RAC 类架构,多个实例共享同一套存储设备,通过共享存储管理模块(DMASM)与内部通信实现多实例并发访问,提供高可用与横向扩展,单点故障不影响集群整体。
分布式相关技术方面,DMMPP 是大规模并行分析集群,数据分片到多个节点并行处理,适合分析型负载;DMTDD 是透明分布式数据库,具有可扩展、高可用、高性能特性,数据自动分片并保持分布透明,应用无需感知分片细节,适合高并发与海量数据场景。
2.4 日常维护要点
达梦日常维护涵盖实例管理、对象与 SQL、存储管理、用户权限、备份恢复与监控巡检。备份分为逻辑备份(dexp/dimp,类似 Oracle 的 exp/imp)与物理备份(dmrman 联机或脱机备份)。监控方面,达梦提供 DEM 监控管理工具、巡检工具与性能工具,可远程管理多个达梦实例。
风哥数据库教程 itpux-com
三、达梦数据库实战操作
3.1 项目实战环境准备
风哥教程本文规划两台主机,规格均为 64G 内存、8 核 CPU。先配置主机名、hosts 映射并关闭防火墙与 SELinux。
hostnamectl set-hostname fgedu-net-cn1
hostnamectl set-hostname fgedu-net-cn2
cat >> /etc/hosts <<EOF
192.168.30.11 fgedu-net-cn1
192.168.30.12 fgedu-net-cn2
EOF
systemctl stop firewalld && systemctl disable firewalld
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
创建达梦专用用户与安装目录,软件与数据统一放在 /fgedudb 下。
groupadd dinstall
useradd -m -s /bin/bash dmdba -g dinstall
mkdir -p /fgedudb/{app,data,arch,backup}
chown -R dmdba:dinstall /fgedudb
echo "ulimit -n 65536" >> /etc/profile
3.2 达梦单机安装配置
以 dmdba 用户执行安装程序,采用静默方式避免交互,安装路径为 /fgedudb/app/dmdbms。
su - dmdba
./DMInstall.bin -q install_type=1 install_path=/fgedudb/app/dmdbms
若采用命令行交互方式,则按提示选择安装组件、安装路径并设置数据库类型;安装完成后执行 root 脚本注册服务:
/fgedudb/app/dmdbms/script/root/dmservice.sh install
3.3 初始化数据库实例
使用 dminit 初始化实例,指定实例名 fgedudb、数据库名 fgedudb、端口 5236 与数据目录。
su - dmdba
export DM_HOME=/fgedudb/app/dmdbms
export PATH=$DM_HOME/bin:$PATH
dminit PATH=/fgedudb/data INSTANCE_NAME=fgedudb \
DB_NAME=fgedudb PORT_NUM=5236 \
PAGE_SIZE=16 EXTENT_SIZE=32 LOG_SIZE=2048 \
CASE_SENSITIVE=0 CHARSET=1
按 64G 内存、8 核 CPU 调整关键内存参数,编辑 /fgedudb/data/dm.ini 或在 disql 中动态调整:
SQL> ALTER SYSTEM SET 'MEMORY_TARGET'=8192;
SQL> ALTER SYSTEM SET 'BUFFER_POOL_TOTAL_SIZE'=32768;
SQL> ALTER SYSTEM SET 'MAX_SESSIONS'=2000;
启动与停止实例:
systemctl start DmServicefgedudb
systemctl stop DmServicefgedudb
3.4 基本使用与 DISQL 操作
使用 disql 命令行登录并执行建库建表操作。
disql SYSDBA/SYSDBA@localhost:5236
CREATE TABLESPACE TS_DATA DATAFILE '/fgedudb/data/ts_data.dbf' SIZE 1024;
CREATE USER fgedu IDENTIFIED BY Fgedu@2026 DEFAULT TABLESPACE TS_DATA;
GRANT DBA TO fgedu;
CREATE TABLE fgedu.emp(id INT PRIMARY KEY, name VARCHAR(30), dept VARCHAR(30), sal DECIMAL(10,2));
INSERT INTO fgedu.emp VALUES(1,'张三','研发',15000),(2,'李四','测试',12000),(3,'王五','运维',18000);
SELECT dept,COUNT(*) cnt,SUM(sal) total FROM fgedu.emp GROUP BY dept;
查询内存与线程相关动态视图,做简单巡检:
SQL> SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME LIKE '%BUFFER%';
SQL> SELECT COUNT(*) FROM V$SESSIONS;
SQL> SELECT TABLESPACE_NAME, TOTAL_SIZE*PAGE/1024 AS TOTAL_MB FROM DBA_TABLESPACES;
3.5 备份与恢复实战
逻辑备份与恢复使用 dexp/dimp 工具。
dexp fgedu/Fgedu@2026@localhost:5236 file=/fgedudb/backup/exp_$(date +%F).dmp log=/fgedudb/backup/exp_$(date +%F).log
dimp fgedu/Fgedu@2026@localhost:5236 file=/fgedudb/backup/exp_2026-10-22.dmp log=/fgedudb/backup/imp_2026-10-22.log
物理备份与恢复使用 dmrman 工具,先做联机全备。
dmrman CTLSTMT="BACKUP DATABASE '/fgedudb/data/dm.ini' FULL BACKUPSET '/fgedudb/backup/dm_full_20261022'"
dmrman CTLSTMT="RESTORE DATABASE '/fgedudb/data/dm.ini' FROM BACKUPSET '/fgedudb/backup/dm_full_20261022'"
风哥 itpux-com
风哥教程 113257174
3.6 DM 主备集群(DMDataWatch)搭建
主备集群至少三台主机或两台主机,本文演示 fgedu-net-cn1 为主库、fgedu-net-cn2 为备库。首先在主库开启归档。
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/fgedudb/arch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=10240';
SQL> ALTER DATABASE ARCHIVELOG;
在主库做物理备份并复制到备库。
dmrman CTLSTMT="BACKUP DATABASE '/fgedudb/data/dm.ini' FULL TO BK_FULL BACKUPSET '/fgedudb/backup/bk_full'"
scp -r /fgedudb/backup/bk_full dmdba@192.168.30.12:/fgedudb/backup/
在备库 fgedu-net-cn2 配置 dm.ini(实例名 fgedudb02、端口 5237)与 dmarch.ini 归档配置,并还原备份。
# 备库还原
dmrman CTLSTMT="RESTORE DATABASE '/fgedudb/data/dm.ini' FROM BACKUPSET '/fgedudb/backup/bk_full'"
dmrman CTLSTMT="RECOVER DATABASE '/fgedudb/data/dm.ini' UPDATE DB_MAGIC"
分别编辑主备的 dmwatcher.ini,配置守护进程(配置组如 GRP1,主库 DW_MODE=MANUAL,备库为 AUTO),然后启动两库。
SQL> ALTER DATABASE ADD WATCHER 'fgedu_grp1';
SQL> ALTER DATABASE OPEN;
启动主备两库的守护进程 dmwatcher。
dmwatcher /fgedudb/data/dmwatcher.ini
客户端通过 dm_svc.conf 配置主备地址,实现故障切换后的透明重连。
cat > /etc/dm_svc.conf <<EOF
fgedu_grp1=(192.168.30.11:5236,192.168.30.12:5237)
SWITCH_TIME=(60)
SWITCH_INTERVAL=(200)
EOF
测试切换:停掉主库,观察备库在配置时间内自动接管成为新主库,应用通过 dm_svc.conf 自动重连且数据不丢失。
3.7 DM 读写分离集群(DMRWC)搭建
读写分离集群在实时主备基础上增加读写分离属性。备库配置只读与 service 属性,客户端 dm_svc.conf 增加读写分离与负载均衡参数。
# 客户端 dm_svc.conf
fgedu_grp1=(192.168.30.11:5236,192.168.30.12:5237)
RW_SEPARATE=(1)
RW_SEPARATE_PERCENT=(70)
LOGIN_MODE=(1)
配置完成后运行读多写少的业务,观察读语句被分发到备库、写语句集中在主库,验证读写分离与负载均衡生效。
3.8 DM 共享存储集群(DMDSC)搭建
DMDSC 需要共享存储。先使用 dmasmtool 创建 ASM 磁盘组。
dmasmtool
CREATE DISKGROUP '/fgedudb/asm/asm_01' SIZE 10240;
CREATE DISKGROUP '/fgedudb/asm/asm_02' SIZE 10240;
在两个节点分别用 dminit 以 ASM 方式初始化实例,配置 dmdcr.ini 与 dm.ini 中的集群相关参数。
dminit PATH=+DG1/data INSTANCE_NAME=fgedudb01 DB_NAME=fgedudb PORT_NUM=5236 DMDCR_INI=/fgedudb/data/dmdcr.ini
dminit PATH=+DG1/data INSTANCE_NAME=fgedudb02 DB_NAME=fgedudb PORT_NUM=5237 DMDCR_INI=/fgedudb/data/dmdcr.ini
依次启动两节点实例并验证集群状态。
DmServiceDMSERVER01 start
DmServiceDMSERVER02 start
disql SYSDBA/SYSDBA@192.168.30.11:5236
SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE;
验证高可用:两节点能查询到同一份数据,停掉一个节点实例,业务仍可通过另一节点继续访问。
3.9 DM 分布式集群(DMMPP / DMTDD)搭建
以 DMMPP 为例,规划 fgedu-net-cn1 部署协调节点、fgedu-net-cn2 部署两个执行节点,分别用 dminit 以 MPP 模式初始化各节点。
dminit PATH=/fgedudb/data/mpp1 PATH_TYPE=MPP INSTANCE_NAME=mp01 PORT_NUM=5236
dminit PATH=/fgedudb/data/mpp2 PATH_TYPE=MPP INSTANCE_NAME=mp02 PORT_NUM=5237
配置完成后启动各节点,通过协调节点端口登录,创建分片表并写入数据,验证数据按分片策略分布到多个执行节点,停掉一个节点后数据仍可完整读取,体现并行处理与容错能力。
disql SYSDBA/SYSDBA@192.168.30.11:5236
CREATE TABLE fgedu.d_emp(id INT, name VARCHAR(30)) DISTRIBUTE BY HASH(id);
INSERT INTO fgedu.d_emp VALUES(1,'张三'),(2,'李四'),(3,'王五'),(4,'赵六');
SELECT COUNT(*) FROM fgedu.d_emp;
```上51CTO搜索风哥可以学习全套数据库教程
---
## 四、风哥针对本文总结
风哥针对本文做一个收尾总结。本文从达梦数据库的产品体系与架构理论入手,把逻辑、物理、内存、线程四层结构以及数据守护、读写分离、共享存储、分布式四类集群的原理讲清楚,然后用约六成的篇幅,在 64G 内存、8 核 CPU 的两台主机 fgedu-net-cn1、fgedu-net-cn2 上,完成了达梦单机静默安装、实例初始化、建库建表、备份恢复、主备集群搭建、读写分离配置、共享存储集群部署与分布式集群部署的全过程,并演示了故障切换、读写分离与数据分片验证。通过本文,读者应当具备独立部署达梦单机与四类高可用集群的能力,能够胜任政企国产化场景下的达梦数据库工作。后续进阶建议深入学习达梦性能调优、Oracle 到达梦的迁移以及达梦运维监控平台 DEM 的深入使用。以上就是风哥教程本文的全部内容,感谢阅读。网上搜索风哥教程可以学习全套数据库教程
- 点赞
- 收藏
- 关注作者
评论(0)