DM8达梦共享存储集群DSC搭建步骤

DM 集群搭建DSC学习记录

文章目录

  • [DM 集群搭建DSC学习记录](#DM 集群搭建DSC学习记录)
    • DSC集群概述
    • [一、基于 DMASM 的 DMDSC](#一、基于 DMASM 的 DMDSC)
      • [1.1 集群规划](#1.1 集群规划)
      • [1.2 创建用户](#1.2 创建用户)
      • [1.3 共享存储实现](#1.3 共享存储实现)
      • [1.4 搭建DSC](#1.4 搭建DSC)
        • [1.4.1 创建 dmdcr_cfg.ini](#1.4.1 创建 dmdcr_cfg.ini)
        • [1.4.2 初始化磁盘组](#1.4.2 初始化磁盘组)
        • [1.4.3 配置 dmasvrmal.ini](#1.4.3 配置 dmasvrmal.ini)
        • [1.4.4 配置 dmdcr.ini 文件](#1.4.4 配置 dmdcr.ini 文件)
        • [1.4.5 启动 DMCSS、DMASM 服务](#1.4.5 启动 DMCSS、DMASM 服务)
        • [1.4.6 创建DMASM磁盘组](#1.4.6 创建DMASM磁盘组)
        • [1.4.7 创建 dminit.ini](#1.4.7 创建 dminit.ini)
        • [1.4.8 配置 dmarch.ini 文件](#1.4.8 配置 dmarch.ini 文件)
        • [1.4.9 启动 DMSERVER 服务](#1.4.9 启动 DMSERVER 服务)
        • [1.4.10 注册 CSS、ASM、DMSERVER 后台服务](#1.4.10 注册 CSS、ASM、DMSERVER 后台服务)
        • [1.4.11 配置监视器](#1.4.11 配置监视器)
      • 二、数据库其他配置
        • [2.1 设置 core 路径](#2.1 设置 core 路径)
        • [2.2 开启 SQL 日志](#2.2 开启 SQL 日志)
        • [2.3 调整redo](#2.3 调整redo)
        • [2.4 创建 dm_svc.conf](#2.4 创建 dm_svc.conf)
        • [2.5 常用的试图](#2.5 常用的试图)

大家想学习达梦数据库或者解决报错问题,可以去达梦数据库社区https://eco.dameng.com

DSC集群概述

DMDSC 集群是一个多实例、单数据库的系统。多个数据库实例可以同时访问、修改同一个数据库的数据。用户可以登录集群中的任意一个数据库实例,获得完整的数据库服务。数据文件、控制文件在集群系统中只有一份,不论有几个节点,这些节点都平等地使用这些文件,这些文件保存在共享存储上。每个节点有自己独立的联机日志和归档日志,其中联机日志保存在共享存储上,归档日志可以保存在本地存储上也可以保存在共享存储上。

DMDSC 集群主要由数据库和数据库实例、共享存储、DMASM 或 DMASM 镜像、本地存储、 通信网络、集群控制软件 DMCSS、集群监视器 DMCSSM 组成。

一、基于 DMASM 的 DMDSC

1.1 集群规划

一个典型的基于 DMASM DMDSC 一般具备两个 DMDSC 节点。使用块设备的真实物理磁盘做共享存储,并使用 DMASM 来管理块设备

存储方面:

①两台服务器都连接到同一个存储上(共享存储只需要映射到服务器端 fdisk -l 可以查看到就行,不需要格式化)。

②节点 1 所在服务器单独挂存储,需要格式化好,用来备份数据等,文件系统建议使用 ext4。

DMDSC 集群为了实现多实例同时访问和修改数据,需要数据文件、控制文件和日志文件都放到共享存储上。

注意: Redo 日志盘的空间大小建议最小不少于 4G,否则会引起后面数据库启动失败等问题。

名称 拟定配置 分区大小 备注
VOTE 磁盘 /dev/dm/asm-dmvote 5 GB 记录集群成员信息,集群通过 Voting Disk 进行心跳检测,确定集群中节点的状态
DCR 盘 /dev/dm/asm-dmdcr 5 GB 用于存储、维护集群配置的详细信息,整个集群环境共享 DCR 配置信息
Redo 日志盘 /dev/dm/asm-dmlog 50 GB 用于存储数据库集群 Redo log
数据盘 /dev/dm/asm-dmdata* 500 GB * X 用于存放数据
归档盘 /dev/dm/asm-dmarch 500 GB * 2 用于存储数据库集群各实例的归档日志

一般测试环境示例中 1 块DCR磁盘、1 块 VOTE 磁盘、1 个 DMDATA 磁盘组(含 1 块磁盘)和 1 个 DMLOG 磁盘组(含 1 块磁盘),共 4 块共享磁盘即可。

本示例以两节点为例搭建 DMDSC 环境。规划将 IP 为 11 的机器作为控制节点。

节点机器 实例名称 IP PORT_NUM
11 CSS0 192.168.6.11 9836
ASM0 5836
DSC01 6636
12 CSS1 192.168.6.12 9837
ASM1 5837
DSC02 6637

在 4 块共享磁盘中:2 块较小的磁盘(1G)用于创建 DCR、VOTE 磁盘;2 块较大的磁盘(2T)用于创建 ASM 磁盘组(数据磁盘组 DMDATA 和联机日志磁盘组 DMLOG)。

项目 A 机器 B 机器
软件目录 /opt/dsc/setup /opt/dsc/setup
安装目录 /opt/dsc/dmdbms /opt/dsc/dmdbms
配置文件目录 /opt/dsc/config /opt/dsc/config
备份目录 /opt/dsc/bak /opt/dsc/bak

1.2 创建用户

两个节点node1,node2都需要创建

sql 复制代码
# 创建用户组和用户
groupadd dinstall
useradd -g dinstall dmdba
echo "Dameng123" |passwd --stdin dmdba

# 修改资源限制
vi/etc/security/limits.conf
dmdba  soft      nice       0
dmdba  hard      nice       0
dmdba  soft      as         unlimited
dmdba  hard      as         unlimited
dmdba  soft      fsize      unlimited
dmdba  hard      fsize      unlimited
dmdba  soft      nproc      65536
dmdba  hard      nproc      65536
dmdba  soft      nofile     65536
dmdba  hard      nofile     65536
dmdba  soft      core       unlimited
dmdba  hard      core       unlimited
dmdba  soft      data       unlimited
dmdba  hard      data       unlimited

1.3 共享存储实现

参考文章:Linux环境下实现SCSI磁盘共享的详细教程 - OSCHINA - 开源 × AI · 开发者生态社区

Linux下搭建iSCSI实现共享存储。

iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的、可以在IP协议的上层运行的SCSI指令集, iSCSI 的主要功能是在TCP/IP 网络上的主机系统(启动器 initiator)和存储设备(目标器 target)之间进行大量数据的封装和可靠传输过程。

iSCSI架构主要由两个部分组成:iSCSI目标(Target)和iSCSI发起者(Initiator)。

  • iSCSI目标(Target):通常是存储设备的提供者,它将本地的存储设备(如磁盘、磁盘阵列等)以iSCSI的方式共享出来。
  • iSCSI发起者(Initiator):是访问存储设备的客户端,它通过网络连接到iSCSI目标,并将远程存储设备挂载到本地系统上使用。

iSCSI共享存储拓扑图:

iSCSI可分享的设备类型有很多,包括镜像文件(*.img)、分区(partition)、物理硬盘、raid设备、逻辑卷等,下面我只用物理磁盘分区来进行相关测试

安装targetcli软件包,它是一个用于配置iSCSI目标的命令行工具。

sql 复制代码
yum install targetcli -y
yum install -y open-iscsi

虚拟机添加一个60GB的磁盘

bash 复制代码
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   40G  0 disk
├─sda1          8:1    0  190M  0 part /boot
└─sda2          8:2    0 39.8G  0 part
  ├─klas-root 253:0    0 38.9G  0 lvm  /
  └─klas-swap 253:1    0  956M  0 lvm  [SWAP]
sdb             8:16   0   60G  0 disk
sr0            11:0    1  4.4G  0 rom

配置iSCSI目标端(Target)

这些命令创建了一个名为mydisk的后端存储,一个名为mytarget的iSCSI目标,并为客户端myclient设置了访问控制。同时,将mydisk后端存储映射到目标上。

bash 复制代码
systemctl start target
systemctl enable target

targetcli

# 关闭自动保存(永久生效,写到 prefs.bin)
/> set global auto_save_on_exit=false

get global auto_save_on_exit

# 进入块存储后端目录,准备把本地磁盘纳入iSCSI存储池
/> cd backstores/block

# 创建块存储别名mydisk,关联物理磁盘/dev/sdb,作为共享存储底层设备
/> create name=mydisk dev=/dev/sdb

# 切换回targetcli根目录
/> cd /

# 进入iSCSI目标配置根目录
/> cd iscsi

# 创建iSCSI服务端目标端Target,定义共享服务唯一标识IQN名称
/> create iqn.2026-05.example.com:mytarget

# 进入目标端的ACL访问控制目录,配置客户端接入权限
/> cd iqn.2026-05.example.com:mytarget/tpg1/acls

# 准入客户端IQN,仅该客户端标识可登录连接此iSCSI共享
/> create iqn.2026-05.example.com:myclient

# 进入LUN映射目录,关联后端磁盘与iSCSI目标
/> cd /iscsi/iqn.2026-05.example.com:mytarget/tpg1/luns

# 将后端mydisk存储映射为LUN0,分配给客户端作为远程磁盘使用
/> create storage_object=/backstores/block/mydisk lun=0

# 切回根目录准备保存配置
/> cd /

/> ls
o- / ....................................................................................................... [...]
  o- backstores ............................................................................................ [...]
  | o- block ................................................................................ [Storage Objects: 1]
  | | o- mydisk ........................................................ [/dev/sdb (60.0GiB) write-thru activated]
  | |   o- alua ................................................................................. [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ..................................................... [ALUA state: Active/optimized]
  | o- fileio ............................................................................... [Storage Objects: 0]
  | o- pscsi ................................................................................ [Storage Objects: 0]
  | o- ramdisk .............................................................................. [Storage Objects: 0]
  o- iscsi .......................................................................................... [Targets: 1]
  | o- iqn.2026-05.example.com:mytarget ................................................................ [TPGs: 1]
  |   o- tpg1 ............................................................................. [no-gen-acls, no-auth]
  |     o- acls ........................................................................................ [ACLs: 1]
  |     | o- iqn.2026-05.example.com:myclient ................................................... [Mapped LUNs: 1]
  |     |   o- mapped_lun0 .............................................................. [lun0 block/mydisk (rw)]
  |     o- luns ........................................................................................ [LUNs: 1]
  |     | o- lun0 ................................................... [block/mydisk (/dev/sdb) (default_tg_pt_gp)]
  |     o- portals .................................................................................. [Portals: 1]
  |       o- 0.0.0.0:3260 ................................................................................... [OK]
  o- loopback ....................................................................................... [Targets: 0]
  o- vhost .......................................................................................... [Targets: 0]
  o- xen-pvscsi ..................................................................................... [Targets: 0]
/>


# 永久保存所有iSCSI配置,系统重启后配置不失效
/> saveconfig
Configuration saved to /etc/target/saveconfig.json

配置完成后,重启iSCSI服务以应用更改。

bash 复制代码
sudo systemctl restart target
systemctl restart iscsid

配置客户端

客户端是需要访问共享SCSI磁盘的系统。以下是配置客户端的步骤:

bash 复制代码
# 对于iSCSI客户端,需要安装iscsiadm工具
yum install -y open-iscsi
systemctl start iscsid
# 使用iscsiadm发现目标并登录
sudo iscsiadm -m discovery -t st -p <target-IP>
[root@racnode1 ~]# sudo iscsiadm -m discovery -t st -p 192.168.157.140
192.168.157.140:3260,1 iqn.2026-05.example.com:mytarget

[root@racnode1 ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-12.cn.kylinos:124d39a1b86

# 去服务端添加
targetcli

cd /iscsi/iqn.2026-05.example.com:mytarget/tpg1/acls
create iqn.2019-12.cn.kylinos:124d39a1b86
cd /
saveconfig

targetcli
cd /iscsi/iqn.2026-05.example.com:mytarget/tpg1/acls
create iqn.2019-12.cn.kylinos:437273e4224
cd /
saveconfig

[root@racnode1 ~]# sudo iscsiadm -m node -T iqn.2026-05.example.com:mytarget -p 192.168.157.140 -l
Logging in to [iface: default, target: iqn.2026-05.example.com:mytarget, portal: 192.168.157.140,3260]
Login to [iface: default, target: iqn.2026-05.example.com:mytarget, portal: 192.168.157.140,3260] successful.

sudo iscsiadm -m node -T <target-IQN> -p <target-IP> -l
sudo iscsiadm -m node -T iqn.2026-05.example.com:myclient -p 192.168.157.140 -l

# 检查是否连接到目标服务器
[root@racnode1 ~]# iscsiadm -m session
tcp: [4] 192.168.157.140:3260,1 iqn.2026-05.example.com:mytarget (non-flash)

# node1上可以看到设备
[root@racnode1 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   40G  0 disk
├─sda1          8:1    0  190M  0 part /boot
└─sda2          8:2    0 39.8G  0 part
  ├─klas-root 253:0    0   37G  0 lvm  /
  └─klas-swap 253:1    0  2.8G  0 lvm  [SWAP]
sdb             8:16   0   60G  0 disk
sr0            11:0    1  4.4G  0 rom

# 当本节点机器重启后,会自动登录且挂载这个磁盘
[root@racnode1 ~]# iscsiadm -m node -o show | grep node.startup
node.startup = automatic

#  节点2,必须先执行发现这个步骤,再执行登录
sudo iscsiadm -m discovery -t st -p 192.168.157.140
[root@racnode2 ~]# iscsiadm -m node -T iqn.2026-05.example.com:mytarget -p 192.168.157.140 -l
Logging in to [iface: default, target: iqn.2026-05.example.com:mytarget, portal: 192.168.157.140,3260]
Login to [iface: default, target: iqn.2026-05.example.com:mytarget, portal: 192.168.157.140,3260] successful.

[root@racnode2 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   40G  0 disk
├─sda1          8:1    0  190M  0 part /boot
└─sda2          8:2    0 39.8G  0 part
  ├─klas-root 253:0    0   37G  0 lvm  /
  └─klas-swap 253:1    0  2.8G  0 lvm  [SWAP]
sdb             8:16   0   60G  0 disk
sr0            11:0    1  4.4G  0 rom

划存储

小于 2TB 的存储使用 fdisk 命令来划分

用途 空间规划 (总共 60GB)
sdb1 用于 dcr 信息 100M
sdb2 用于存放 vote 信息 100M
sdb3 用于存放 redo log 20480M
sdb4 用于存放 data 剩下的全部空间

注意:log 盘的空间大小最小不少于 4G,否则会引起后面数据启动失败等问题。

root@\~# fdisk /dev/sdb

  1. 依次输入 n p 1 回车 +100M,完成第一块磁盘划分
  2. 依次输入 n p 2 回车 +100M,完成第二块磁盘划分
  3. 依次输入 n p 3 回车 +20480M,完成第三块磁盘划分
  4. 依次输入 n p 回车 回车 回车,完成第四块磁盘划分
  5. 输入 w 命令,将裸设备划分的设置进行保存
bash 复制代码
[root@racnode1 ~]# fdisk /dev/sdb

欢迎使用 fdisk (util-linux 2.35.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

设备不包含可识别的分区表。
创建了一个磁盘标识符为 0x2b682d08 的新 DOS 磁盘标签。

命令(输入 m 获取帮助):n
分区类型
   p   主分区 (0 primary, 0 extended, 4 free)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (1-4, 默认  1): 1
第一个扇区 (8192-125829119, 默认 8192):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (8192-125829119, 默认 125829119): +100M

创建了一个新分区 1,类型为"Linux",大小为 100 MiB。

命令(输入 m 获取帮助):n
分区类型
   p   主分区 (1 primary, 0 extended, 3 free)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (2-4, 默认  2):
第一个扇区 (212992-125829119, 默认 212992):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (212992-125829119, 默认 125829119): +100M

创建了一个新分区 2,类型为"Linux",大小为 100 MiB。

命令(输入 m 获取帮助):n
分区类型
   p   主分区 (2 primary, 0 extended, 2 free)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (3,4, 默认  3):
第一个扇区 (417792-125829119, 默认 417792):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (417792-125829119, 默认 125829119): +10G

创建了一个新分区 3,类型为"Linux",大小为 10 GiB。

命令(输入 m 获取帮助):n
分区类型
   p   主分区 (3 primary, 0 extended, 1 free)
   e   扩展分区 (逻辑分区容器)
选择 (默认 e):p

已选择分区 4
第一个扇区 (21389312-125829119, 默认 21389312):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (21389312-125829119, 默认 125829119):

创建了一个新分区 4,类型为"Linux",大小为 49.8 GiB。

命令(输入 m 获取帮助):w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。

# 节点1
[root@racnode1 ~]# partprobe /dev/sdb
[root@racnode1 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   40G  0 disk
├─sda1          8:1    0  190M  0 part /boot
└─sda2          8:2    0 39.8G  0 part
  ├─klas-root 253:0    0   37G  0 lvm  /
  └─klas-swap 253:1    0  2.8G  0 lvm  [SWAP]
sdb             8:16   0   60G  0 disk
├─sdb1          8:17   0  100M  0 part
├─sdb2          8:18   0  100M  0 part
├─sdb3          8:19   0   10G  0 part
└─sdb4          8:20   0 49.8G  0 part
sr0            11:0    1  4.4G  0 rom

# 节点2
[root@racnode2 ~]# partprobe /dev/sdb
[root@racnode2 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   40G  0 disk
├─sda1          8:1    0  190M  0 part /boot
└─sda2          8:2    0 39.8G  0 part
  ├─klas-root 253:0    0   37G  0 lvm  /
  └─klas-swap 253:1    0  2.8G  0 lvm  [SWAP]
sdb             8:16   0   60G  0 disk
├─sdb1          8:17   0  100M  0 part
├─sdb2          8:18   0  100M  0 part
├─sdb3          8:19   0   10G  0 part
└─sdb4          8:20   0 49.8G  0 part
sr0            11:0    1  4.4G  0 rom

大于 2TB 的需要使用 parted 命令来

root@\~# parted /dev/sdb

  1. 输入 mklabel gpt 回车,将 MBR 磁盘磁盘转换为 gpt 格式
  2. 输入 mkpart primary 0 100 回车,完成第一块磁盘划分
  3. 输入 mkpart primary 100 200 回车,完成第二块磁盘划分
  4. 输入 mkpart primary 200 20680 回车,完成第三块磁盘划分
  5. 输入 mkpart primary 20680 5498G 回车,完成第四块磁盘划分
  6. 输入 quit 回车,完成磁盘划分

方法1:直接挂载存储

把 /dev/sdb1~sdb4 这四个分区绑定成裸设备(raw),并给达梦数据库(dmdba)赋权,让 DM 可以直接使用裸设备存放 OCR、Vote、Redo、Data

裸设备(raw)不经过文件系统,直接读写磁盘数据库(Oracle/DM)用裸设备性能更高、更少 IO 损耗

作用:

把 sdb1 映射成 /dev/raw/raw1

把 sdb2 映射成 /dev/raw/raw2

把 sdb3 映射成 /dev/raw/raw3

把 sdb4 映射成 /dev/raw/raw4

bash 复制代码
# A 机器、B 机器依次修改:
[root@~]# vi /etc/udev/rules.d/70-persistent-ipoib.rules

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdb3", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="sdb4", RUN+="/bin/raw /dev/raw/raw4 %N"

ACTION=="add", KERNEL=="raw[1-4]", OWNER="dmdba", GROUP="dinstall", MODE="660"



[root@racnode1 ~]# ll /dev/raw/raw*
crw-rw---- 1 dmdba dinstall 162, 1  5月 11 09:52 /dev/raw/raw1
crw-rw---- 1 dmdba dinstall 162, 2  5月 11 09:52 /dev/raw/raw2
crw-rw---- 1 dmdba dinstall 162, 3  5月 11 09:52 /dev/raw/raw3
crw-rw---- 1 dmdba dinstall 162, 4  5月 11 09:52 /dev/raw/raw4
crw-rw---- 1 root  disk     162, 0  5月 11 09:52 /dev/raw/rawctl
复制代码
[root@~]# partprobe /dev/sdb
udevadm trigger --type=devices --action=change 
udevadm control --reload-rules
blockdev --getsize64 /dev/raw/raw*


for dev in /dev/raw/raw{1..4}; do
  size=$(blockdev --getsize64 $dev)
  size_gb=$(numfmt --to=iec --suffix=B $size)
  echo "$dev : $size_gb"
done
/dev/raw/raw1 : 100MB
/dev/raw/raw2 : 100MB
/dev/raw/raw3 : 10GB
/dev/raw/raw4 : 50GB

注意:可通过 blockdev --getsize64 /dev/raw/raw* 命令查看设备大小。

方法2:多路径挂载裸设备

有可能客户现场给提供的是多路径存储

使用命令 ll /dev/mappr 和 ll /dev/dm*查看对应设备的信息。

bash 复制代码
[root@~]# vi /etc/udev/rules.d/70-persistent-ipoib.rules
ACTION=="add",ENV{MAJOR}=="253",ENV{MINOR}=="3",RUN+="/bin/raw
/dev/raw/raw1 %M %m" ACTION=="add",ENV{MAJOR}=="253",ENV{MINOR}=="4",RUN+="/bin/raw
/dev/raw/raw2 %M %m" ACTION=="add",ENV{MAJOR}=="253",ENV{MINOR}=="5",RUN+="/bin/raw
/dev/raw/raw3 %M %m" ACTION=="add",ENV{MAJOR}=="253",ENV{MINOR}=="6",RUN+="/bin/raw
/dev/raw/raw4 %M %m" ACTION=="add",KERNEL=="raw[1-4]",OWNER="dmdba",GROUP="dinstall",MODE="660"
[root@~]# partprobe /dev/mapper/mpathg
[root@~]# reboot

注意:可通过 blockdev --getsize64 /dev/raw/raw*命令查看设备大小。

1.4 搭建DSC

1.4.1 创建 dmdcr_cfg.ini

db0 和 db1 机器均将数据库安装在 /opt/dsc/dmdbms/目录下,所有节点配置相同

bash 复制代码
vi /opt/dsc/config/dmdcr_cfg.ini

[dmdba@~]# vi /opt/dsc/config/dmdcr_cfg.ini
DCR_N_GRP                	= 3     ##集群环境有多少个 GROUP,范围:1~16
DCR_VTD_PATH               = /dev/raw/raw2   ##规划为 vote 的磁盘
DCR_OGUID      		= 210715   ## 消息标识,一个组里面只有一个。

[GRP]  #新建一个 GROUP
  DCR_GRP_TYPE             = CSS  ##组类型(CSS/ASM/DB)
  DCR_GRP_NAME           = GRP_CSS  ##组名
  DCR_GRP_N_EP            = 2  ##组内节点个数
  DCR_GRP_DSKCHK_CNT     = 65  ##磁盘心跳容错时间,单位:秒
[GRP_CSS]
  DCR_EP_NAME             = CSS0   ##CSS 节点名
  DCR_EP_HOST              = 192.168.6.11   ##心跳地址
  DCR_EP_PORT              = 11286   ##CSS 端口
[GRP_CSS]
  DCR_EP_NAME            = CSS1
  DCR_EP_HOST             = 192.168.6.12
  DCR_EP_PORT             = 11286

[GRP]
  DCR_GRP_TYPE              = ASM
  DCR_GRP_NAME           = GRP_ASM
  DCR_GRP_N_EP             = 2
  DCR_GRP_DSKCHK_CNT     = 61
[GRP_ASM]
  DCR_EP_NAME   = ASM0  ##ASM 节点名,和 dmasvrmal 的 MAL_INST_NAME 一致
  DCR_EP_SHM_KEY         = 42424  ##共享内存标识
  DCR_EP_SHM_SIZE        = 1024  ##共享内存大小
  DCR_EP_HOST               = 192.168.6.11  ##心跳地址
  DCR_EP_PORT               = 11276  ##ASM 端口
  DCR_EP_ASM_LOAD_PATH   = /dev/raw
[GRP_ASM]
  DCR_EP_NAME              = ASM1
  DCR_EP_SHM_KEY         = 42425
  DCR_EP_SHM_SIZE        = 1024
  DCR_EP_HOST               = 192.168.6.12
  DCR_EP_PORT               = 11276
  DCR_EP_ASM_LOAD_PATH   = /dev/raw
[GRP]
  DCR_GRP_TYPE              = DB
  DCR_GRP_NAME           = GRP_DSC
  DCR_GRP_N_EP             = 2
  DCR_GRP_DSKCHK_CNT     = 57
[GRP_DSC]
  DCR_EP_NAME             = DSC0  ##实例名,和 dm.ini 的 INSTANCE_NAME 一致
  DCR_EP_SEQNO           = 0  ##组内序号,不能重复
  DCR_EP_PORT              = 5236  ##实例端口,和 dm.ini 的 PORT_NUM 一致
[GRP_DSC]
  DCR_EP_NAME             = DSC1
  DCR_EP_SEQNO           = 1
  DCR_EP_PORT              = 5236
1.4.2 初始化磁盘组

在node1节点上操作

bash 复制代码
[dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmasmcmd
dmasmcmd V8
ASM>create dcrdisk '/dev/raw/raw1' 'dcr'
ASM>create votedisk '/dev/raw/raw2' 'vote'
ASM>create asmdisk '/dev/raw/raw3' 'LOG0'
ASM>create asmdisk '/dev/raw/raw4' 'DATA0'
ASM>init dcrdisk '/dev/raw/raw1' from '/opt/dsc/config/dmdcr_cfg.ini' identified by 'DCRpsd_123'
ASM>init votedisk '/dev/raw/raw2' from '/opt/dsc/config/dmdcr_cfg.ini'
1.4.3 配置 dmasvrmal.ini

所有节点配置相同

bash 复制代码
[dmdba@~]# vi /opt/dsc/config/dmasvrmal.ini
[MAL_INST0]
MAL_INST_NAME            = ASM0
MAL_HOST                  = 192.168.6.11  #心跳地址
MAL_PORT                  = 11266  #MAL 监听端口
[MAL_INST1]
MAL_INST_NAME            = ASM1
MAL_HOST                  = 192.168.6.12
MAL_PORT                  = 11266
1.4.4 配置 dmdcr.ini 文件
  • db0 机器配置 dmdcr.ini,dmdcr_seqno 为 0。
bash 复制代码
[dmdba@~]# vi /opt/dsc/config/dmdcr.ini
DMDCR_PATH                   = /dev/raw/raw1
DMDCR_MAL_PATH           = /opt/dsc/config/dmasvrmal.ini
DMDCR_SEQNO                  = 0
DMDCR_AUTO_OPEN_CHECK        = 111
DMDCR_ASM_TRACE_LEVEL        = 2

##DMDCR_ASM_RESTART_INTERVAL   = 60  #CSS 认定 ASM 故障重启的时间
# ASM重启
##DMDCR_ASM_STARTUP_CMD = /opt/dsc/dmdbms/bin/dmasmsvr dcr_ini=/opt/dsc/config/dmdcr.ini
##DMDCR_DB_RESTART_INTERVAL    = 60   ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起
# 数据库重启
##DMDCR_DB_STARTUP_CMD      = /opt/dsc/dmdbms/bin/dmserver path=/opt/dsc/config/dsc0_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini
##DMDCR _LINK _CHECK _IP=192.168.157.140
  • db1 机器配置 dmdcr.ini,dmdcr_seqno 为 1。
bash 复制代码
[dmdba@~]# vi /opt/dsc/config/dmdcr.ini
DMDCR_PATH                   = /dev/raw/raw1
DMDCR_MAL_PATH           = /opt/dsc/config/dmasvrmal.ini
DMDCR_SEQNO                  = 1
DMDCR_AUTO_OPEN_CHECK        = 111
DMDCR_ASM_TRACE_LEVEL        = 2

##DMDCR_ASM_RESTART_INTERVAL   = 60  #CSS 认定 ASM 故障重启的时间
# ASM重启
##DMDCR_ASM_STARTUP_CMD     = /opt/dsc/dmdbms/bin/dmasmsvr dcr_ini=/opt/dsc/config/dmdcr.ini
##DMDCR_DB_RESTART_INTERVAL    = 60   ##CSS 认定 DSC 故障重启的时间,设置为 0 不自动拉起
# 数据库重启
##DMDCR_DB_STARTUP_CMD      = /opt/dsc/dmdbms/bin/dmserver path=/opt/dsc/config/dsc1_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini
##DMDCR _LINK _CHECK _IP=192.168.157.140

当前为手动拉起 db0 机器和 db1 机器的 ASM 和 DMSERVER 服务。待集群配置完成后,再修改为自动拉起(删除 dmdcr.ini 中的"##"号即可)。

1.4.5 启动 DMCSS、DMASM 服务

在 2 个节点分别启动 dmcss 命令:

两个节点启动dmcss,dmdba用户到数据库安装目录bin下执行

shell 复制代码
[dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmcss DCR_INI=/opt/dsc/config/dmdcr.ini &

在 2 个节点分别启动dmasmsvr命令:

shell 复制代码
[dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmasmsvr DCR_INI=/opt/dsc/config/dmdcr.ini &

说明:如果 DMCSS 配置有自动拉起 dmasmsvr 的功能,可以等待 DMCSS 自动拉起 dmasmsvr 程序,不需要手动启动。

1.4.6 创建DMASM磁盘组
bash 复制代码
[dmdba@racnode1 ~]$
 /opt/dsc/dmdbms/bin/dmasmtool DCR_INI=/opt/dsc/config/dmdcr.ini

ASM> create diskgroup 'DMLOG' asmdisk '/dev/raw/raw3' 
ASM> create diskgroup 'DMDATA' asmdisk '/dev/raw/raw4'
ASM>ls
+
disk groups total [4]......
NO.1     name: DMLOG
NO.2     name: DMDATA
NO.3     name: VOTE
NO.4     name: DCR
Used time: 0.667(ms).
1.4.7 创建 dminit.ini
bash 复制代码
##创建 dminit.ini 文件
[dmdba@racnode1 ~]$ vi /opt/dsc/config/dminit.ini
DB_NAME                  = dsc
##SYSDBA_PWD 和 SYSAUDITOR_PWD 为配置数据库 SYSDBA 用户和 SYSAUDITOR 用户的登录密码,需要用户自定义配置,且需保证一定的密码强度。详细参数解释可参考达梦数据库安装目录下 doc 目录中《DM8_dminit 使用手册》
SYSDBA_PWD            = 'Linux123!@#'  
SYSAUDITOR_PWD    = 'Linux123!@#' 
SYSTEM_PATH              = +DMDATA/data
SYSTEM                   = +DMDATA/data/dsc/SYSTEM.dbf
SYSTEM_SIZE              = 1024
ROLL                     = +DMDATA/data/dsc/ROLL.dbf
ROLL_SIZE                = 10000
MAIN                     = +DMDATA/data/dsc/MAIN.dbf
MAIN_SIZE                = 1024
CTL_PATH                 = +DMDATA/data/dsc/dm.ctl
CTL_SIZE                 = 8
LOG_SIZE                 = 2048
DCR_PATH                 = /dev/raw/raw1
DCR_SEQNO                = 0
AUTO_OVERWRITE           = 1
PAGE_SIZE                = 32
EXTENT_SIZE              = 16
BLANK_PAD_MODE           = 1


[DSC0]
CONFIG_PATH              = /opt/dsc/config/dsc0_config
PORT_NUM                 = 5236
MAL_HOST                 = 192.168.6.11
MAL_PORT                 = 11246
LOG_PATH                 = +DMLOG/log/dsc/DSC0_LOG01.log
LOG_PATH                 = +DMLOG/log/dsc/DSC0_LOG02.log
[DSC1]
CONFIG_PATH              = /opt/dsc/config/dsc1_config
PORT_NUM                 = 5236
MAL_HOST                 = 192.168.6.12
MAL_PORT                 = 11246
LOG_PATH                 = +DMLOG/log/dsc/DSC1_LOG01.log
LOG_PATH                 = +DMLOG/log/dsc/DSC1_LOG02.log

##在 db0 节点执行初始化 db 命令
[dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dminit control=/opt/dsc/config/dminit.ini

##拷贝文件到 db1 节点
[dmdba@racnode1 ~]$ scp -r /opt/dsc/config/dsc1_config dmdba@192.168.6.12:/opt/dsc/config/
1.4.8 配置 dmarch.ini 文件

没有挂归档磁盘,先不配置归档了

  • db0 节点
shell 复制代码
##修改 dm.ini
[dmdba@~]# vi /opt/dsc/config/dsc0_config/dm.ini
ARCH_INI                 = 1

##创建 dmarch.ini
[dmdba@~]# vi /opt/dsc/config/dsc0_config/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dsc/arch_0
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC1
ARCH_INCOMING_PATH = /opt/dsc/arch_0_remote
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
  • db1 节点
shell 复制代码
##修改 dm.ini
[dmdba@racnode2 ~]$ vi /opt/dsc/config/dsc1_config/dm.ini
ARCH_INI                 = 1

##创建 dmarch.ini
[dmdba@racnode2 ~]$ vi /opt/dsc/config/dsc1_config/dmarch.ini
ARCH_WAIT_APPLY = 0
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dsc/arch_1
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = DSC0
ARCH_INCOMING_PATH = /opt/dsc/arch_1_remote
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 102400
1.4.9 启动 DMSERVER 服务
bash 复制代码
# A 机器

[dmdba@racnode1 log]$ /opt/dsc/dmdbms/bin/dmserver /opt/dsc/config/dsc0_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini &

# B机器
[dmdba@racnode1 log]$ /opt/dsc/dmdbms/bin/dmserver /opt/dsc/config/dsc1_config/dm.ini dcr_ini=/opt/dsc/config/dmdcr.ini &
1.4.10 注册 CSS、ASM、DMSERVER 后台服务
bash 复制代码
##db0 机器
[dmdba@racnode1 log]$ /dm/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -p CSS
[dmdba@racnode1 log]$ /dm/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[dmdba@racnode1 log]$ /dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/dsc_config/DSC0/dm.ini -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service  -p DSC

##db1 机器
[dmdba@racnode2 ~]$ /dm/dmdbms/script/root/dm_service_installer.sh -t dmcss -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -p CSS
[dmdba@racnode2 ~]$/dm/dmdbms/script/root/dm_service_installer.sh -t dmasmsvr -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmCSSServiceCSS.service -p ASM
[dmdba@racnode2 ~]$/dm/dmdbms/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm/dmdbms/dsc_config/DSC1/dm.ini -dcr_ini /dm/dmdbms/dsc_config/dmdcr.ini -y DmASMSvrServiceASM.service  -p DSC

db0 机器、db1 机器删除自启可参考以下命令。

bash 复制代码
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmCSSServiceCSS
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmASMSvrServiceASM
[root@~]# /dm/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDSC
1.4.11 配置监视器
bash 复制代码
## A 机器、B 机器配置相同
[dmdba@racnode1 ~]$ vi /opt/dsc/dmdbms/bin/dmcssm.ini
#和 DMDCR _CFG.INI 中的 DCR _OGUID 保持一致
CSSM_OGUID                 = 210715
#配置所有 CSS 的连接信息
CSSM_CSS_IP                = 192.168.6.11:11286
CSSM_CSS_IP                = 192.168.6.12:11286
CSSM_LOG_PATH              = ../log
CSSM_LOG_FILE_SIZE         = 512
CSSM_LOG_SPACE_LIMIT       = 2048

启动监视器

bash 复制代码
--前台启动:
[dmdba@racnode1 ~]$ /opt/dsc/dmdbms/bin/dmcssm INI_PATH=/opt/dsc/dmdbms/bin/dmcssm.ini &
--后台启动:
[dmdba@racnode1 ~]$/opt/dsc/dmdbms/bin/DmCSSMonitorServiceMonitor start

# 查看状态
/opt/dsc/dmdbms/bin/dmcssm  INI_PATH=/opt/dsc/dmdbms/bin/dmcssm.ini
txt 复制代码
show

monitor current time:2026-05-11 14:25:53, n_group:3
=================== group[name = GRP_CSS, seq = 0, type = CSS, Control Node = 1] ========================================

DSC_MODE = FULL
[CSS0] auto check = TRUE, global info:
[ASM0] auto restart = FALSE
[DSC0] auto restart = FALSE
[CSS1] auto check = TRUE, global info:
[ASM1] auto restart = FALSE
[DSC1] auto restart = FALSE

ep:     css_time               inst_name seqno port   mode         inst_status       vtd_status   is_ok  active guid          pid           ts
        2026-05-11 14:25:53    CSS0      0     11286  Normal Node  OPEN              WORKING      OK     TRUE   701449        3815          703396
        2026-05-11 14:25:53    CSS1      1     11286  Control Node OPEN              WORKING      OK     TRUE   1183397       4973          1185351

=================== group[name = GRP_ASM, seq = 1, type = ASM, Control Node = 0] ========================================

n_ok_ep = 2
ok_ep_arr(index, seqno):
(0, 0)
(1, 1)

sta = OPEN, sub_sta = STARTUP
break ep = NULL
recover ep = NULL

crash process over flag is TRUE
ep:     css_time               inst_name seqno port   mode         inst_status       vtd_status   is_ok  active guid          pid           ts
        2026-05-11 14:25:53    ASM0      0     11276  Control Node OPEN              WORKING      OK     TRUE   754421        4469          756259
        2026-05-11 14:25:53    ASM1      1     11276  Normal Node  OPEN              WORKING      OK     TRUE   1237511       5288          1239353

=================== group[name = GRP_DSC, seq = 2, type = DB, Control Node = 0] ========================================

n_ok_ep = 2
ok_ep_arr(index, seqno):
(0, 0)
(1, 1)

sta = OPEN, sub_sta = STARTUP
break ep = NULL
recover ep = NULL

crash process over flag is TRUE
ep:     css_time               inst_name seqno port   mode         inst_status       vtd_status   is_ok  active guid          pid           ts
        2026-05-11 14:25:53    DSC0      0     5236   Control Node OPEN              WORKING      OK     TRUE   707376        12635         707937
        2026-05-11 14:25:53    DSC1      1     5236   Normal Node  OPEN              WORKING      OK     TRUE   959789        6143          960338

==================================================================================================================

二、数据库其他配置

2.1 设置 core 路径
bash 复制代码
##使用 root 用户进行配置
su - root
echo "kernel.core_pattern=/dm/core/core-%e-%p-%t" >> /etc/sysctl.conf
sysctl -p
##使用 dmdba 用户进行测试
su - dmdba
 ##通过 kill -s 11 $$  命令来验证 core 路径是否配置成功,$$表示进程号,可以选择 kill 掉 disql 的进程来测试。
kill -s 11 $$ 
##检查是否有 core 生成
ll -rtl /dm/core 
2.2 开启 SQL 日志

集群每个节点都建议开启 SQL 日志。如果内存充足(≥32G),参数 BUF_TOTAL_SIZ、BUF_SIZE 和 BUF_KEEP_CNT 建议做如下调整。

bash 复制代码
##使用 dmdba 用户在 dm.ini 同级目录下配置 sqllog.ini 文件
vi  sqllog.ini

BUF_TOTAL_SIZE          = 1024000         #SQLs Log Buffer Total Size(K)(1024~1024000)
BUF_SIZE                = 10240          #SQLs Log Buffer Size(K)(50~409600)
BUF_KEEP_CNT            = 20             #SQLs Log buffer keeped count(1~100)

[SLOG_ALL]
    FILE_PATH    = /dm/dmsqllog #根据实际配置
    PART_STOR    = 0
    SWITCH_MODE  = 2
    SWITCH_LIMIT   = 512  #根据实际配置
    ASYNC_FLUSH   = 1
    FILE_NUM = 1024			#根据实际配置
    ITEMS    = 0 
    SQL_TRACE_MASK  = 2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:22:24:25:26:27:28:29 
    MIN_EXEC_TIME = 100
    USER_MODE   = 2 
    USERS = 

##登录数据库执行以下命令动态修改 SVR_LOG=1 开启 SQL 日志
call SP_SET_PARA_VALUE(1,'SVR_LOG',1);
2.3 调整redo
sql 复制代码
--检查 redo 设置大小
select rlog_size/1024/1024 from v$rlogfile;
--修改 redo 可参考如下命令:
alter database resize logfile 'DMDB01.log' to 2048;
alter database resize logfile 'DMDB02.log' to 2048;
2.4 创建 dm_svc.conf

以 2 节点 DSC 集群为例,配置 dm_svc.conf 文件如下

bash 复制代码
[root@~]# vi /etc/dm_svc.conf ##以下仅供参考,具体按实际需求配置
TIME_ZONE=(+8:00)       # 客户端时区,东八区
LANGUAGE=(cn)           # 客户端语言,中文
DSC1=(192.168.6.11:5236,192.168.6.12:5236)  # DSC1集群节点列表

[DSC1]
LOGIN_ENCRYPT=(0)       # 登录密码不加密
SWITCH_TIME=(20)        # 故障最大切换次数
SWITCH_INTERVAL=(2000)  # 切换间隔(毫秒)

[dmdba@racnode1 ~]$ disql SYSDBA/'"Linux123!@#"'@DSC1

服务器[192.168.6.11:5236]:处于普通打开状态
登录使用时间 : 4.416(ms)
disql V8
SQL>
2.5 常用的试图

查看DSC节点实例信息

bash 复制代码
# 查看DSC节点实例信息
SQL> select * from V$DSC_EP_INFO;

行号       EP_NAME EP_SEQNO    EP_GUID              EP_TIMESTAMP         EP_MODE      EP_STATUS
---------- ------- ----------- -------------------- -------------------- ------------ ---------
1          DSC0    0           707376               711088               Control Node OK
2          DSC1    1           959789               963489               Normal Node  OK

显示全局活动的事务锁信息,登录任意节点查询得到的结果一致。

bash 复制代码
SQL> select * from V$DSC_LOCK;

行号       EP_SEQNO    ADDR                 TRX_ID               LTYPE  LMODE
---------- ----------- -------------------- -------------------- ------ -----
           BLOCKED     TABLE_ID             ROW_IDX              IGN_FLAG
           ----------- -------------------- -------------------- -----------
1          0           139897433353408      24684                OBJECT IS
           0           150994944            0                    1

2          0           139814513969032      24684                OBJECT IS
           0           150994945            0                    1

显示 DMDSC 中所有节点活动事务相关的信息

bash 复制代码
SQL> select * from V$DSCIDS;

行号       EPSEQ       MIN_ACTIVE_ID        NEXT_ID              N_ACTIVE
---------- ----------- -------------------- -------------------- -----------
           MAX_CMT_LSN          MIN_CMT_TID          MIN_LAST_CMT_LSN
           -------------------- -------------------- --------------------
           NOTIFY_VERSION
           --------------------
1          0           24684                25720                1
           47565                24683                47567
           688


行号       EPSEQ       MIN_ACTIVE_ID        NEXT_ID              N_ACTIVE
---------- ----------- -------------------- -------------------- -----------
           MAX_CMT_LSN          MIN_CMT_TID          MIN_LAST_CMT_LSN
           -------------------- -------------------- --------------------
           NOTIFY_VERSION
           --------------------
2          1           12020                12021                0
           47550                0                    47541
           1


已用时间: 2.425(毫秒). 执行号:65504.

查看ASM磁盘组大小

bash 复制代码
select GROUP_NAME,N_DISK,FREE_MB,TOTAL_MB from V$ASMGROUP;
SQL> select GROUP_NAME,N_DISK,FREE_MB,TOTAL_MB from V$ASMGROUP;

行号       GROUP_NAME N_DISK      FREE_MB     TOTAL_MB
---------- ---------- ----------- ----------- -----------
1          DMLOG      1           2004        10207
2          DMDATA     1           38620       50963
3          VOTE       1           76          100
4          DCR        1           76          100

已用时间: 13.223(毫秒). 执行号:65505.

查看ASM磁盘组大小

bash 复制代码
select GROUP_NAME,N_DISK,FREE_MB,TOTAL_MB from V$ASMGROUP;
SQL> select GROUP_NAME,N_DISK,FREE_MB,TOTAL_MB from V$ASMGROUP;

行号       GROUP_NAME N_DISK      FREE_MB     TOTAL_MB
---------- ---------- ----------- ----------- -----------
1          DMLOG      1           2004        10207
2          DMDATA     1           38620       50963
3          VOTE       1           76          100
4          DCR        1           76          100

已用时间: 13.223(毫秒). 执行号:65505.
相关推荐
胡图图不糊涂^_^19 分钟前
测试BUG篇
学习·bug·测试
Nturmoils28 分钟前
一台 2C2G 服务器上的 KingbaseES 安装记录
数据库
SelectDB1 小时前
从 Machine-Readable 到 Agent-Ready:面向智能体的数据库接口演进
大数据·数据库·agent
画江湖Test2 小时前
Redis 块的原理
数据库·redis·缓存·性能优化
流烟默2 小时前
国产数据库CERDB是什么以及服务启停
数据库·cerdb
数据库小学妹2 小时前
关系型数据库核心原理拆解:SQL解析、事务引擎、存储结构全链路分析
数据库·经验分享·sql·数据库架构·dba
海市公约2 小时前
Redis主从复制全量同步七步时序与命令传播机制详解
数据库·redis·缓存·主从复制·高可用架构·全量同步
我是唐青枫2 小时前
Java JdbcTemplate 实战指南:用 Spring 轻量完成数据库增删改查
java·数据库·spring
梓䈑2 小时前
【MySQL】MySQL安装 和 配置
数据库·mysql