MySQL 全量、增量备份与恢复(极简易懂版)

一、基础概念(必懂)

1. 备份分类

  • 全量备份:备份整个数据库,操作简单,但数据重复、占空间。
  • 增量备份:只备份上次备份后变化的数据,省空间、速度快,依赖二进制日志。
  • 物理备份:直接拷贝数据文件,适合大数据量。
  • 逻辑备份:导出 SQL 脚本,跨平台、易编辑。

2. 核心前提

MySQL 8.0 默认开启binlog(二进制日志),增量备份必须靠它!


二、前置操作:创建库 / 表 / 数据(基础必练)

1. 登录 MySQL

复制代码
mysql -u root -p

2. 创建数据库 + 表

sql

复制代码
-- 创建库
CREATE DATABASE client;

-- 切换库
USE client;

-- 创建表
CREATE TABLE user_info(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    phone VARCHAR(11)
);

3. 插入测试数据

sql

复制代码
INSERT INTO user_info(name,phone) VALUES('张三','13800138000');
INSERT INTO user_info(name,phone) VALUES('李四','13900139000');

4. 查看数据

sql

复制代码
SELECT * FROM user_info;

三、全量备份与恢复(最常用)

方式 1:物理冷备份(关库打包)

适合停机维护、非核心业务

bash

运行

复制代码
# 1. 关闭MySQL
systemctl stop mysqld

# 2. 创建备份目录
mkdir /backup

# 3. 打包数据目录(全量备份)
tar zcf /backup/mysql_all-$(date +%F).tar.gz /usr/local/mysql/data/

# 4. 恢复(模拟故障后)
tar zxf /backup/mysql_all-日期.tar.gz -C /
systemctl start mysqld

方式 2:mysqldump 逻辑备份(推荐)

备份命令

bash

运行

复制代码
# 备份单个库
mysqldump -u root -p client > /backup/client-$(date +%F).sql

# 备份所有库
mysqldump -u root -p --all-databases > /backup/all-$(date +%F).sql

恢复命令

bash

运行

复制代码
# 方式1:系统命令导入
mysql -u root -p client < /backup/client-日期.sql

# 方式2:MySQL内source恢复
mysql> source /backup/client-日期.sql

四、增量备份与恢复(高效省空间)

1. 开启 binlog(MySQL8.0 默认已开,可自定义)

bash

运行

复制代码
vim /etc/my.cnf

添加配置:

ini

复制代码
[mysqld]
log-bin=mysql-bin
binlog_format=MIXED
server-id=1

重启生效:

bash

运行

复制代码
systemctl restart mysqld

2. 增量备份步骤

  1. 先做全量备份
  2. 刷新 binlog,生成新日志

bash

运行

复制代码
mysqladmin -u root -p flush-logs
  1. 新增数据后,拷贝 binlog 文件完成增量备份

bash

运行

复制代码
cp /usr/local/mysql/data/mysql-bin.00000* /backup/

3. 增量恢复(3 种方式)

(1)普通全量恢复

bash

运行

复制代码
mysqlbinlog --no-defaults /backup/mysql-bin.000002 | mysql -u root -p
(2)按位置精准恢复(跳过误操作)

先查看 binlog 找到操作位置:

bash

运行

复制代码
mysqlbinlog --no-defaults /backup/mysql-bin.000002

恢复到指定位置:

bash

运行

复制代码
# 恢复到某个位置停止
mysqlbinlog --no-defaults --stop-position='663' /backup/mysql-bin.000002 | mysql -u root -p

# 从指定位置开始恢复
mysqlbinlog --no-defaults --start-position='663' /backup/mysql-bin.000002 | mysql -u root -p
(3)按时间点恢复

bash

运行

复制代码
# 恢复到某个时间点
mysqlbinlog --no-defaults --stop-datetime='2026-03-30 12:00:00' /backup/mysql-bin.000002 | mysql -u root -p

五、补充必备知识点

1. 库表切换常用命令

sql

复制代码
-- 查看所有库
SHOW DATABASES;

-- 切换库
USE 库名;

-- 查看库中表
SHOW TABLES;

-- 查看表结构
DESC 表名;

-- 删除库/表
DROP DATABASE 库名;
DROP TABLE 表名;

2. 备份策略(企业通用)

  • 中小公司:每天 1 次全量备份
  • 大公司:每周 1 次全量 + 每天增量备份
  • 备份时间:选凌晨业务低峰期
  • 必须做:备份后测试恢复

3. 关键工具说明

  • mysqldump:逻辑备份,简单通用,适合中小数据量
  • mysqlbinlog:解析 binlog,做增量恢复
  • XtraBackup:物理热备,适合 50G 以上大数据量,不锁表

4. 易错提醒

  • 增量恢复必须先恢复全量,再按顺序恢复增量
  • binlog 文件不要删除,定期备份到其他服务器
  • 恢复前先备份当前数据,防止二次损坏

六、极简流程总结

  1. 建库表→插数据
  2. 全量备份(mysqldump)
  3. 开启 binlog→刷新日志→增量备份
  4. 故障:先全量恢复→再增量恢复
  5. 按位置 / 时间精准跳过误操作

七、扩展知识点

1. GTID 增强恢复

GTID = 全局事务 ID,避免重复执行事务,主从复制 + 增量恢复更安全。

bash

运行

复制代码
# 开启GTID
vim /etc/my.cnf
[mysqld]
gtid_mode=ON
enforce_gtid_consistency=ON

2. XtraBackup 物理热备(大库首选)

  • 支持在线热备,不锁库、不影响业务。
  • 适合50G 以上大库,备份恢复远快于 mysqldump。

全流程命令速查

表格

操作 命令
冷备全量 tar zcf /backup/mysql_all.tar.gz /data/
mysqldump 全库 mysqldump -p --all-databases > all.sql
开启 binlog 配置 log-bin、server-id
增量备份 flush-logs + 复制 binlog
按位置恢复 --stop-position/--start-position
按时间恢复 --stop-datetime/--start-datetime
相关推荐
代龙涛17 小时前
WordPress single.php 文章模板开发详解
android
YF021119 小时前
Flutter 编译卡顿解决方案
android·flutter·ios
空中海20 小时前
第十二章:安卓实战架构与最佳实践
android·架构
angerdream21 小时前
Android手把手编写儿童手机远程监控App之四大组件详解2
android
kerli21 小时前
基于 kmp/cmp 的跨平台图片加载方案 - 适配 Android View/Compose/ios
android·前端·ios
半条-咸鱼1 天前
基于安卓的 WAV 音频采集方案_含工具
android·音视频
九皇叔叔1 天前
MySQL8.0 版本安装部署
android·adb
OneLIMS1 天前
OneLIMS 安卓 APK 一键打包说明文档
android
阿亮爱学代码1 天前
初识Android界面布局
android·xml·view·viewgroup