背景
项目的国产化要求,使用达梦数据库进行存储,考虑到数据安全,所以需要进行定时的全量备份,在意外情况下,进行数据的全量恢复。
注意事项
1. 该备份脚本是全量备份,建议进行定期清理,防止备份数据过多,占用磁盘存储。
2. 恢复脚本是全量恢复,但是不会覆盖已存在的数据。
使用说明
- 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/SYSDBA@127.0.0.1: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/SYSDBA@127.0.0.1:5236" #4.执行备份恢复 cd "$DM_HOME/bin/" ./dimp USERID=$DBURL FILE=$RECOVER_HOME/data01.dmp LOG=db_str.log FULL=Y DIRECTORY=$RECOVER_HOME