背景
项目的国产化要求,使用达梦数据库进行存储,考虑到数据安全,所以需要进行定时的全量备份,在意外情况下,进行数据的全量恢复。
注意事项
该备份脚本是全量备份,建议进行定期清理,防止备份数据过多,占用磁盘存储。
恢复脚本是全量恢复,但是不会覆盖已存在的数据。
使用说明
1、修改备份脚本内容,指定达梦数据库的bin文件夹位置
2、使用crontab命令创建定时任务
3、检查备份情况
清理及备份脚本
#!/bin/bash
# 备份操作
# 获取当前日期作为备份目录名
DATE=$(date +%Y%m%d%H%M%S)
FILENAME="data%U.dmp"
LOG_NAME="data%U.log"
DM_HOME="/data/dameng/dmdbms"
BACKUP_HOME="/data/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 "Deleted the oldest directory: $oldest_dir"
else
echo "The number of subdirectories is less than or equal to 5."
fi
# 可以选择在备份完成后发送邮件通知等操作
# ...
创建定时任务
crontab -e
# 添加下列内容
# 添加以下行,假设每三天的凌晨1点执行备份
0 1 */3 * * /bin/bash /root/dm/backup_dm.sh
恢复脚本
#!/bin/bash
# 获取当前日期作为备份目录名
DM_HOME="/data/dameng/dmdbms"
RECOVER_HOME="/data/dameng/backup/20240307010001"
DBURL="SYSDBA/SYSDBA@127.0.0.1:5236"
cd "$DM_HOME/bin/"
./dimp USERID=$DBURL FILE=$RECOVER_HOME/data01.dmp LOG=db_str.log FULL=Y DIRECTORY=$RECOVER_HOME
联系作者
如果有任何疑问,请邮件联系作者。
zhuxuanyong@163.com