抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

原教程

https://eco.dameng.com/document/dm/zh-cn/ops/physical-backup-restore.html
里边包含了达梦管理工具,开启备份。本文重点介绍无管理工具下如何实现备份。
参照之前安装达梦数据库,目录沿用之前的。

mkdir -p /dmdata/dmbak/full
mkdir -p /dmdata/dmbak/log
chown -R dmdba:dmdba /dmdata/dmbak

后续请切换到dmdba用户下执行

开启归档

必须开启

##修改数据库为 Mount 状态
ALTER DATABASE MOUNT;

##开启归档模式
ALTER DATABASE ARCHIVELOG;

##配置本地归档
ALTER DATABASE ADD ARCHIVELOG 'DEST = /dmdata/arch, TYPE = local,FILE_SIZE = 1024, SPACE_LIMIT = 2048';

##修改数据库为 Open 状态
ALTER DATABASE OPEN;

备份命令

物理备份

full_backup.sh

#!/bin/bash

# 达梦环境变量配置
export DM_HOME=/home/dmdba/dmdbms
export PATH=$DM_HOME/bin:$PATH

# 备份目录配置
FULL_BACKUP_DIR=/dmdata/dmbak/full
INCREMENT_BACKUP_DIR=/dmdata/dmbak/increment
LOG_DIR=/dmdata/dmbak/log

# 备份文件时间戳
DATE_STR=$(date +%Y%m%d_%H%M%S)

# 日志文件
LOG_FILE=${LOG_DIR}/backup_${DATE_STR}.log

# 数据库登录信息
USER=sysdba
PASS=Dm123456
HOST=localhost
PORT=5236

# 需要备份的模式列表(请替换为你自己的模式名)
SCHEMAS=("schema1" "schema2" "schema3")

# 删除3天前的备份文件和日志
find $FULL_BACKUP_DIR -type f -mtime +3 -exec rm -f {} \; >> $LOG_FILE 2>&1
find $INCREMENT_BACKUP_DIR -type f -mtime +3 -exec rm -f {} \; >> $LOG_FILE 2>&1
find $LOG_DIR -type f -mtime +3 -exec rm -f {} \; >> $LOG_FILE 2>&1

echo "[INFO] 备份开始,时间:$(date '+%F %T')" | tee -a $LOG_FILE

# 全量备份:循环备份各个模式(schema)
for schema in "${SCHEMAS[@]}"
do
echo "[INFO] 备份模式 $schema 开始..." | tee -a $LOG_FILE
disql ${USER}/${PASS}@${HOST}:${PORT} <<EOF >> $LOG_FILE 2>&1
BACKUP SCHEMA $schema BACKUPSET '${FULL_BACKUP_DIR}/schema_${schema}_full_bak_${DATE_STR}';
EXIT;
EOF
if [ $? -eq 0 ]; then
echo "[INFO] 备份模式 $schema 完成,时间:$(date '+%F %T')" | tee -a $LOG_FILE
else
echo "[ERROR] 备份模式 $schema 失败,请查看日志" | tee -a $LOG_FILE
fi
done

# 增量备份:针对全库(不指定模式)
echo "[INFO] 开始执行全库增量备份..." | tee -a $LOG_FILE
disql ${USER}/${PASS}@${HOST}:${PORT} <<EOF >> $LOG_FILE 2>&1
BACKUP DATABASE INCREMENT WITH BACKUPDIR '${INCREMENT_BACKUP_DIR}' BACKUPSET '${INCREMENT_BACKUP_DIR}/db_increment_bak_${DATE_STR}';
EXIT;
EOF

if [ $? -eq 0 ]; then
echo "[INFO] 增量备份完成,时间:$(date '+%F %T')" | tee -a $LOG_FILE
else
echo "[ERROR] 增量备份失败,请查看日志" | tee -a $LOG_FILE
fi

echo "[INFO] 备份全部完成,时间:$(date '+%F %T')" | tee -a $LOG_FILE

授予权限

yum install dos2unix -y

chmod +x /dmdata/dmbak/full_backup.sh
cd /dmdata/dmbak
dos2unix full_backup.sh
./full_backup.sh

逻辑备份

dexp_backup.sh

#!/bin/bash
export DM_HOME=/home/dmdba/dmdbms
export PATH=${DM_HOME}:${PATH}
backupDIR=/dmdata/dmbak/full
runTime=`date +%Y%m%d_%H%M`
logFile=/dmdata/dmbak/log/backup_${runTime}.log
deleteTime=3
user=sysdba
passwd=Dm123456
port=5236

#删除${deleteTime}前的备份文件
find ${backupDIR} -type f -name "*.dmp" -ctime +${deleteTime} -exec rm -f {} \; >> ${logFile} 2>&1
#删除30天前的日志
find ${backupDIR} -type f -name "*.log" -ctime +${deleteTime} -exec rm -f {} \; >> ${logFile} 2>&1

cd ${DM_HOME}/bin

#四种级别:full,owner,schemas,tables
#全库导出full
./dexp ${user}/${passwd}:${port} DIRECTORY=${backupDIR} FILE=fullbak_${runTime}.dmp full=y LOG=exp_fullbak_${runTime}.log >> ${logFile} 2>&1

#owner,schemas,tables
#遍历需要导出的数据库,导出命令中的OWNER也可以是SCHEMAS或TABLES,for循环中写要备份的内容
#for line in user1 user2 user3
#do
#./dexp ${user}/${passwd}:${port} DIRECTORY=${backupDIR} FILE=${line}_${runTime}.dmp OWNER=${line} LOG=exp_${line}_${runTime}.log >> ${logFile} 2>&1
#done

授予权限

chmod +x /dmdata/dmbak/dexp_backup.sh
cd /dmdata/dmbak
dos2unix dexp_backup.sh
./dexp_backup.sh

数据恢复

说一下物理恢复,挺有意思,先得把数据库停了,进入安装目录/bin下执行

systemctl stop DmServiceDMServer.service

cd /home/dmdba/dmdbms/bin
./dmrman

#这三步是必须的,少任何一步数据库启动不了了
RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/full/db_full_bak_20250615_232920'
RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/full/db_full_bak_20250615_232920'
RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC

systemctl start DmServiceDMServer.service

评论