目录

前言 

数据库备份类型

物理备份

逻辑备份

常见的备份方法

MySQL 备份与恢复实战

环境准备

物理冷备份与恢复

备份操作

恢复操作

mysqldump 逻辑备份与恢复

备份命令

恢复命令

演示如下

增量备份与恢复(Binlog)!重点内容

开启二进制日志功能

做一次全量备份 (基准点)

刷新日志,生成新的 Binlog 文件:

模拟产生增量数据:

再次刷新日志 (可选,用于切割日志):

查看 Binlog 内容

恢复操作演示

总结

 


前言 

  数据备份是非常重要的。程序错误 人为操作错误 运算错误 磁盘故障 灾难 (如火灾、地震)这些好事玩意被你遇上了,其实也没啥事毕竟只要不是故意给人家数据全删了基本也就是离职了。换个地方混日子也行。但是对企业是很大的损失,所以mysql的备份和还原还是重要的。

数据库备份类型

物理备份

数据库备份可以分为物理备份和逻辑备份。物理备份是对数据库操作系统的物理文件(如数据文件、日 志文件等)的备份。这种类型的备份适用于在出现问题的时候需要快速恢复的大型重库。 物理备份又可以成为冷备份(脱机备份)、热备份(连接备份)和温备份。

冷备份 (脱机备份) :是在关闭数据库的时候进行的(tar)

热备份 (联机备份) :数据库处于运行状态,依赖于数据库的日志文件

温备份 :数据库锁定表格 ( 不可写入但可读 ) 的状态下进行备份操作

逻辑备份

逻辑备份是对数据库逻辑组件的备份 . 表示为逻辑数据库结构 这种类型的备份适用于可以编辑数据值或表结构从数据库的备份策略角度来看,备份又可分为完全 备份、差异备份和增量备份。
完全备份:
每次都进行完全备份,会导致备份文件占用空间巨大,并且有大量的重复数据; 恢复时,直接使 用完全备份的文件即可。
差异备份:
每次差异备份,都会备份上一次完全备份之后的数据,可能会出现重复数据。;恢复时,先恢复
完全备份的数据,再恢复差异备份的数据
增量备份:
每次增量备份都是备份在上一次完全备份或者增量备份之后的数据,不会出现重复数据的情况,

也不会占用额外的磁盘空间 恢复数据,需要按照次序恢复完全备份和增量备份的数据

常见的备份方法

物理冷备:
备份时数据库处于关闭状态,直接打包数据库文件( tar ) 备份速度快,恢复时也是最简单的
缺点就是占地方激战磁盘空间
专用备份工具 mysqldump mysqlhotcopy:
mysqldump 常用的逻辑备份工具  mysqlhotcopy 仅拥有备份 MyISAM ARCHIVE
启用二进制日志进行增量备份:
进行增量备份,需要刷新二进制日志
MySQL 支持增量备份,进行增量备份时必须启用二进制日志。二进制日志文件为用户提供复制,对执行 备份点后进行的数据库更改所需的信息进行恢复。如果进行增量备份(包含自上次完全备份或增量备份 以来发生的数据修改),需要刷新二进制日志。
第三方工具备份:
免费的 MySQL 热备份软件 Percona XtraBackup mysqlbackup

MySQL 备份与恢复实战

环境准备

在开始操作前,需准备测试数据库及表结构:
-- 创建测试数据库
CREATE DATABASE szsxjd ;
USE szsxjd;
-- 创建测试表
CREATE TABLE IF NOT EXISTS info1 (
id INT ( 4 ) NOT NULL AUTO_INCREMENT,
name VARCHAR ( 10 ) NOT NULL ,
age CHAR ( 10 ) NOT NULL ,
hobby VARCHAR ( 50 ),
PRIMARY KEY (id)
);
-- 插入测试数据
INSERT INTO info1 VALUES ( 1 , 'user1' , 20 , 'running' );
INSERT INTO info1 VALUES ( 2 , 'user2' , 30 , 'singing' );

准备工作目录,在服务器规划统一的备份存储路径,避免权限混乱。

# 创建备份目录

mkdir -p /opt/mysql_backup

# 赋予当前用户或mysql用户权限(根据实际运行用户调整)

chown -R mysql:mysql /opt/mysql_backup

物理冷备份与恢复

适用于停机维护场景,直接打包数据文件。

备份操作

# 1. 停止 MySQL 服务
systemctl stop mysqld
# 2. 缩备份 (注 留权 限)
tar zcvpF /opt/mysql_all_$( date +%F).tar.gz /usr/local/mysql/data/
# 3. 移走原数 (防止 恢复 时冲
mv /usr/local/mysql/data/ /opt/data_backup_$( date +%F)

恢复操作

# 1. 解压备份文件到 MySQL 安装目
tar xzvpF /opt/mysql_all_2025-09-15.tar.gz -C /usr/local/mysql/
# 2. 启动 MySQL 服务
systemctl start mysqld

mysqldump 逻辑备份与恢复

最常用的逻辑备份工具,支持在线备份(温备份)。

备份命令


恢复命令

方式一:命令行重定向
# 恢复指定库(需提前创建库,若备份时未带 --databases
mysql -u root -p szsxjd < /opt/szsxjd.sql
# 恢复全量(备份时带 --databases --all-databases ,无需指 库名)
mysql -u root -p < /opt/all_db.sql
方式二:MySQL 交互模式
-- 登录 MySQL 后执行
source / opt / szsxjd . sql ;
⚠️ 关键注意 : * 备份时 --databases :SQL 文件中包含 CREATE DATABASE USE 语句,
恢复时直接 mysql -u root -p < file.sql 。 * 备份时 不带 --databases :SQL 文件中仅包 含 CREATE TABLE ,恢复前必须先 CREATE DATABASE USE ,或者在命令行指定库名。

演示如下

1.实验表格                                                     

2.删除表格模拟数据丢失的环境

 

3.恢复表格

4.验证结果

增量备份与恢复(Binlog)!重点内容

开启二进制日志功能

编辑配置文件开启二进制日志

vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED # 可选,指定二进制日志 (binlog) 的记录格式为 MIXED (混合输入)
server-id = 1 # 可加可不加该命令
# 二进制日志 (binlog) 3 种不同的记录格式 : STATEMENT ( 基于 SQL 语句 ) ROW( 基于行 ) MIXED( 混合
模式 ) ,默认格式是 STATEMENT

重启mysql服务使得配置生效,登录 MySQL 输入 SHOW MASTER STATUS;,如果有输出文件名(如 mysql-bin.000001),说明开启成功。

做一次全量备份 (基准点)

mysqldump -u root -p --databases szsxjd > /opt/szsxjd_full.sql

刷新日志,生成新的 Binlog 文件:

mysqladmin -u root -p flush-logs

模拟产生增量数据:

mysql -u root -p -e "USE szsxjd; INSERT INTO info1 VALUES (3, 'user3', 25, 'swimming');"

再次刷新日志 (可选,用于切割日志):

mysqladmin -u root -p flush-logs

查看 Binlog 内容

我们需要找到刚才插入 user3 的位置点。

# 查看 binlog 内容 (路径通常在数据目录 /usr/local/mysql/data 下)

mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000002

关注输出中的信息:
at 302 (起始位置)
end_log_pos 623 (结束位置)
#250915 10:30:00 (时间戳,请根据实际输出调整)

恢复操作演示

场景 A:全量恢复 (重放所有日志)

日志显示事务开始于 pos 302,结束于 pos 464 (Xid = 36)。

mysqlbinlog --no-defaults \ --stop-position=464 \ /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p szsxjd

--stop-position=464 告诉 MySQL 只重放截止到第 464 字节的操作,这正好是插入 user3 并提交的位置

场景 b:基于 Time (时间点) 的恢复

日志中该操作的时间戳为 260804 21:17:18。

mysqlbinlog --no-defaults \ --stop-datetime="2026-08-04 21:17:18" \ /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p szsxjd

场景 c:跳过误操作 (断点恢复)

user3 的操作在 pos 464 结束,下一个操作(Rotate)从 pos 464 开始。

mysqlbinlog --no-defaults \ --start-position=464 \ /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p szsxjd

总结

逻辑备份 (mysqldump) 适合做全库或单表的定期备份,恢复简单。
增量备份 (Binlog) 必须配合全量备份使用,用于恢复全量备份之后产生的数据,可以实现精确到秒级或事务级的恢复。
路径注意:请确保你的 CentOS 虚拟机中 MySQL 的数据目录路径正确(通常为 /usr/local/mysql/data),否则 mysqlbinlog 命令会报错找不到文件。

 

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐