MySQL备份恢复全攻略

技能目标

  • 掌握数据库备份的核心分类与适用场景
  • 熟练完成 MySQL 物理全备、逻辑全备的操作与恢复
  • 精通基于二进制日志与 XtraBackup 的增量备份与恢复
  • 理解 GTID 机制在备份恢复中的应用,制定企业级备份策略

前言

随着企业数字化转型深入,数据已成为核心生产要素,数据库的可靠性直接决定业务连续性。一旦发生误操作、硬件故障或灾难,数据丢失将造成不可逆损失。因此,制定科学的备份策略、掌握高效的恢复手段,是数据库运维人员的核心能力。

本章从备份基础理论出发,逐步讲解物理备份、逻辑备份、增量备份的实现方式,结合二进制日志与 Percona XtraBackup 工具,通过全流程实操案例,帮助学习者构建完整的备份恢复知识体系,保障企业数据安全。


一、MySQL 备份基础认知

1.1 数据丢失的常见原因

  • 程序错误:代码 Bug 导致数据异常
  • 人为误操作DROP/DELETE等误执行
  • 运算错误:数据计算逻辑异常
  • 磁盘故障:硬件损坏导致数据文件丢失
  • 灾难事件:火灾、地震、盗窃等极端情况

1.2 备份类型核心分类

(1)按物理 / 逻辑角度划分
  • 物理备份 :直接备份数据库物理文件(数据文件、日志文件等),速度快,适合大数据量场景
    • 冷备:数据库关闭状态下备份
    • 热备:数据库运行状态下备份(依赖二进制日志)
    • 温备:数据库锁表状态下备份
  • 逻辑备份:备份数据库结构与数据的 SQL 语句,文件小,便于跨平台迁移
(2)按备份策略角度划分
  • 全量备份:备份所有数据,是备份的基础,但占用空间大、时间长
  • 差异备份:仅备份上次全备后变化的数据
  • 增量备份:仅备份上次全备 / 增量备后变化的数据,空间占用小、速度快

1.3 常见备份工具

  • 物理备份工具Percona XtraBackup(热备首选,支持 InnoDB)
  • 逻辑备份工具mysqldump(通用易用,适合中小数据量)
  • 日志备份工具 :MySQL 二进制日志(binlog,实现增量备份)
  • 第三方工具mydumper/myloader(并行备份,提升大库备份效率)

二、MySQL 全量备份与恢复

2.1 物理全备与恢复(冷备)

(1)备份操作

bash

运行

复制代码
# 1. 关闭数据库
[root@localhost ~]# systemctl stop mysqld
# 2. 创建备份目录
[root@localhost ~]# mkdir -p /backup/mysql
# 3. 打包数据文件
[root@localhost ~]# tar zcf /backup/mysql/mysql_all_$(date +%F).tar.gz /usr/local/mysql/data/
(2)恢复操作

bash

运行

复制代码
# 1. 关闭数据库
[root@localhost ~]# systemctl stop mysqld
# 2. 清理原数据目录
[root@localhost ~]# rm -rf /usr/local/mysql/data/*
# 3. 解压备份包
[root@localhost ~]# tar zxf /backup/mysql/mysql_all_2025-03-24.tar.gz -C /
# 4. 启动数据库
[root@localhost ~]# systemctl start mysqld

2.2 逻辑全备与恢复(mysqldump)

(1)备份操作

bash

运行

复制代码
# 备份指定库
[root@localhost ~]# mysqldump -uroot -p --databases test > /backup/mysql/test_$(date +%F).sql
# 备份所有库
[root@localhost ~]# mysqldump -uroot -p --all-databases > /backup/mysql/all_$(date +%F).sql
(2)恢复操作

bash

运行

复制代码
# 方式1:mysql命令导入
[root@localhost ~]# mysql -uroot -p < /backup/mysql/test_2025-03-24.sql
# 方式2:source命令导入(登录MySQL后执行)
mysql> source /backup/mysql/test_2025-03-24.sql;

三、MySQL 增量备份与恢复

3.1 二进制日志(binlog)基础

二进制日志记录了所有数据变更操作,是实现增量备份的核心。

(1)开启 binlog

bash

运行

复制代码
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
log-bin=/usr/local/mysql/data/mysql-bin  # 开启binlog
binlog_format=MIXED                     # 混合模式记录日志
server-id=1                             # 唯一服务ID

重启 MySQL 生效:

bash

运行

复制代码
[root@localhost ~]# systemctl restart mysqld
(2)查看 binlog

bash

运行

复制代码
# 查看binlog文件列表
[root@localhost ~]# ls /usr/local/mysql/data/mysql-bin.*
# 查看binlog内容
[root@localhost ~]# mysqlbinlog /usr/local/mysql/data/mysql-bin.000001

3.2 基于 binlog 的增量恢复

(1)三种恢复方式
  1. 全量恢复 :恢复所有 binlog 操作

    bash

    运行

    复制代码
    [root@localhost ~]# mysqlbinlog /usr/local/mysql/data/mysql-bin.000001 | mysql -uroot -p
  2. 基于位置恢复 :精确恢复到指定操作位置

    bash

    运行

    复制代码
    # 恢复到指定位置
    [root@localhost ~]# mysqlbinlog --stop-position=663 /usr/local/mysql/data/mysql-bin.000001 | mysql -uroot -p
    # 从指定位置开始恢复
    [root@localhost ~]# mysqlbinlog --start-position=663 /usr/local/mysql/data/mysql-bin.000001 | mysql -uroot -p
  3. 基于时间恢复 :按时间点恢复数据

    bash

    运行

    复制代码
    [root@localhost ~]# mysqlbinlog --start-datetime="2025-03-24 19:29:28" --stop-datetime="2025-03-24 19:30:00" /usr/local/mysql/data/mysql-bin.000001 | mysql -uroot -p
(2)完整恢复流程
  1. 先恢复最近一次全量备份
  2. 再按时间 / 位置顺序恢复后续 binlog 增量数据
  3. 验证数据完整性

3.3 基于 Percona XtraBackup 的热备增量备份

(1)安装 XtraBackup 与 qpress

bash

运行

复制代码
# 安装XtraBackup
[root@localhost ~]# wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/tarball/percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17.tar.gz
[root@localhost ~]# tar zxf percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17.tar.gz -C /usr/local/
[root@localhost ~]# ln -s /usr/local/percona-xtrabackup-8.0.35-30-Linux-x86_64/bin/xtrabackup /usr/local/bin/

# 安装qpress(压缩工具)
[root@localhost ~]# wget https://www.quicklz.com/qpress-11-linux-x64.tar
[root@localhost ~]# tar xf qpress-11-linux-x64.tar -C /usr/local/bin/
(2)全量备份

bash

运行

复制代码
[root@localhost ~]# mkdir -p /backup/full
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser --password=s3cret --backup --compress --target-dir=/backup/full/$(date +%F)
(3)增量备份

bash

运行

复制代码
[root@localhost ~]# mkdir -p /backup/incr
[root@localhost ~]# xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser --password=s3cret --backup --compress --target-dir=/backup/incr/$(date +%F) --incremental-basedir=/backup/full/2025-03-24
(4)恢复流程

bash

运行

复制代码
# 1. 解压备份
[root@localhost ~]# xtrabackup --decompress --target-dir=/backup/full/2025-03-24
[root@localhost ~]# xtrabackup --decompress --target-dir=/backup/incr/2025-03-24
# 2. 准备备份(合并增量)
[root@localhost ~]# xtrabackup --prepare --apply-log-only --target-dir=/backup/full/2025-03-24
[root@localhost ~]# xtrabackup --prepare --apply-log-only --target-dir=/backup/full/2025-03-24 --incremental-dir=/backup/incr/2025-03-24
# 3. 恢复数据
[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# rm -rf /usr/local/mysql/data/*
[root@localhost ~]# xtrabackup --copy-back --target-dir=/backup/full/2025-03-24
[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql/data
[root@localhost ~]# systemctl start mysqld

四、进阶:GTID 在备份恢复中的应用

4.1 GTID 基础概念

GTID(全局事务 ID)是 MySQL 5.6 + 引入的事务唯一标识,确保在主从复制与备份恢复中,事务可被唯一识别,避免重复执行。

(1)开启 GTID

bash

运行

复制代码
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
gtid_mode=ON
enforce_gtid_consistency=ON

重启 MySQL 生效。

4.2 基于 GTID 的备份与恢复

(1)GTID 备份

bash

运行

复制代码
[root@localhost ~]# mysqldump -uroot -p --databases test --set-gtid-purged=OFF > /backup/mysql/test_gtid_$(date +%F).sql
(2)GTID 增量恢复

bash

运行

复制代码
# 导出指定GTID区间的binlog
[root@localhost ~]# mysqlbinlog --include-gtids='d780a5a6-055f-11f0-b6e6-c000c2907804:3-7' /usr/local/mysql/data/mysql-bin.000001 > /backup/mysql/gtid_incr.sql
# 导入恢复
[root@localhost ~]# mysql -uroot -p < /backup/mysql/gtid_incr.sql

五、企业级备份策略制定

5.1 策略制定原则

  • 中小公司:每周一次全备,每日一次增量备
  • 大公司:每周一次全备,每日多次增量备,结合主从复制提升可用性
  • 核心原则:全备是基础,增量备平衡存储与恢复效率,定期验证备份可恢复性

5.2 备份与恢复最佳实践

  1. 备份文件需异地存储,避免单点故障
  2. 定期执行恢复演练,确保备份可用
  3. 核心业务库建议开启主从复制,实现读写分离与快速故障切换
  4. 结合监控工具,对备份任务与存储空间进行告警

总结

本章系统覆盖了 MySQL 备份恢复的全栈知识:

  1. 基础认知:理解备份分类、工具选型与核心原则
  2. 全量备份:掌握物理冷备与逻辑全备的操作与恢复
  3. 增量备份:精通基于 binlog 与 XtraBackup 的增量备份,实现高效数据保护
  4. 进阶应用:理解 GTID 机制,提升备份恢复的准确性与自动化水平
  5. 企业实践:制定符合业务场景的备份策略,保障数据安全与业务连续性

通过本章学习,可构建完整的 MySQL 备份恢复体系,成为企业数据安全的可靠守护者。

相关推荐
一个天蝎座 白勺 程序猿2 小时前
源网荷储实时互动需求下,时序数据库如何赋能新型电力系统?
数据库·时序数据库
笑梦无境2 小时前
mysql基础篇二(多年前整理)
数据库·mysql
cqsztech2 小时前
基于ORACLE LINUX 10.1 MYSQL 8.4 源码安装
linux·mysql·oracle
艾伦_耶格宇2 小时前
【zabbix】-2 zabbix本地部署
数据库·zabbix
麻花20132 小时前
Oracle 数据泵导出与还原操作指南
数据库·oracle
邂逅you2 小时前
SQL温故与知新
数据库·sql
zhangren024682 小时前
Laravel7.x新特性全面解析
数据库·mysql·adb·php
鸽芷咕2 小时前
Oracle替换工程实践深度解析:金仓数据库破解PL/SQL“零改造”迁移难题
数据库·sql·oracle
猿小喵2 小时前
MySQL数据库参数解读-第一篇
数据库·mysql·性能优化