MySQL 全量、增量备份与恢复

1. 全量备份

  • 定义 :一次性备份数据库所有数据(表结构 + 数据),生成完整备份文件。
  • 优点:备份文件完整,恢复操作简单、速度快。
  • 缺点:数据量大时备份耗时、占用存储空间大,频繁全量备份效率低。
  • 适用场景:定期基础备份(如每周 / 每月一次)、新环境初始化、数据量较小的数据库。

2. 增量备份

  • 定义 :仅备份上一次备份(全量 / 增量)之后新增 / 修改的数据,依赖上一次备份的基准点。
  • 优点:备份速度快、占用空间小,适合高频备份。
  • 缺点:恢复复杂,需先恢复全量备份,再按顺序恢复所有增量备份;单个增量文件损坏会导致后续恢复失败。
  • 适用场景:日常高频备份(如每天 / 每小时一次)、数据更新频繁的数据库。

3. 备份与恢复核心工具

  • mysqldump:MySQL 官方逻辑备份工具,轻量易用,适合中小数据量,支持全量备份。
  • binlog(二进制日志) :MySQL 自带日志,记录所有数据修改操作,用于增量备份 + 基于时间点恢复。
  • mysqlbinlog:解析 binlog 日志的工具,用于将增量日志还原为可执行 SQL。

全量备份

bash 复制代码
# 1. 备份所有数据库(系统库+业务库)
mysqldump -u用户名 -p密码 --all-databases > 备份文件路径/全量备份_$(date +%Y%m%d).sql

# 2. 备份指定单个数据库(推荐)
mysqldump -u用户名 -p密码 数据库名 > 备份文件路径/全量备份_数据库名_$(date +%Y%m%d).sql

# 3. 备份指定多个数据库
mysqldump -u用户名 -p密码 --databases 库1 库2 库3 > 全量备份_多库.sql

# 4. 带关键参数(生产环境推荐)
mysqldump -u用户名 -p密码 --single-transaction --flush-logs --master-data=2 数据库名 > 全量备份.sql
示例
bash 复制代码
# 备份test库,保存到/backup目录,文件名带日期
mysqldump -uroot -p123456 --single-transaction --flush-logs --master-data=2 test > /backup/full_test_20260330.sql
关键参数说明
  • --single-transaction:对 InnoDB 引擎做热备份,不锁表,不影响业务读写。
  • --flush-logs:备份前刷新 binlog 日志,新的增量操作写入新日志,方便区分备份节点。
  • --master-data=2:在备份文件中记录 binlog 位置,用于增量备份基准定位。

恢复

bash 复制代码
# 方式1:系统命令行直接恢复(无需登录MySQL)
mysql -u用户名 -p密码 目标数据库名 < 全量备份文件路径.sql

# 方式2:MySQL客户端内恢复(适合已登录场景)
mysql> use 目标数据库名;
mysql> source 全量备份文件绝对路径.sql;

示例

bash 复制代码
# 恢复test库数据
mysql -uroot -p123456 test < /backup/full_test_20260330.sql

增量备份与恢复

增量备份

MySQL 无直接增量备份命令,通过 binlog 日志实现增量备份:

  1. 全量备份时执行--flush-logs,生成新的 binlog 日志。
  2. 全量备份后,所有数据修改操作都会记录在新 binlog 文件中,这些文件就是增量备份。
  3. 定期将新增的 binlog 文件复制到备份目录,完成增量备份。

增量备份

bash 复制代码
mysql> SHOW BINARY LOGS;

复制旧 binlog 文件到备份目录

bash 复制代码
cp /var/lib/mysql/mysql-bin.000001 /backup/increment_20260330_01.bin

先恢复最近一次全量备份 → 再按顺序恢复全量备份后的所有增量 binlog 日志

解析 binlog 日志

bash 复制代码
# 查看binlog内容(确认需要恢复的操作)
mysqlbinlog /var/lib/mysql/mysql-bin.000001

# 查看指定时间范围的日志(精准恢复)
mysqlbinlog --start-datetime="2026-03-30 10:00:00" --stop-datetime="2026-03-30 12:00:00" /var/lib/mysql/mysql-bin.000001

增量恢复命令

bash 复制代码
# 1. 基础恢复(整个binlog文件)
mysqlbinlog /backup/increment_000001.bin | mysql -u用户名 -p密码 数据库名

# 2. 按时间点恢复(避免误操作,精准恢复)
mysqlbinlog --start-datetime="2026-03-30 09:00:00" --stop-datetime="2026-03-30 18:00:00" /backup/increment_000001.bin | mysql -uroot -p123456 test

# 3. 按位置恢复(比时间更精准,查看binlog获取position值)
mysqlbinlog --start-position=107 --stop-position=1024 /backup/increment_000001.bin | mysql -uroot -p123456 test
相关推荐
2601_957084842 小时前
2026年生产型服装供应链SCM系统丨水洗参数、产能与验收节点架构
数据库·scm·服装供应链系统·服装scm·服装供应链
IvorySQL7 小时前
PostgreSQL 日报|恢复期 COPY TO 未日志表修复(10 月 21 日)
数据库·postgresql·区块链
贝猫说python9 小时前
大模型比赛2.3智能体开发(工具调用智能问答助手)
数据库·oracle
许彰午10 小时前
28-ORA-01110数据文件读取错误
数据库·oracle
凯凯姜10 小时前
MySQL 联合索引设计与索引失效
数据库·mysql
猫咪很可爱11 小时前
Oracle TEMP 表空间不足(ORA-01652)问题分析与优化实践
数据库·oracle
九零HTTP12 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
Data-Miner12 小时前
需要做财务数据分析,有什么好用的工具?从准备到出报告的实操指南
大数据·数据库·数据分析
袋鼠云数栈13 小时前
让 SQL 解析不再重复造轮子:SqlParserX 正式开源
数据库·人工智能·sql·开源·数据治理
这个DBA有点耶13 小时前
期货 CTP 系统 Oracle RAC 迁移国产库实战:读写分离架构设计与性能对标
数据库·架构·dba