3分钟快速实现mysql全量增量备份

需求说明:

mysql数据库ip地址为192.168.1.100,端口3306,root密码111111,
服务器cantos7中ip地址192.168.1.101
利用xtrabackup每周六进行全量备份,每天进行增量备份,保留2个礼拜的备份,并且保存到192.168.1.101的/data分区

为了在CentOS 7服务器上使用XtraBackup执行MySQL数据库的备份,您需要完成以下步骤:

步骤 1:在CentOS 7服务器(192.168.1.101)上安装Percona XtraBackup

  1. 首先,添加Percona软件包仓库:

    sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
    
  2. 安装Percona XtraBackup:

    sudo yum install percona-xtrabackup-24
    

步骤 2:创建备份脚本

  1. 创建一个脚本目录:

    sudo mkdir -p /opt/backup_scripts
    
  2. 创建全量备份脚本 /opt/backup_scripts/full_backup.sh,并粘贴以下内容:

    #!/bin/bash
    TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
    BACKUP_DIR="/data/backups/full/$TIMESTAMP"
    USER="root"
    PASSWORD="111111"
    HOST="192.168.1.100"
    PORT="3306"
    
    mkdir -p $BACKUP_DIR
    xtrabackup --backup --user=$USER --password=$PASSWORD --host=$HOST --port=$PORT --target-dir=$BACKUP_DIR
    
    xtrabackup --prepare --target-dir=$BACKUP_DIR
    
    find /data/backups/full -type d -ctime +14 -exec rm -rf {} \;
    
  3. 创建增量备份脚本 /opt/backup_scripts/incremental_backup.sh,并粘贴以下内容:

    #!/bin/bash
    TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
    FULL_DIR=$(ls -td /data/backups/full/*/ | head -1)
    INCR_DIR="/data/backups/incremental/$TIMESTAMP"
    USER="root"
    PASSWORD="111111"
    HOST="192.168.1.100"
    PORT="3306"
    
    mkdir -p $INCR_DIR
    xtrabackup --backup --incremental-basedir=$FULL_DIR --user=$USER --password=$PASSWORD --host=$HOST --port=$PORT --target-dir=$INCR_DIR
    
    xtrabackup --prepare --apply-log-only --target-dir=$FULL_DIR
    xtrabackup --prepare --apply-log-only --incremental-dir=$INCR_DIR --target-dir=$FULL_DIR
    
    find /data/backups/incremental -type d -ctime +14 -exec rm -rf {} \;
    
  4. 使这两个脚本可执行:

    sudo chmod +x /opt/backup_scripts/full_backup.sh
    sudo chmod +x /opt/backup_scripts/incremental_backup.sh
    

步骤 3:配置定时任务

  1. 打开cron表:

    crontab -e
    
  2. 添加以下条目以安排每周六进行全量备份,每天进行增量备份(您可以根据需要修改具体时间):

    #每周六凌晨1点进行全量备份
    0 1 * * 6 /opt/backup_scripts/full_backup.sh > /var/log/full_backup.log 2>&1
    #每天凌晨2点进行增量备份
    0 2 * * * /opt/backup_scripts/incremental_backup.sh > /var/log/incremental_backup.log 2>&1
    
  3. 保存并退出编辑器。
    这样一来,您的 CentOS 7 服务器上就配置好了 XtraBackup,并且已经安排了定期的全量和增量备份。请确保检查 /data/backups 目录中的备份文件,以确保备份任务正常运行。如果需要,您可以根据实际需求调整定时任务的时间。

步骤 4:定期清理日志
您可以创建一个日志轮换脚本,用于定期清理和压缩日志文件。以下是一个简单的日志轮换脚本 /opt/backup_scripts/rotate_logs.sh

#!/bin/bash

LOG_DIR="/var/log"
FULL_LOG_DIR="/var/log/full"
INCR_LOG_DIR="/var/log/incremental"
FULL_LOG="full_backup.log"
INCR_LOG="incremental_backup.log"
MAX_AGE=10

# Rotate full_backup.log
if [ -e "$LOG_DIR/$FULL_LOG" ]; then
    mv "$LOG_DIR/$FULL_LOG" "$FULL_LOG_DIR/$FULL_LOG.$(date +%Y%m%d)"
    gzip -9 "$FULL_LOG_DIR/$FULL_LOG.$(date +%Y%m%d)"
fi

# Rotate incremental_backup.log
if [ -e "$LOG_DIR/$INCR_LOG" ]; then
    mv "$LOG_DIR/$INCR_LOG" "$INCR_LOG_DIR/$INCR_LOG.$(date +%Y%m%d)"
    gzip -9 "$INCR_LOG_DIR/$INCR_LOG.$(date +%Y%m%d)"
fi

# Remove logs older than MAX_AGE days
find "$FULL_LOG_DIR" -type f -name "$FULL_LOG.*.gz" -mtime +$MAX_AGE -exec rm -f {} \;
find "$INCR_LOG_DIR" -type f -name "$INCR_LOG.*.gz" -mtime +$MAX_AGE -exec rm -f {} \;
  1. 设置脚本可执行权限:

    sudo chmod +x /opt/backup_scripts/rotate_logs.sh
    
  2. 添加定时任务,每天凌晨3点执行日志轮换:

    crontab -e
    

    添加以下条目:

    # 每天凌晨5点执行日志轮换
    0 5 * * * /opt/backup_scripts/rotate_logs.sh
    

这个脚本将每天早上5点运行,它将分别备份并压缩 full_backup.logincremental_backup.log 文件。同时,它还将删除超过 MAX_AGE(默认为10天)的日志文件。您可以根据需要调整这个值。

日志说明:

在这里插入图片描述
XtraBackup 在日志中显示已成功执行并备份数据库。在日志中,它显示了一系列的操作,包括 InnoDB 的恢复过程,创建和重写 redo log 文件以及其他一些初始化操作。最后,XtraBackup 完成了备份过程,并显示 “completed OK!”,表明备份已成功完成。

请注意,定期备份数据库是非常重要的,以确保数据的安全性和完整性。使用 XtraBackup 可以帮助您实现这一目标。记得要定期检查日志文件,以确保备份过程始终正常运行。

备份完以后可以用du -lh --max-depth=1查看备份文件大小

该如何恢复:

使用Percona XtraBackup恢复MySQL数据库时,需要遵循以下步骤:

步骤 1:停止MySQL服务
在恢复数据库之前,需要停止正在运行的MySQL服务。在CentOS 7服务器上执行以下命令:

sudo systemctl stop mysqld

步骤 2:恢复全量备份

  1. 首先,导航到最新全量备份的目录:

    cd /data/backups/full/<latest_full_backup_directory>
    

    请将<latest_full_backup_directory>替换为最新全量备份的目录名。

  2. 使用xtrabackup恢复全量备份:

    sudo xtrabackup --copy-back --target-dir=<latest_full_backup_directory> --datadir=/var/lib/mysql
    

    请将<latest_full_backup_directory>替换为最新全量备份的目录名。

步骤 3:恢复增量备份(如有)
如果有增量备份,需要按照创建顺序依次恢复它们:

  1. 导航到第一个增量备份的目录:

    cd /data/backups/incremental/<first_incremental_backup_directory>
    

    请将<first_incremental_backup_directory>替换为第一个增量备份的目录名。

  2. 使用xtrabackup恢复增量备份:

    sudo xtrabackup --copy-back --target-dir=<first_incremental_backup_directory> --datadir=/var/lib/mysql
    

    请将<first_incremental_backup_directory>替换为第一个增量备份的目录名。

  3. 对于其他增量备份,重复上述步骤。

步骤 4:设置正确的权限
为确保MySQL服务能够正常访问数据文件,请将数据目录的所有权更改为mysql:mysql

sudo chown -R mysql:mysql /var/lib/mysql

步骤 5:重新启动MySQL服务
最后,重新启动MySQL服务:

sudo systemctl start mysqld

现在,您已经使用Percona XtraBackup成功地恢复了MySQL数据库。请确保检查数据库中的数据,以验证恢复过程是否成功。

验证备份是否成功

要验证MySQL数据库的备份是否成功,可以采取以下措施:

  1. 检查日志文件:检查在/var/log/full_backup.log/var/log/incremental_backup.log中的日志文件。查看日志中是否有错误信息,确保备份过程已成功完成。通常,成功的备份会在日志末尾显示“completed OK!”。

  2. 查看备份文件:在/data/backups/full/data/backups/incremental 目录下检查备份文件。检查这些目录下是否有最近的备份,以及是否有期望的备份文件。

  3. 检查备份文件大小:使用du -sh /data/backups/fulldu -sh /data/backups/incremental命令查看全量和增量备份的总大小。确保备份大小与预期相符,并与原始数据库数据的大小相近。

  4. 恢复测试:在一个测试环境中尝试恢复备份。这将帮助您检查备份的完整性,并确保在需要时能够成功恢复数据库。

通过以上措施,可以有信心地确认MySQL数据库备份是否成功。定期进行这些检查以确保备份始终有效且可用。

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ascarl2010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值