一、基础概念(必懂)
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. 增量备份步骤
- 先做全量备份
- 刷新 binlog,生成新日志
bash
运行
mysqladmin -u root -p flush-logs
- 新增数据后,拷贝 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 文件不要删除,定期备份到其他服务器
- 恢复前先备份当前数据,防止二次损坏
六、极简流程总结
- 建库表→插数据
- 全量备份(mysqldump)
- 开启 binlog→刷新日志→增量备份
- 故障:先全量恢复→再增量恢复
- 按位置 / 时间精准跳过误操作
七、扩展知识点
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 |