mysql定期全量备份脚本

📅 2026/7/3 17:55:13
mysql定期全量备份脚本
在工作过程中因为问题排查的需要可能需要将数据进行备份创建全量备份脚本/data/scripts/full_backup.sh内容如下#!/bin/bash # MySQL 全量备份脚本使用 Xtrabackup 或 mysqldump BACKUP_DIR/data/backup/mysql/full DATE$(date %Y%m%d_%H%M%S) BACKUP_PATH$BACKUP_DIR/$DATE LOG_FILE/data/logs/binlog_backup/full_backup.log log() { echo [$(date %Y-%m-%d %H:%M:%S)] $1 | tee -a $LOG_FILE } # 方法1使用 mysqldump适用于数据量较小的情况 log 开始 mysqldump 全量备份... mysqldump \ -h192.168.56.80 \ -uroot \ -pYourRootPassword \ --all-databases \ --events \ --routines \ --triggers \ --master-data2 \ --single-transaction \ --flush-logs \ $BACKUP_PATH.sql if [ $? -eq 0 ]; then log 全量备份完成: $BACKUP_PATH.sql # 记录 binlog 位置 head -50 $BACKUP_PATH.sql | grep CHANGE MASTER TO $BACKUP_PATH.pos # 压缩备份 gzip $BACKUP_PATH.sql log 备份已压缩 else log 备份失败 exit 1 fi # 删除7天前的旧备份 find $BACKUP_DIR -type f -name *.sql.gz -mtime 7 -delete find $BACKUP_DIR -type f -name *.pos -mtime 7 -delete log 清理7天前的旧备份完成将备份脚本添加到 crontab# 每天凌晨2点执行全量备份 0 2 * * * /data/scripts/full_backup.sh /dev/null 21当主库发生灾难性故障需要恢复时按以下步骤操作# 1. 找到最近的备份 cd /data/backup/mysql/full LATEST_BACKUP$(ls -1t *.sql.gz | head -1) LATEST_DATE$(echo $LATEST_BACKUP | cut -d. -f1) # 2. 查看备份时的 binlog 位置 cat $LATEST_DATE.pos # 3. 解压并恢复全量备份 gunzip -c $LATEST_BACKUP | mysql -hNewMaster -uroot -p # 4. 找到恢复点之后的 binlog cd /data/backup/mysql/binlog # 假设备份时位置是 mysql-bin.000123, 45678 # 5. 从备份点之后开始应用 binlog mysqlbinlog \ --start-position45678 \ mysql-bin.000123 mysql-bin.000124 mysql-bin.000125 \ | mysql -hNewMaster -uroot -p备份文件清理策略创建清理脚本 /data/scripts/cleanup_binlog.sh#!/bin/bash # 清理过期的 binlog 备份 BINLOG_DIR/data/backup/mysql/binlog RETENTION_DAYS30 # 删除30天前的 binlog 文件 find $BINLOG_DIR -name mysql-bin.* -type f -mtime $RETENTION_DAYS -delete # 记录清理日志 echo [$(date)] 清理 $RETENTION_DAYS 天前的 binlog 文件 /data/logs/binlog_backup/cleanup.log