KylinOS+DM8+NFS:数据库备份实战

介绍

紧接上文在KylinOS-Server-V10-SP3中配置好了达梦数据库DM8,创建了普通用户webapp来避开权限问题。同时配置了Nginx+Flask实现了一个基础的前后端交互网页。

web服务器

按照剩余题目要求,需要实现以下内容

数据库集群搭建

  1. 主从集群搭建:完成达梦数据库主从集群搭建,实现主从节点数据实时同步,确保主节点故障时,从节点可正常切换,保障数据库⾼可⽤。

数据库配置与管理

  1. 数据库管理:创建数据库表空间、数据表、专⽤应⽤⽤⼾,分配合理权限;导⼊测试数据(数据量规模⾃定,需满⾜应⽤查询需求);配置数据库备份策略(备份⽅式、频率⾃定),确保数据安全,可正常完成备份与恢复操作。

先前准备

首先需要保证各项服务的正常运行与联通

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
[root@Kylin-Server-02 erp]# systemctl status nfs
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
Drop-In: /run/systemd/generator/nfs-server.service.d
└─order-with-mounts.conf
Active: active (exited) since Thu 2026-05-21 15:36:30 CST; 5 days ago
Main PID: 48732 (code=exited, status=0/SUCCESS)
Tasks: 0
Memory: 0B
CGroup: /system.slice/nfs-server.service

5月 21 15:36:30 Kylin-Server-02 systemd[1]: Starting NFS server and services...
5月 21 15:36:30 Kylin-Server-02 rpc.nfsd[48732]: rpc.nfsd: knfsd is currently down
5月 21 15:36:30 Kylin-Server-02 rpc.nfsd[48732]: rpc.nfsd: Writing version string to kernel: -2 +3 +4 +4.1 +4.2
5月 21 15:36:30 Kylin-Server-02 rpc.nfsd[48732]: rpc.nfsd: Created AF_INET TCP socket.
5月 21 15:36:30 Kylin-Server-02 rpc.nfsd[48732]: rpc.nfsd: Created AF_INET6 TCP socket.
5月 21 15:36:30 Kylin-Server-02 systemd[1]: Started NFS server and services.

[root@Kylin-Server-02 erp]# systemctl status erp-app.service
● erp-app.service - ERP Application (Flask Backend)
Loaded: loaded (/etc/systemd/system/erp-app.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2026-05-27 14:09:44 CST; 35min ago
Main PID: 54991 (python3)
Tasks: 4
Memory: 44.2M
CGroup: /system.slice/erp-app.service
├─54991 /usr/bin/python3 /data/www/erp/app.py
└─54993 /usr/bin/python3 /data/www/erp/app.py

5月 27 14:13:08 Kylin-Server-02 python3[54993]: 192.168.44.1 - - [27/May/2026 14:13:08] "GET / HTTP/1.1" 200 -

[root@Kylin-Server-02 erp]# df -h /data/backup /data/logs /data/app
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/klas-root 37G 21G 17G 56% /
/dev/mapper/klas-root 37G 21G 17G 56% /
/dev/mapper/klas-root 37G 21G 17G 56% /
[root@Kylin-Server-02 erp]# rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 58803 status
100024 1 tcp 41031 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100021 1 udp 50281 nlockmgr
100021 3 udp 50281 nlockmgr
100021 4 udp 50281 nlockmgr
100021 1 tcp 43077 nlockmgr
100021 3 tcp 43077 nlockmgr
100021 4 tcp 43077 nlockmgr

数据库状态

配置数据库

首先配置数据库热备,也就是开启数据库归档模式,此时需要完全关闭达梦数据库

1
2
3
ps -ef | grep dmserver
kill -9 PID
/home/dmdba/dmdbms/bin/DmServiceDMSERVER stop

修改dm.ini,找到/dmdata/data/DAMENG下的dm.ini打开,将ARCH_INI设置为1,保存退出

image-20260527161946577

创建一个临时的归档目录(相当于中转站的形式)

1
2
mkdir -p /dmarch
chmod -R 777 /dmarch

使用mount的形式挂载数据库,这里其实感觉使用./dmservice.sh来启动数据库应该可以,笔者没有尝试,因为看路径来说调用的dm.ini是一致的,就是不清楚mount与非mount区别

1
/home/dmdba/dmdbms/bin/dmserver /dmdata/DMDB/dm.ini mount

image-20260527162406210

使用命令行mount之后命令行暂时保持不关闭挂载到后台,此时使用dmdba用户进行登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@Kylin-Server-02 bin]# ./disql SYSDBA/SYSDBA

服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间 : 2.259(ms)
disql V8
SQL> alter database add archivelog
'DEST=/dmarch,TYPE=LOCAL,FILE_SIZE=1024,SPACE_LIMIT=20480';2
操作已执行
已用时间: 7.078(毫秒). 执行号:0.
SQL> alter database archivelog;
操作已执行
已用时间: 25.512(毫秒). 执行号:0.
SQL> alter database open;
操作已执行
已用时间: 47.272(毫秒). 执行号:0.
SQL> select arch_mode from v$database;

行号 ARCH_MODE
---------- ---------
1 Y

已用时间: 18.815(毫秒). 执行号:101.
SQL> backup database full backupset '/data/backup/full_20260527';
操作已执行
已用时间: 00:00:04.168. 执行号:801.

注意最后运行备份可能会遇到报错创建失败以及权限不足问题,通过以下命令来纠正

1
2
[root@Kylin-Server-02 tool]# chown -R dmdba:dinstall /data/backup/*
[root@Kylin-Server-02 tool]# chmod 755 /data/backup/*

脚本配置

来到达梦数据库的bin文件夹下创建新文件full_backup.sh,向脚本内写入以下内容,并赋予权限

full_backup.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

DATE=$(date +%F_%H-%M-%S)

LOG=/data/backup/backup.log

echo "===== backup start $DATE =====" >> $LOG
./disql SYSDBA/SYSDBA@127.0.0.1:5236 <<EOF >> $LOG 2>&1

backup database full
backupset '/data/backup/full_$DATE';

exit;

EOF

echo "===== backup end =====" >> $LOG

赋予权限,chmod +x full_backup.sh并运行./full_backup.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[dmdba@Kylin-Server-02 bin]$ ./full_backup.sh 
[dmdba@Kylin-Server-02 bin]$ cat /data/backup/backup.log
===== backup start 2026-05-27_16-15-13 =====

服务器[127.0.0.1:5236]:处于普通打开状态
登录使用时间 : 2.148(ms)
disql V8
SQL> SQL> 2 操作已执行
已用时间: 00:00:04.214. 执行号:1501.
SQL> SQL> ===== backup end =====
===== backup start 2026-05-27_16-28-35 =====

服务器[127.0.0.1:5236]:处于普通打开状态
登录使用时间 : 3.567(ms)
disql V8
SQL> SQL> 2 操作已执行
已用时间: 00:00:04.617. 执行号:1701.
SQL> SQL> ===== backup end =====

结果内容无误之后去往Server1查看NFS备份文件同步状态,一切正常,开始考虑将脚本放入自动计划

image-20260527163357344

定时任务

使用定时器Crontab,进入定时器crontab -e,添加如下规则

image-20260527163632503

可能有人问,为什么不用vim /etc/crontab来设置

  • crontab -e 主要是用户级定时任务
  • vim /etc/cronta 主要是系统级定时任务

收尾工作

理论上来说定为系统级定时任务更好,这里属于是笔者边做边写的,主要是还是按照个人需求来,配置完成之后设置开机自启并查看服务状态

image-20260527164047759

image-20260527164826208

其实过程中笔者还遇到了许多问题,比如运行脚本之后.disql无法正常运行等,通过./DmService.sh stop重启下服务即可。还有许多许多问题,时过境迁,已无法想起,如果在参照此篇blog配置遇到问题欢迎在下方留言,我会尽我所能解答。

Author: Bztiks
Link: http://bztiks.github.io/2026/05/27/KylinOS-DM8-NFS-数据库备份实战/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.