一、为什么要重视数据库备份?
数据是企业的核心资产。一次误操作、硬件故障或勒索软件攻击,都可能导致数据永久丢失。达梦DM8提供了完善的备份恢复机制,包括物理备份、逻辑备份、增量备份、归档备份等多种方式。
二、达梦备份方式概览
-
物理备份:使用dmrman工具,备份整个数据库文件,速度快
-
逻辑备份:使用dexp/dimp工具,备份/恢复指定对象(表、模式等)
-
归档备份:基于归档日志的增量备份,实现任意时间点恢复
三、开启归档模式
归档模式是实现增量备份和时间点恢复的前提:
# 1. 修改dm.ini配置文件 su - dmdba vi /dm/data/DAMENG/dm.ini # 修改以下参数: ARCH_INI = 1 # 如果没有则添加 # 2. 创建归档配置文件 cat > /dm/data/DAMENG/dmarch.ini SELECT ARCH_MODE, STATUS FROM v$database; SQL> SELECT * FROM v$arch_status;
四、物理备份(dmrman)
4.1 全量备份
# 基本全量备份 ./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL BACKUPSET '/dm/backup/full_$(date +%Y%m%d)'" # 全量备份并压缩 ./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL BACKUPSET '/dm/backup/full_$(date +%Y%m%d)' COMPRESSED LEVEL 6"
4.2 增量备份
# 基于上次全量备份做增量 ./dmrman CTLSTMT="BACKUP DATABASE '/dm/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/dm/backup' BACKUPSET '/dm/backup/incr_$(date +%Y%m%d_%H%M)'"
4.3 备份脚本(生产推荐)
#!/bin/bash
# dm_backup.sh - 达梦数据库自动备份脚本
BACKUP_DIR=/dm/backup
DATE=$(date +%Y%m%d)
LOG_FILE=/var/log/dm_backup.log
# 保留最近30天全量备份,删除旧的
find ${BACKUP_DIR} -name "full_*" -mtime +30 -exec rm -rf {} \;
# 周日做全量备份,日常做增量
if [ $(date +%u) -eq 7 ]; then
su - dmdba -c "/opt/dmdbms/bin/dmrman CTLSTMT="
BACKUP DATABASE '/dm/data/DAMENG/dm.ini' FULL
BACKUPSET '${BACKUP_DIR}/full_${DATE}'
COMPRESSED LEVEL 6""
echo "[$(date)] Full backup done" >> ${LOG_FILE}
else
su - dmdba -c "/opt/dmdbms/bin/dmrman CTLSTMT="
BACKUP DATABASE '/dm/data/DAMENG/dm.ini' INCREMENT
WITH BACKUPDIR '${BACKUP_DIR}'
BACKUPSET '${BACKUP_DIR}/incr_${DATE}_\$(date +%H%M)'""
echo "[$(date)] Incremental backup done" >> ${LOG_FILE}
fi
五、逻辑备份(dexp/dimp)
5.1 导出(dexp)
# 全库导出 ./dexp SYSDBA/SYSDBA@localhost:5236 FILE=/dm/backup/dexp/fulldb.dmp LOG=fulldb.log FULL=Y DIRECTORY=/dm/backup/dexp # 按用户导出 ./dexp SYSDBA/SYSDBA@localhost:5236 FILE=/dm/backup/dexp/app.dmp LOG=app.log OWNER=APP_USER # 按表导出 ./dexp SYSDBA/SYSDBA@localhost:5236 FILE=/dm/backup/dexp/tables.dmp TABLES=user_table,order_table # 导出DDL(不包含数据) ./dexp SYSDBA/SYSDBA@localhost:5236 FILE=/dm/backup/dexp/schema.sql ROWS=N
5.2 导入(dimp)
# 全库导入 ./dimp SYSDBA/SYSDBA@localhost:5236 FILE=/dm/backup/dexp/fulldb.dmp FULL=Y # 按用户导入 ./dimp SYSDBA/SYSDBA@localhost:5236 FILE=/dm/backup/dexp/app.dmp FROM_USER=APP_USER TO_USER=APP_USER
六、恢复操作
6.1 全量恢复
# 恢复前的准备工作 systemctl stop DmServiceDMSERVER # 使用dmrman恢复 ./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/backup/full_20260301'" ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/backup/full_20260301'" # 重启数据库 systemctl start DmServiceDMSERVER
6.2 时间点恢复(PITR)
这是应对"误删数据"场景最重要的恢复方式:
# 恢复到指定时间点 ./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/backup/full_20260301'" ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/backup/full_20260301' UNTIL TIME '2026-03-01 14:30:00'" # 恢复到指定LSN ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/backup/full_20260301' UNTIL LSN 4398046511104"
七、容灾方案
7.1 主备同步(DW模式)
# 主库配置(dm.ini) ARCH_INI = 1 MAL_INI = 1 # 备库配置 # 使用dmwatcher和dmmontor实现自动切换 # 配置主备同步后,备库执行 ./dmrman CTLSTMT="RESTORE DATABASE '/dm/data/DAMENG/dm.ini' FROM BACKUPSET '/dm/backup/full_20260301'" ./dmrman CTLSTMT="RECOVER DATABASE '/dm/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
7.2 异地灾备
使用rsync或scp将备份文件传输到异地服务器:
#!/bin/bash
# 备份同步脚本
rsync -avz --progress /dm/backup/ backup@remote-server:/dm/backup/
# 删除远程7天前的备份
ssh backup@remote-server "find /dm/backup -name 'full_*' -mtime +7 -exec rm -rf {} \;"
八、备份恢复的验证
定期验证备份文件可用性非常重要,否则灾难发生时才发现备份不可用就晚了:
# 每月至少做一次恢复演练 # 在测试环境执行: ./dmserver /dm/data/DAMENG/dm.ini ./dmrman CTLSTMT="CHECK BACKUPSET '/dm/backup/full_20260301'" ./disql SYSDBA/SYSDBA@localhost:5236 SQL> SELECT COUNT(*) FROM important_table;
九、总结
备份策略的核心原则:3-2-1原则——至少3份副本,2种不同介质,1份异地存储。达梦DM8的备份恢复体系非常完善,关键是运维人员要建立定期备份和恢复演练的机制。
原文链接:https://shibaolong.com/115/
更多安全技术文章请访问 月梦沉冰的安全博客
