DNF自动备份数据库脚本
时间:2024-05-28 来源:未知 投稿:admin 点击:次
脚本内容:
#!/bin/bash
# MySQL连接参数
USER='game'
PASSWORD='123456'
HOST='localhost'
# 备份基础目录
BASE_BACKUP_DIR='/opt/backup'
# 当前时间
CURRENT_TIME=$(date +%Y%m%d%H)
# 计算一个小时前的时间
ONE_HOUR_AGO=$(date -d "1 hour ago" +%Y%m%d%H)
# 遍历备份目录中的所有文件夹
for BACKUP_SUBDIR in "${BASE_BACKUP_DIR}"/*; do
# 提取文件夹名称中的日期部分
SUBDIR_DATE=$(basename "$BACKUP_SUBDIR")
# 如果文件夹名称中的日期早于一个小时前的时间
if [[ "$SUBDIR_DATE" < "$ONE_HOUR_AGO" ]]; then
# 删除该文件夹及其内容
echo "删除更早的备份文件夹:$BACKUP_SUBDIR"
rm -rf "$BACKUP_SUBDIR"
fi
done
# 获取当前日期和时间
DATE=$(date +%Y%m%d%H)
BACKUP_SUBDIR="${BASE_BACKUP_DIR}/${DATE}"
# 确保备份子目录存在
mkdir -p "$BACKUP_SUBDIR"
# 获取所有数据库名
DATABASES=$(mysql -u$USER -p$PASSWORD -h$HOST -Nse "SHOW DATABASES;" | grep -Ev "(Database|information_schema|mysql|performance_schema|sys)")
# 为每个数据库创建备份
for DB in $DATABASES; do
# 构造备份文件名
BACKUP_FILE="${BACKUP_SUBDIR}/${DB}.tar.gz"
BACKUP_SQL_FILE="${BACKUP_SUBDIR}/${DB}.sql"
# 创建数据库的SQL备份文件
mysqldump -u$USER -p$PASSWORD -h$HOST $DB > "$BACKUP_SQL_FILE"
# 检查mysqldump是否成功
if [ $? -eq 0 ]; then
echo "数据库 ${DB} 的SQL备份文件已生成:${BACKUP_SQL_FILE}"
# 将备份文件压缩
tar -czf "$BACKUP_FILE" "$BACKUP_SQL_FILE"
# 检查是否压缩成功
if [ $? -eq 0 ]; then
echo "备份文件已成功压缩为 ${BACKUP_FILE}。"
# 删除未压缩的备份文件
rm "$BACKUP_SQL_FILE"
else
echo "压缩备份文件时发生错误。"
# 如果压缩失败,保留原始的SQL备份文件
rm -f "$BACKUP_FILE"
fi
else
echo "在导出数据库 ${DB} 时发生错误。"
# 如果mysqldump失败,删除生成的SQL备份文件
rm -f "$BACKUP_SQL_FILE"
fi
done
echo "全部完成。"
添加计划任务:
crontab -e 添加任务
0 */8 * * * Mysql_backup
或者
0 1,7,13,19 * * * /home/mysql_backup
#!/bin/bash
# MySQL连接参数
USER='game'
PASSWORD='123456'
HOST='localhost'
# 备份基础目录
BASE_BACKUP_DIR='/opt/backup'
# 当前时间
CURRENT_TIME=$(date +%Y%m%d%H)
# 计算一个小时前的时间
ONE_HOUR_AGO=$(date -d "1 hour ago" +%Y%m%d%H)
# 遍历备份目录中的所有文件夹
for BACKUP_SUBDIR in "${BASE_BACKUP_DIR}"/*; do
# 提取文件夹名称中的日期部分
SUBDIR_DATE=$(basename "$BACKUP_SUBDIR")
# 如果文件夹名称中的日期早于一个小时前的时间
if [[ "$SUBDIR_DATE" < "$ONE_HOUR_AGO" ]]; then
# 删除该文件夹及其内容
echo "删除更早的备份文件夹:$BACKUP_SUBDIR"
rm -rf "$BACKUP_SUBDIR"
fi
done
# 获取当前日期和时间
DATE=$(date +%Y%m%d%H)
BACKUP_SUBDIR="${BASE_BACKUP_DIR}/${DATE}"
# 确保备份子目录存在
mkdir -p "$BACKUP_SUBDIR"
# 获取所有数据库名
DATABASES=$(mysql -u$USER -p$PASSWORD -h$HOST -Nse "SHOW DATABASES;" | grep -Ev "(Database|information_schema|mysql|performance_schema|sys)")
# 为每个数据库创建备份
for DB in $DATABASES; do
# 构造备份文件名
BACKUP_FILE="${BACKUP_SUBDIR}/${DB}.tar.gz"
BACKUP_SQL_FILE="${BACKUP_SUBDIR}/${DB}.sql"
# 创建数据库的SQL备份文件
mysqldump -u$USER -p$PASSWORD -h$HOST $DB > "$BACKUP_SQL_FILE"
# 检查mysqldump是否成功
if [ $? -eq 0 ]; then
echo "数据库 ${DB} 的SQL备份文件已生成:${BACKUP_SQL_FILE}"
# 将备份文件压缩
tar -czf "$BACKUP_FILE" "$BACKUP_SQL_FILE"
# 检查是否压缩成功
if [ $? -eq 0 ]; then
echo "备份文件已成功压缩为 ${BACKUP_FILE}。"
# 删除未压缩的备份文件
rm "$BACKUP_SQL_FILE"
else
echo "压缩备份文件时发生错误。"
# 如果压缩失败,保留原始的SQL备份文件
rm -f "$BACKUP_FILE"
fi
else
echo "在导出数据库 ${DB} 时发生错误。"
# 如果mysqldump失败,删除生成的SQL备份文件
rm -f "$BACKUP_SQL_FILE"
fi
done
echo "全部完成。"
添加计划任务:
crontab -e 添加任务
0 */8 * * * Mysql_backup
或者
0 1,7,13,19 * * * /home/mysql_backup
如果您的问题仍未解决,还可以加入服务器在线技术交流QQ群:8017413寻求帮助。
上一篇:没有了
下一篇:没有了
下一篇:没有了
相关内容
最新热点内容
推荐内容