mysql备份脚本参考

2024-05-20 10:08:03 2106

mysql备份脚本参考

蓝队云小课堂:

在操作数据过程中,可能会导致数据错误,甚至数据库奔溃,而有效的定时备份能很好地保护数据库。本篇文章主要给出一个可一作为参考的数据库备份脚本。

#!/bin/bash

 

# 设置MySQL用户名和密码

MYSQL_USER="your_mysql_user"

MYSQL_PASSWORD="your_mysql_password"

 

# 获取当前日期

CURRENT_DATE=$(date +"%Y%m%d")

 

# 设置备份目录

BACKUP_DIR="/home/backup/$CURRENT_DATE"

 

 

# 设置日志文件

LOG_FILE="/home/mysqlbackup_log/backup_log_$CURRENT_DATE.txt"

 

 

# 创建备份目录和日志目录(如果不存在)

mkdir -p $BACKUP_DIR

mkdir -p $(dirname $LOG_FILE)

 

# 获取MySQL所有数据库列表,排除Database|information_schema|performance_schema|mysql四个mysql自带数据库

DATABASES=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)")

 

# 检测磁盘空间,确保至少有1GB的空间

MIN_DISK_SPACE=1024000

AVAILABLE_SPACE=$(df -P $BACKUP_DIR | awk 'NR==2 {print $4}')

if [ $AVAILABLE_SPACE -lt $MIN_DISK_SPACE ]; then

    # 删除最老的备份文件,直到腾出足够的空间

    while [ $AVAILABLE_SPACE -lt $MIN_DISK_SPACE ]; do

        OLDEST_FILE=$(ls -1t $BACKUP_DIR | grep ".gz" | tail -n 1)

        rm $BACKUP_DIR/$OLDEST_FILE >> /dev/null

        AVAILABLE_SPACE=$(df -P $BACKUP_DIR | awk 'NR==2 {print $4}')

    done

fi

 

# 循环备份每个数据库,并将输出写入日志文件

for DB in $DATABASES

do

    # 设置备份文件名

    BACKUP_FILE="$BACKUP_DIR/$DB-$CURRENT_DATE.sql"

 

    # 导出数据库

    mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $DB > $BACKUP_FILE >> /dev/null

 

    # 压缩备份文件

    gzip $BACKUP_FILE

 

    # 删除原始的非压缩备份文件

    rm $BACKUP_FILE >> /dev/null

 

    # 记录备份过程到日志文件

    echo "[$(date +"%Y-%m-%d %H:%M:%S")] Backup completed for database: $DB" >> $LOG_FILE

done

 

# 记录备份完成信息到日志文件

echo "[$(date +"%Y-%m-%d %H:%M:%S")] Backup process completed." >> $LOG_FILE

 

 

# 加入计划任务,每天执行,输出信息保存在/home/backup/logs/mysql_outlog文件中

# crontab -e

# 0 0 * * * bash -c /home/scripts/mysqlautobackup.sh >> /home/backup/logs/mysql_outlog

更多小知识,可联系蓝队云一起探讨。

 

 


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: