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

news2024/11/18 23:49:30

需求说明:

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="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" "$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" ]; then
    mv "$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.coloradmin.cn/o/492401.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

睡眠经济2.0时代来了,老巨头们有护城河吗?

在第23个世界睡眠日&#xff0c;中国睡眠研究会等机构发布了《中国睡眠研究报告2023》&#xff0c;近半数人每晚平均睡眠时长不足8小时&#xff0c;“失眠”已成为了当代人的生活常态。 越是睡不好&#xff0c;越要想办法。年轻人纷纷求助于好的寝具、好的助眠产品乃至保健品&…

【C语言进阶C++】 C++基础--让你丝滑的从C语言进阶到C++

目录 前言 正文 1. 面向过程、面向对象 面向过程思维 面向对象思维 面向过程语言优缺点 面向对象语言优缺点 C面向对象特点 2. 输入、输出 C中的输入输出 总结C和C输入输出 3. 命名空间 作用域 命名空间 4. 动态申请空间 C动态申请空间&#xff08;new、delete&…

Leetcode刷题之回文链表和交换链表中的结点

竭力履行你的义务&#xff0c;你应该就会知道&#xff0c;你到底有多大的价值。 --列夫.托尔斯泰 目录 &#x1fab4;一.回文链表 &#x1f33b;1.快慢指针 &#x1f341;2.把值存入数组中&#xff0c;然后使用双指针 &#x1f33c;二.交换链表中的结点 &#x1…

经典论文解读 — 端到端的VL预训练网络SOHO

来源&#xff1a;投稿 作者&#xff1a;摩卡 编辑&#xff1a;学姐 论文标题&#xff1a; Seeing Out of tHe bOx :End-to-End Pre-training for Visual-Language Representation Learning》 Motivation 本文针对目前大量Visual-Language(VL) tasks使用由Faster-RCNN提取出的…

余弦相似度公式推导及代码实现

余弦相似度公式推导 1. 为什么使用余弦值相似度&#xff1f;2. 公式推导2.1 三角函数余弦公式推导2.2 三角函数向量余弦公式推导 3. 余弦相似度代码实现 1. 为什么使用余弦值相似度&#xff1f; 空间维度上两个点之间相似定义 在空间维度上两个点之间是有夹角和方向&#xff0…

计算机操作系统实验:页面置换算法的实现

目录 前言实验目的实验内容实验过程最佳置换算法代码实现算法流程流程图设计思路运行结果 先进先出算法代码实现算法流程流程图设计思路运行结果 最近最久未使用算法代码实现算法流程流程图设计思路运行结果 总结 前言 本实验的目的是通过编程模拟不同的页面置换算法&#xff…

基于思科模拟器的路由与交换实训报告(单臂路由、三层交换机实现vlan通信、ospf、rip、dhcp、acl、nat技术总结)

本博客是路由与交换实训报告&#xff0c;基于思科模拟器分别做了单臂路由、三层交换机实现vlan间通信、ospf、rip、dhcp、nat的实验&#xff0c;最后的nat综合实验是本次实训的大拓扑&#xff0c;综合了上述的几个技术。 大家可以当作一些思科小实验的总结&#xff0c;供网络工…

数据库管理-第七十二期 复盘(20230505)

数据库管理 2023-05-05 第七十二期 复盘1 再测试2 对照分析&#xff1a; 3 如何解决总结 第七十二期 复盘 上一期的内容&#xff0c;我承认主要是在放假&#xff0c;分析过程还是水了一点&#xff0c;SR转回国内之后&#xff0c;处理效率还是提升了一大截。 1 再测试 在客户…

Linux - 第11节 - 网络基础(一)

1.计算机网络背景 1.1.网络发展 独立模式&#xff1a;计算机之间相互独立 在早期的时候&#xff0c;计算机之间是相互独立的&#xff0c;此时如果多个计算机要协同完成某种业务&#xff0c;那么就只能等一台计算机处理完后再将数据传递给下一台计算机&#xff0c;然后下一台计…

Python进阶——实现人脸识别

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 今天我们来实现一下人脸识别~ 先问大家一个问题 什么是百度Aip模块&#xff1f; 百度AI平台提供了很多的API接口供开发者快速的调用运用在项目中 本文写的是使用百度AI的在线接口SDK模块&#xff08;baidu-aip&#…

单链表——单链表的定义及基本操作(初始化、头插法尾插法建表、查找、插入、删除、判空等)

单链表的定义 由于顺序表存在以下缺陷&#xff0c;所以衍生出了链表&#xff0c;而链表种类有很多种&#xff0c;今天我们讲的是单链表。 顺序表存在的问题如下 1.中间/头部的插入删除&#xff0c;时间复杂度为O(N) 2. 增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释…

CPU 架构(x86/ARM)简介

CPU 架构通过指令集的方式一般可分为 复杂指令集&#xff08;CISC&#xff09; 和 精简指令集&#xff08;RISC&#xff09; 两类&#xff0c;CISC 主要是 x86 架构&#xff0c;RISC 主要是 ARM 架构&#xff0c;还有 MIPS、RISC-V、PowerPC 等架构。 本文重点介绍 x86 和 ARM…

idea中maven的几个操作按钮:clean、validate、compile...

idea中Maven生命周期指令 clean命令 清除由项目编译创建的target validate命令 验证项目是否正确&#xff0c;并且所有必要的信息均可用 compile命令 编译项目的源代码 test命令 使用合适的单元测试框架来测试编译的源代码。 这些测试不应要求将代码打包或部署 verify命令 …

智安网络|一文看懂内核平台和系统服务的联系

内核平台和系统服务是操作系统中两个非常重要的组成部分。内核平台是系统底层的核心&#xff0c;负责管理和控制计算机硬件和资源的访问。而系统服务则是在内核之上运行的程序集合&#xff0c;为操作系统提供各种功能和服务。 内核平台和系统服务的关联非常密切。系统服务必须…

Emqx的简单使用

Emqx 是一个mqtt 的服务器产品。之前activemq可以作为mqtt协议的服务器&#xff0c;但是功能相对来说比较单一。Emqx作为跟Mqtt协议相关的新一代产品&#xff0c;功能实际上更为强大。 它的功能也主要体现在可视化/认证/规则/httpApi 上面。 1.Emqx 的安装 这里采用了docker…

JMeter 计算上一个接口取值到本次接口进行四则运算赋值

项目场景&#xff1a; 公司项目需要接口关联计算进行赋值&#xff1a; 项目场景&#xff1a;A接口提取的返回值&#xff0c;在传到B接口使用时&#xff0c;需要先进行四则运算后&#xff0c;再赋值使用。 A接口提取的值 B接口需要使用计算后的值 问题描述 使用beanshell预…

必须掌握的ArrayList,LinkedList,HashMap,HashTable,Collection,Colections

人的自由并不在于可以做他想做的事&#xff0c;而在于可以不做他不想做的事。 ArrayList和linkedList的区别 Array数组是基于索引&#xff08;index&#xff09;的数据结构&#xff0c;它使用索引在数组中搜索和读取数据是很快的 Array获取数据的时间复杂度是o(1)&#xff…

南卡OE系列再添新成员,造型犀利有型,性能强劲动听!

科技的快速发展让消费者对智能互联、操作体验、设计审美、安全健康等需求越发高涨&#xff0c;蓝牙耳机也正在由功能性向舒适性方向发展。如何提高蓝牙耳机的舒适度、拥有更舒适的听歌体验&#xff0c;成为蓝牙耳机品牌和消费者共同努力的方向。 Nank南卡&#xff1a;更专业的骨…

【Linux】单机版QQ之管道中的命名管道

还记得上一篇的匿名管道吗&#xff1f; 文章目录 前言一、命名管道总结 前言 命名管道是什么呢&#xff1f; 管道应用的一个限制就是只能在具有共同祖先&#xff08;具有亲缘关系&#xff09;的进程间通信。 如果我们想在不相关的进程之间交换数据&#xff0c;可以使用FIFO文…

一百零七、MySQL数据库的数据备份与数据恢复

MySQL数据库的数据备份与恢复主要有3种方法&#xff0c;前两种都是MySQL dump命令&#xff0c;第三种则是用Navicat工具直接备份。相比而言&#xff0c;第三种方法更加简单&#xff01; 1 方法一&#xff08;MySQL dump命令&#xff09; 1.1 登录MySQL [roothurys22 ~]# mysq…