系统运维

达梦数据库的数据定时备份和恢复脚本

daimafengzi · 5月6日 · 2024年 · · 本文共1664个字 · 预计阅读6分钟5次已读

达梦数据库的数据定时备份和恢复脚本

背景

项目的国产化要求,使用达梦数据库进行存储,考虑到数据安全,所以需要进行定时的全量备份,在意外情况下,进行数据的全量恢复。

注意事项

1. 该备份脚本是全量备份,建议进行定期清理,防止备份数据过多,占用磁盘存储。
2. 恢复脚本是全量恢复,但是不会覆盖已存在的数据。

使用说明

      1、修改备份脚本内容,指定达梦数据库的bin文件夹位置
      2、使用crontab命令创建定时任务
      3、检查备份情况

清理旧备份及备份脚本

#!/bin/bash
#1、修改备份脚本内容,指定达梦数据库的bin文件夹位置
#2、使用crontab命令创建定时任务
#3、检查备份情况
# 备份操作
# 获取当前日期作为备份目录名
DATE=$(date +%Y%m%d%H%M%S)
FILENAME="data%U.dmp"
LOG_NAME="data%U.log"
#下面地址是:达梦安装地址
DM_HOME="/home/dmdba/dmdbms"
#下面地址是:备份文件存放地址
BACKUP_HOME="/home/backup/dameng/backup"
DBURL="SYSDBA/[email protected]:5236"
FILE_PATH="$BACKUP_HOME/$DATE"

# 创建备份目录
mkdir -p "$FILE_PATH"

cd "$DM_HOME/bin/"
echo "./dexp "$DBURL" file="$FILE_PATH/$FILENAME" log="$FILE_PATH/$LOG_NAME" FULL=Y FILESIZE=10240m COMPRESS=Y PARALLEL=4 TABLE_PARALLEL=2 TABLE_POOL=3"
./dexp "$DBURL" file="$FILE_PATH/$FILENAME" log="$FILE_PATH/$LOG_NAME" FULL=Y FILESIZE=10240m COMPRESS=Y PARALLEL=4 TABLE_PARALLEL=2 TABLE_POOL=3


# 删除早期文件,防止文件占用资源
# 定义要检查的目录和最大允许的子目录数量
MAX_BACKUP_NUM=5

# 获取子目录数量,排除父目录
subdir_count=$(find "$BACKUP_HOME" -mindepth 1 -maxdepth 1 -type d | wc -l)

# 如果子目录数量大于5
if [ $subdir_count -gt $MAX_BACKUP_NUM ]; then
    # 获取所有子目录并按创建时间排序(升序,最早的在前)
    sorted_dirs=$(find "$BACKUP_HOME" -mindepth 1 -maxdepth 1 -type d -exec stat -c '%w %n' {} + | sort -n)
	echo $sorted_dirs
    # 获取并删除最早的子目录
    oldest_dir=$(echo "$sorted_dirs" | head -n 1 | awk '{print $2}')
    rm -rf "$oldest_dir"
    echo "删除了最旧的目录: $oldest_dir"
else
    echo "子目录的数量小于或等于5。"
fi

创建定时任务

crontab -e
# 添加下列内容
# 添加以下行,假设每三天的凌晨1点执行备份
0 1 */3 * * /bin/bash /root/dm/backup_dm.sh

恢复脚本

#!/bin/bash
#1.设置达梦安装目录
DM_HOME="/home/dmdba/dmdbms"
#2.设置达梦备份文件目录
RECOVER_HOME="/home/backup/dameng/backup/20240506000226"
#3.设置达梦连接信息
DBURL="SYSDBA/[email protected]:5236"

#4.执行备份恢复
cd "$DM_HOME/bin/"
./dimp USERID=$DBURL FILE=$RECOVER_HOME/data01.dmp LOG=db_str.log FULL=Y DIRECTORY=$RECOVER_HOME
0 条回应