当前位置: 代码网 > it编程>数据库>Mysql > mysql如何定期全量备份脚本

mysql如何定期全量备份脚本

2026年08月20日 Mysql 我要评论
mysql定期全量备份脚本在工作过程中,因为问题排查的需要,可能需要将数据进行备份,创建全量备份脚本/data/scripts/full_backup.sh,内容如下:#!/bin/bash# mys

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-data=2 \
    --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 2>&1

当主库发生灾难性故障需要恢复时,按以下步骤操作:

# 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-position=45678 \
    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_days=30

# 删除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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com