一、数据备份的重要性
1. 备份的核心作用:灾难恢复
备份不是"多此一举",而是应对突发情况的"救命稻草"。当数据因为各种原因丢失时,备份文件能让你把数据库恢复到之前的状态,避免业务中断。
2. 这些情况会导致数据丢失(一定要警惕)
- 人为操作错误:误删表、误修改数据、执行了错误的SQL语句(比如不小心删了整个数据库);
- 程序错误:代码bug导致数据写入异常、系统崩溃;
- 硬件故障:服务器硬盘损坏、内存故障、电源中断;
- 灾难与安全问题:火灾、地震等自然灾害,或者黑客攻击、勒索病毒加密数据。
3. 数据丢失的后果有多严重?
- 电商平台:丢失订单数据,无法核对交易,客户投诉不断;
- 企业办公:客户资料丢失,业务无法推进;
- 金融机构:交易记录缺失,可能面临监管处罚和客户索赔。
所以,备份不是"可选操作",而是"必须操作"------哪怕是小公司,也不能忽视。
二、数据库备份类型
MySQL备份主要分两大类:物理备份 和逻辑备份。简单说,物理备份是"复制数据库的物理文件",逻辑备份是"导出数据库的SQL语句",两者各有适用场景。
2.1 物理备份:直接备份数据库文件
物理备份针对的是MySQL的物理文件(比如数据文件、日志文件),就像"复制电脑里的文件夹"一样,备份和恢复速度都比较快,适合大型数据库。它又分为3种:
2.1.1 冷备份(脱机备份)
- 通俗理解:先关掉MySQL服务,再复制数据库文件,相当于"关了商店门,再盘点货架上的商品"。
- 操作工具 :Linux系统的
tar命令(打包文件)。 - 优点:简单粗暴,不用额外工具,备份文件完整,恢复也快;
- 缺点:必须关闭数据库,会影响业务(比如电商平台不能半夜关服务就不适合);
- 适用场景:可接受停机维护的系统(比如内部办公系统、小型网站,适合在半夜10点到凌晨5点之间操作)。
2.1.2 热备份(联机备份)
- 通俗理解:MySQL正常运行、业务正常开展的情况下备份,相当于"商店正常营业,店员悄悄盘点商品"。
- 操作工具:第三方工具(如Percona XtraBackup、mysqlbackup)。
- 优点:不影响业务,能实现24小时不间断服务(比如电商、金融平台必备);
- 缺点:配置复杂,需要额外工具,会消耗服务器资源(比如占用CPU、内存);
- 适用场景:不能停机的高可用系统(如淘宝、银行APP的数据库)。
2.1.3 温备份
- 通俗理解:备份时数据库不关闭,但禁止写入数据(只能读),相当于"商店正常开门,顾客能看商品但不能买,店员盘点"。
- 操作工具 :MySQL自带的
mysqldump命令。 - 优点:不用关服务,对业务影响小(只是短暂不能写入);
- 缺点:备份期间不能新增/修改数据,适合业务低峰期操作;
- 适用场景:可容忍短暂"只读"的业务(比如论坛、资讯网站,备份时用户不能发帖但能看内容)。
2.2 逻辑备份:导出SQL语句
逻辑备份不碰物理文件,而是把数据库的表结构、数据转换成SQL语句,备份成.sql文件,就像"把书本内容抄下来,后续可以重新抄回书本"。它主要分3种策略:
2.2.1 完全备份
- 通俗理解:每次都备份整个数据库的所有表结构和数据,相当于"把整个衣柜的衣服都打包,不管之前有没有备份过"。
- 操作方式 :用
mysqldump导出所有库/表,或用tar打包物理文件; - 优点:恢复最简单,直接用备份文件就能还原,不用依赖其他文件;
- 缺点:备份文件大(重复数据多),占用磁盘空间,备份时间长(比如100G的数据库,备份可能要几小时);
- 适用场景:数据量小的数据库(比如几G的小型网站),或作为基础备份(后续增量/差异备份都基于它)。
2.2.2 差异备份
- 通俗理解:只备份"上次完全备份之后"修改或新增的数据,相当于"上次打包了整个衣柜,这次只打包新增的、或换下来的衣服"。
- 优点:备份文件比完全备份小,备份速度快;
- 缺点:恢复时需要先恢复上次的完全备份,再恢复最新的差异备份(两步走);
- 适用场景:数据量中等的业务(比如10-50G的数据库),不想频繁做完全备份的情况。
2.2.3 增量备份
- 通俗理解:只备份"上次备份(不管是完全还是增量)之后"修改或新增的数据,相当于"上次打包了新增衣服,这次只打包这期间又新增的衣服"。
- 优点:备份文件最小,占用空间少,备份速度最快(比如每天增量备份只要几分钟);
- 缺点:恢复最复杂,需要按顺序恢复"完全备份 + 所有增量备份"(比如完全备份是周一,周二到周五是增量,恢复时要先还原周一的,再依次还原周二到周五的);如果中间某个增量备份文件损坏,后续数据就没法恢复;
- 适用场景:数据量大、更新频繁的数据库(比如100G以上的电商数据库)。
2.3 备份策略对比表
| 备份方式 | 空间占用 | 恢复速度 | 恢复复杂度 | 适用场景 |
|---|---|---|---|---|
| 完全备份 | 高(重复数据多) | 快(一步还原) | 低(直接用备份文件) | 小型数据库、基础备份 |
| 差异备份 | 中(只存上次完全备份后的数据) | 中(两步还原:完全+差异) | 中(需要两个文件) | 中型业务系统 |
| 增量备份 | 低(只存上次备份后的数据) | 慢(多步还原:完全+所有增量) | 高(依赖完整备份链) | 大型高频更新系统 |
推荐备份策略(新手直接用)
- 完全备份:每周1次,选业务低峰期(比如周日凌晨2点);
- 增量备份:每天1次(比如凌晨3点);
- 额外空间:用NFS(网络文件存储)给MySQL服务器分配专门的备份空间,避免备份文件占满业务磁盘。
三、常见备份方法
3.1 物理冷备:用tar命令打包文件
这是最直接的物理备份方法,适合小型数据库,步骤简单:
-
关闭MySQL服务 :确保备份时没有数据写入,命令:
bashsystemctl stop mysqld # Linux系统命令,Windows用net stop mysql -
打包数据库文件 :MySQL的数据文件默认存在
/usr/local/mysql/data/(Linux),用tar打包压缩:bashtar zcvPf /opt/mysql_all_$(date +%F).tar.gz /usr/local/mysql/data/- 解释参数:
z(压缩)、c(创建打包文件)、v(显示备份过程)、P(保留文件绝对路径)、f(指定备份文件名); - 备份文件名带日期(比如
mysql_all_2025-09-16.tar.gz),方便后续区分。
- 解释参数:
-
启动MySQL服务 :备份完成后,重新开启服务:
bashsystemctl start mysqld -
恢复方式 :如果数据丢失,关闭服务后,解压备份文件覆盖原数据目录即可:
bashtar zxvPf /opt/mysql_all_2025-09-16.tar.gz -C /usr/local/mysql/x(解压)、C(指定解压到的目录)。
3.2 专用备份工具:mysqldump或mysqlhotcopy
这两个是MySQL自带的备份工具,主打逻辑备份,新手优先学mysqldump(支持所有存储引擎,比如InnoDB)。
3.2.1 mysqldump(温备份,推荐)
- 支持备份单个库、多个库、所有库,还能只备份表结构;
- 备份后生成SQL文件,跨平台通用(比如Windows备份的文件能在Linux上恢复)。
3.2.2 mysqlhotcopy(仅支持特定存储引擎)
- 只能备份MyISAM和ARCHIVE引擎的表(现在InnoDB是主流引擎,用得少);
- 备份速度比mysqldump快,但适用范围窄,新手可以暂时不用学。
3.3 二进制日志增量备份
增量备份的核心依赖MySQL的"二进制日志"(binlog),这个日志会记录所有修改数据的SQL语句(比如插入、修改、删除),相当于数据库的"操作日记"。
关键前提:开启二进制日志
-
编辑MySQL配置文件(Linux:
/etc/my.cnf,Windows:my.ini):ini[mysqld] log-bin=mysql-bin # 开启二进制日志,日志文件名为mysql-bin.000001、mysql-bin.000002... binlog_format = MIXED # 日志格式(推荐混合模式) server-id = 1 # 数据库服务器ID(主从复制时必填,单服务器可加可不加) -
重启MySQL服务,让配置生效:
bashsystemctl restart mysqld -
验证是否开启成功:登录MySQL,执行命令:
sqlSHOW VARIABLES LIKE 'log_bin';- 如果结果中
Value是ON,说明开启成功。
- 如果结果中
二进制日志的3种格式(新手记MIXED就行)
| 格式 | 通俗理解 | 优点 | 缺点 |
|---|---|---|---|
| STATEMENT(基于SQL语句) | 记录执行的SQL语句(比如"删除id=1的数据") | 日志文件小,备份快 | 高并发时可能数据不一致(比如函数执行结果不同) |
| ROW(基于行) | 记录数据行的变化(比如"把id=1的名字从A改成B") | 数据一致性高,恢复准确 | 日志文件大(全表更新时日志会暴涨) |
| MIXED(混合模式) | 普通SQL用STATEMENT,函数/复杂操作用ROW | 兼顾速度和准确性 | 无明显缺点,推荐使用 |
3.4 第三方工具:专业热备份方案
如果需要热备份(不影响业务),可以用第三方工具,新手推荐Percona XtraBackup(免费开源):
- 支持InnoDB引擎,备份时不锁表、不影响业务;
- 能实现完全备份和增量备份,恢复速度快;
- 适合中大型数据库(比如50G以上)。
四、MySQL完全备份
完全备份是所有备份策略的基础,不管后续做差异还是增量备份,都要先做一次完全备份。
4.1 核心特点
- 备份内容:整个数据库的表结构、数据、文件结构;
- 备份结果:保存备份完成时刻的数据库状态;
- 核心作用:是差异备份、增量备份的"基础包",恢复时必须先还原完全备份。
4.2 优缺点分析
| 优点 | 缺点 |
|---|---|
| 恢复简单:直接用备份文件还原,不用依赖其他文件 | 空间占用大:重复数据多,比如10G数据库,每次备份都占10G |
| 数据完整:备份文件包含所有数据,无依赖 | 备份时间长:数据量大时,备份可能要几小时 |
| 操作简单:不用复杂配置,新手也能搞定 | 恢复时间长:大文件解压、导入耗时久 |
五、数据库完全备份分类
完全备份主要分两种:物理冷备(tar打包)和mysqldump备份(SQL文件),下面详细说操作步骤。
5.1 物理冷备份与恢复(适合小型数据库)
备份步骤(Linux系统)
-
登录服务器,切换到root用户(避免权限不足);
-
关闭MySQL服务:
bashsystemctl stop mysqld -
查看数据目录路径(确认文件位置):
bashls /usr/local/mysql/data/ # 正常会看到数据库名对应的文件夹 -
打包备份数据目录:
bashtar zcvPf /opt/mysql_all_$(date +%F).tar.gz /usr/local/mysql/data/- 备份文件存在
/opt/目录下,文件名带日期(比如mysql_all_2025-09-16.tar.gz);
- 备份文件存在
-
启动MySQL服务:
bashsystemctl start mysqld -
验证备份:查看
/opt/目录下是否有备份文件,命令:bashls /opt/ | grep mysql_all_
恢复步骤(数据丢失后)
-
关闭MySQL服务:
bashsystemctl stop mysqld -
备份当前数据目录(防止误操作覆盖,可选但推荐):
bashmv /usr/local/mysql/data/ /opt/data_bak/ -
解压备份文件到原数据目录:
bashtar zxvPf /opt/mysql_all_2025-09-16.tar.gz -C /usr/local/mysql/- 注意:
-C后面的路径是/usr/local/mysql/,不是/usr/local/mysql/data/(因为备份时包含了data目录);
- 注意:
-
授权数据目录(避免MySQL权限不足):
bashchown -R mysql:mysql /usr/local/mysql/data/ -
启动MySQL服务:
bashsystemctl start mysqld -
验证恢复:登录MySQL,查看数据库是否存在:
sqlSHOW DATABASES; # 能看到备份时的数据库,说明恢复成功
5.2 mysqldump备份与恢复(温备份,推荐新手)
mysqldump是MySQL自带的工具,不用额外安装,支持备份单个库、多个库、所有库,还能只备份表结构,非常灵活。
核心语法
bash
mysqldump -u 用户名 -p[密码] [参数] 库名/表名 > 备份文件路径.sql
- 注意:
-p和密码之间可以不加空格(比如-p123456),也可以加空格后手动输入密码(更安全); - 备份文件后缀用
.sql,方便识别。
常见备份场景(实战案例)
场景1:备份单个数据库(含所有表)
比如备份名为szsxjd的数据库:
bash
mysqldump -u root -p --databases szsxjd > /opt/szsxjd_2025-09-16.sql
- 参数
--databases:表示备份整个数据库(包含创建数据库的SQL语句); - 执行后会提示输入密码,输入正确后开始备份;
- 备份文件:
/opt/szsxjd_2025-09-16.sql。
场景2:备份多个数据库
比如同时备份mysql(系统库)和szsxjd(业务库):
bash
mysqldump -u root -p --databases mysql szsxjd > /opt/mysql_szsxjd_2025-09-16.sql
场景3:备份数据库中的部分表
比如备份szsxjd库中的info1和info2表:
bash
mysqldump -u root -p szsxjd info1 info2 > /opt/szsxjd_info1_info2.sql
- 注意:这里没加
--databases,备份文件中没有"创建数据库"的语句,恢复时要先手动创建数据库。
场景4:只备份表结构(不备份数据)
比如备份szsxjd库中info1表的结构(用于搭建测试环境):
bash
mysqldump -u root -p -d szsxjd info1 > /opt/szsxjd_info1_struct.sql
- 参数
-d:仅备份表结构,不包含数据。
场景5:备份所有数据库(整个MySQL服务器)
bash
mysqldump -u root -p --all-databases > /opt/mysql_all_2025-09-16.sql
- 适合备份小型服务器(数据库数量少)。
查看备份文件(验证是否备份成功)
备份后的SQL文件是文本格式,可以用命令查看内容(过滤注释和空行,更清晰):
bash
grep -v "^--" /opt/szsxjd_info1_info2.sql | grep -v "^/" | grep -v "^$"
- 能看到
CREATE TABLE(表结构)和INSERT INTO(数据)语句,说明备份成功。
mysqldump恢复步骤
恢复的核心是"把SQL文件中的语句重新执行一遍",有两种方法,新手推荐第一种。
方法1:用mysql命令恢复(命令行执行)
情况1:备份时加了--databases(含创建数据库语句)
比如恢复szsxjd库:
-
直接执行以下命令(不用手动创建数据库):
bashmysql -u root -p < /opt/szsxjd_2025-09-16.sql -
输入密码后,等待执行完成;
-
验证:登录MySQL,查看数据库和表:
sqlSHOW DATABASES; # 有szsxjd库 USE szsxjd; SHOW TABLES; # 有备份的表 SELECT * FROM info1; # 能看到数据,恢复成功
情况2:备份时没加--databases(不含创建数据库语句)
比如恢复szsxjd库中的info1和info2表:
-
先登录MySQL,手动创建数据库(如果已删除):
sqlCREATE DATABASE IF NOT EXISTS szsxjd; exit; # 退出MySQL -
执行恢复命令(指定数据库):
bashmysql -u root -p szsxjd < /opt/szsxjd_info1_info2.sql -
验证:登录MySQL查看表和数据即可。
方法2:用source命令恢复(MySQL内部执行)
-
登录MySQL:
bashmysql -u root -p -
执行source命令,指定备份文件路径:
sqlsource /opt/szsxjd_2025-09-16.sql; -
等待执行完成,验证数据即可;
- 优点:执行过程中会显示进度(比如"Query OK, 1 row affected"),方便排查问题。
关键注意事项
- 恢复前一定要备份当前数据:比如先执行
mysqldump -u root -p szsxjd > /opt/szsxjd_bak.sql,避免恢复错误覆盖现有数据; - 恢复时确保目标数据库不存在,或数据已备份:如果数据库已存在,恢复会覆盖原有表(不会删除未备份的表);
- 执行大文件恢复时,不要中断命令:比如10G的SQL文件,恢复可能要几小时,中断后需要重新执行。
六、实战案例
下面用一个完整的例子,带你体验"环境准备→完全备份→增量备份→恢复"的全流程,跟着做就能上手。
6.1 环境准备(先搭建测试环境)
-
登录MySQL,创建测试数据库和表:
sql-- 创建数据库szsxjd CREATE DATABASE szsxjd; -- 使用该数据库 USE szsxjd; -- 创建表info1 CREATE TABLE IF NOT EXISTS info1 ( id INT(4) NOT NULL AUTO_INCREMENT, -- 自增ID name VARCHAR(10) NOT NULL, -- 姓名 age CHAR(10) NOT NULL, -- 年龄 hobby VARCHAR(50), -- 爱好 PRIMARY KEY (id) -- 主键ID ); -- 插入测试数据 INSERT INTO info1 VALUES(1,'user1',20,'running'); INSERT INTO info1 VALUES(2,'user2',30,'singing'); -- 再创建一个表info2 CREATE TABLE info2 (id INT, name CHAR(10), age INT, sex CHAR(4)); INSERT INTO info2 VALUES(1,'user',11,'男'); INSERT INTO info2 VALUES(2,'user',11,'女'); -
验证环境:
sqlSELECT * FROM info1; SELECT * FROM info2;- 能看到插入的数据,说明环境搭建成功。
6.2 完全备份与恢复
6.2.1 物理冷备恢复(实战)
-
关闭MySQL服务:
bashsystemctl stop mysqld -
打包备份数据目录:
bashtar zcvPf /opt/mysql_all_2025-09-16.tar.gz /usr/local/mysql/data/ -
模拟数据丢失:删除数据目录(危险操作,仅测试用):
bashmv /usr/local/mysql/data/ /opt/data_old/ -
恢复备份:
bashtar zxvPf /opt/mysql_all_2025-09-16.tar.gz -C /usr/local/mysql/ -
授权并启动服务:
bashchown -R mysql:mysql /usr/local/mysql/data/ systemctl start mysqld -
验证恢复:登录MySQL,查看
szsxjd库的表和数据,确认和之前一致。
6.2.2 mysqldump备份与恢复(温备份实战)
-
备份
szsxjd库(含所有表):bashmysqldump -u root -p --databases szsxjd > /opt/szsxjd_2025-09-16.sql -
模拟数据丢失:删除
szsxjd库:sqlDROP DATABASE szsxjd; -
恢复备份:
bashmysql -u root -p < /opt/szsxjd_2025-09-16.sql -
验证恢复:登录MySQL,查看
szsxjd库是否存在,表和数据是否完整。
6.2.3 MySQL完全恢复(补充:免交互备份)
生产环境中,可能需要定时自动备份(不用手动输入密码),可以这样配置:
-
创建备份脚本
backup.sh:bash#!/bin/bash # 备份文件名:库名_日期.sql BACKUP_FILE="/opt/szsxjd_$(date +%Y%m%d).sql" # 执行备份(密码直接写在命令中,注意权限,避免别人看到) /usr/local/mysql/bin/mysqldump -u root -p123456 --databases szsxjd > $BACKUP_FILE # 刷新二进制日志(为增量备份做准备) /usr/local/mysql/bin/mysqladmin -u root -p123456 flush-logs -
给脚本授权:
bashchmod +x backup.sh -
定时执行(用crontab):每周六凌晨1点执行:
bashcrontab -e输入以下内容(保存退出):
0 1 * * 6 /root/backup.sh- 解释:
0 1 * * 6表示"每周六凌晨1点0分执行"。
- 解释:
6.3 MySQL增量备份与恢复
增量备份基于完全备份和二进制日志,下面一步步做:
6.3.1 MySQL数据库增量恢复类型
- 一般恢复:恢复所有二进制日志中的操作(比如恢复到最新状态);
- 基于位置恢复:跳过错误操作(比如误删数据的SQL语句,找到它的位置,恢复时跳过);
- 基于时间点恢复:跳过某个时间段的操作(比如某分钟内执行了错误操作,恢复时跳过该时间段)。
6.3.2 MySQL增量备份(步骤)
6.3.2.1 开启二进制日志(已在前面讲过,这里验证)
-
确认配置:
bashcat /etc/my.cnf | grep -E "log-bin|binlog_format"- 能看到
log-bin=mysql-bin和binlog_format=MIXED,说明配置正确;
- 能看到
-
重启MySQL(如果没重启过):
bashsystemctl restart mysqld
6.3.2.2 进行完全备份(增量备份的基础)
先做一次完全备份(比如备份szsxjd库):
bash
mysqldump -u root -p --databases szsxjd > /opt/szsxjd_full_2025-09-16.sql
6.3.2.3 生成新的二进制日志文件(开始增量备份)
刷新二进制日志,生成新的日志文件(后续操作会记录在新文件中):
bash
mysqladmin -u root -p flush-logs
- 执行后,MySQL会生成新的日志文件(比如之前是
mysql-bin.000001,现在生成mysql-bin.000002)。
6.3.2.4 插入新数据(模拟业务更新)
登录MySQL,插入新数据(这些操作会记录在mysql-bin.000002中):
sql
USE szsxjd;
-- 给info1表插入新数据
INSERT INTO info1 VALUES(3,'user3',25,'swimming');
INSERT INTO info1 VALUES(4,'user4',35,'reading');
-- 创建新数据库和表(模拟新增业务)
CREATE DATABASE yjs0805;
USE yjs0805;
CREATE TABLE test1 (id INT(4), name VARCHAR(4));
INSERT INTO test1 VALUES(1,'one');
INSERT INTO test1 VALUES(2,'two');
6.3.2.5 再次生成新的二进制日志文件
再刷新一次日志,把刚才的增量数据"定格"在mysql-bin.000002中:
bash
mysqladmin -u root -p flush-logs
- 后续操作会记录在
mysql-bin.000003中,方便区分增量数据。
6.3.3 MySQL增量恢复(实战)
6.3.3.1 一般恢复(恢复所有增量数据)
模拟场景:完全备份后,新增的数据丢失了(比如误删了yjs0805库和info1表的新数据),需要恢复。
-
模拟数据丢失:
sqlDROP DATABASE yjs0805; DELETE FROM szsxjd.info1 WHERE id > 2; -- 删除id=3、4的数据 -
先恢复完全备份(回到2025-09-16的状态):
bashmysql -u root -p < /opt/szsxjd_full_2025-09-16.sql -
恢复增量数据(二进制日志
mysql-bin.000002中的操作):bashmysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -u root -p- 解释:
mysqlbinlog是解析二进制日志的工具,--no-defaults避免字符集错误,把解析后的SQL语句通过管道符(|)传给mysql执行;
- 解释:
-
验证恢复:
sqlSELECT * FROM szsxjd.info1; -- 能看到id=3、4的数据 SHOW DATABASES; -- 能看到yjs0805库 SELECT * FROM yjs0805.test1; -- 能看到test1表的数据
6.3.3.2 基于位置恢复(跳过错误操作)
模拟场景:增量备份中,有一条错误的SQL(比如误删了test1表的数据),需要恢复时跳过这条错误操作。
-
先查看二进制日志,找到错误操作的位置:
bashmysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002 > /opt/binlog.txt- 把日志解析成文本文件,方便查看;
-
打开文本文件,查找错误操作:
bashcat /opt/binlog.txt-
假设找到以下内容(示例):
# at 1417 -- 操作开始位置 #250916 19:30:04 -- 操作时间 DELETE FROM yjs0805.test1; -- 错误操作(误删表数据) # at 1712 -- 操作结束位置
-
-
模拟数据丢失:
sqlDROP DATABASE yjs0805; DELETE FROM szsxjd.info1 WHERE id > 2; -
恢复完全备份:
bashmysql -u root -p < /opt/szsxjd_full_2025-09-16.sql -
基于位置恢复(跳过错误操作,恢复到1417之前,再从1712之后恢复):
bash# 恢复到错误操作之前(at 1417之前) mysqlbinlog --no-defaults --stop-position='1417' /opt/mysql-bin.000002 | mysql -u root -p # 恢复错误操作之后(at 1712之后) mysqlbinlog --no-defaults --start-position='1712' /opt/mysql-bin.000002 | mysql -u root -p -
验证恢复:
yjs0805.test1表的数据没有被删除,szsxjd.info1的id=3、4数据正常。
6.3.3.3 基于时间点恢复(跳过错误时间段)
和基于位置恢复类似,只是用"时间"代替"位置"。
-
查看二进制日志中的时间点(从
binlog.txt中找):- 假设错误操作的时间是
2025-09-16 19:30:04;
- 假设错误操作的时间是
-
恢复时跳过该时间点:
bash# 恢复到错误时间之前 mysqlbinlog --no-defaults --stop-datetime='2025-09-16 19:30:00' /opt/mysql-bin.000002 | mysql -u root -p # 恢复错误时间之后 mysqlbinlog --no-defaults --start-datetime='2025-09-16 19:30:05' /opt/mysql-bin.000002 | mysql -u root -p -
验证恢复:错误操作被跳过,数据正常。
总结
MySQL备份与恢复的核心逻辑很简单:"备份是基础,日志是补充,恢复是目的"。