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

news/2024/11/23 5:55:18/

需求说明:

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_DIRxtrabackup --prepare --target-dir=$BACKUP_DIRfind /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_DIRxtrabackup --prepare --apply-log-only --target-dir=$FULL_DIR
    xtrabackup --prepare --apply-log-only --incremental-dir=$INCR_DIR --target-dir=$FULL_DIRfind /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/bashLOG_DIR="/var/log"
FULL_LOG="full_backup.log"
INCR_LOG="incremental_backup.log"
MAX_AGE=10# Rotate full_backup.log
if [ -e "$LOG_DIR/$FULL_LOG" ]; thenmv "$LOG_DIR/$FULL_LOG" "$LOG_DIR/$FULL_LOG.$(date +%Y%m%d)"gzip -9 "$LOG_DIR/$FULL_LOG.$(date +%Y%m%d)"
fi# Rotate incremental_backup.log
if [ -e "$LOG_DIR/$INCR_LOG" ]; thenmv "$LOG_DIR/$INCR_LOG" "$LOG_DIR/$INCR_LOG.$(date +%Y%m%d)"gzip -9 "$LOG_DIR/$INCR_LOG.$(date +%Y%m%d)"
fi# Remove logs older than MAX_AGE days
find "$LOG_DIR" -type f -name "$FULL_LOG.*.gz" -mtime +$MAX_AGE -exec rm -f {} \;
find "$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数据库备份是否成功。定期进行这些检查以确保备份始终有效且可用。


http://www.ppmy.cn/news/59592.html

相关文章

安卓联发科MT6737手机开发核心板 开发模块

MT6737核心板是一款基于联发科MT6737T平台高性能、可运行安卓操作系统的4G智能模块。它支持多种制式&#xff0c;包括LTE-FDD/LTE-TDD/WCDMA/TD-SCDMA/EVDO/CDMA/GSM等。此外&#xff0c;它还支持WiFi 802.11a/b/g/n和BT4.0LE近距离无线通信&#xff0c;并支持GPS/GLONASS/北斗…

系统运维(Docker篇)

前言 打怪升级之路&#xff0c;从未停息 ​ 在这个社会信息技术的发展速度越来越快&#xff0c;这种快速发展带来了激烈的竞争。在这个竞争性的环境中&#xff0c;只有不断学习和更新自己的技能&#xff0c;才能保持竞争力。其次随着云计算、容器化、自动化等技术的出现&…

【14.HTML-移动端适配】

移动端适配 1 布局视口和视觉视口1.1 设置移动端布局视口宽度 2 移动端适配方案2.1 rem单位动态html的font-size&#xff1b;2.2 vw单位2.3 rem和vw对比2.4 flex的弹性布局 1 布局视口和视觉视口 1.1 设置移动端布局视口宽度 避免布局视口宽度默认980px带了的缩放问题,并且禁止…

没结过婚的我,所了解的婚姻

没结过婚的我&#xff0c;所了解的婚姻 富人不敢结婚&#xff1f;不结婚的理由 VS 结婚的理由年轻人不想结婚&#xff1f;不结婚的理由 VS 结婚的理由女人被情伤害&#xff1f;男人眼里的男人 VS 女人眼里的男人最高级别的爱情&#xff1f;欲望时期的爱情 VS 家族共同体的爱情一…

python基础实战7-字符串的format方法

1 概念 str.format()方法通过字符串中的大括号{}来识别替换字段replacement field&#xff0c;从而完成字符串的格式化。替换字段由字段名field name和转换字段conversion field以及格式说明符 format specifier组成&#xff0c;即一般形式为 {字段名!转换字段:格式说明符}。字…

菜鸡shader:L1基于兰伯特原理的玉石、条纹、点阵材质

目录 玉石材质条纹材质点阵效果 这里就简单说下原理吧&#xff0c;使用unity很久之前的一个插件shaderforge&#xff0c;最近几年好像在unity资源商店已经不再维护了&#xff0c;但是有shader forge的官网&#xff1a;在这&#xff0c;碰到节点不会的时候可以查一下官方文档&am…

《用于准确连续非侵入性血压监测的心跳内生物标志物》阅读笔记

目录 0 基础知识 1 论文摘要 2 论文十问 3 实验结果 4 论文亮点与不足之处 5 与其他研究的比较 6 实际应用与影响 7 个人思考与启示 参考文献 0 基础知识 非侵入性是指在进行医学检查或治疗时&#xff0c;不需要切开皮肤或穿刺体内组织&#xff0c;而是通过外部手段进…

npm install 很慢该怎么办?

npm install 很慢可能有多种原因&#xff0c;以下是一些常见的解决方法&#xff1a; 更换镜像源&#xff1a;使用淘宝镜像源或其他国内镜像源可以加速下载速度&#xff0c;可以通过以下命令进行设置&#xff1a; npm config set registry https://registry.npm.taobao.org/ 使…