MySQL备份还原方法1---mysqldump

4.mysqldump

该方法无需下载工具,redhat9系统自带

mysqldump 是 MySQL 运维中最基础、最常用的备份工具,适合中小型数据库的定期备份、迁移和开发测试。对于超大库(几百 GB 以上),性能会受影响,通常会搭配 mydumper、xtrabackup 等工具使用。

4.1数据准备

这里之前有数据,就是用的school库和里面的Student表,里面数据不重要,随便写

bash 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| school             |#用到这个
| sys                |
+--------------------+
mysql> use school;

mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| Student          |
| Teacher          |
+------------------+

4.2完全备份

bash 复制代码
#创建备份用到的目录
[root@bogon ~]# mkdir /mysql_backup/dump -p

#完全备份school库
[root@bogon ~]# mysqldump --opt -B school > /mysql_backup/dump/school.sql
[root@bogon ~]# ls /mysql_backup/dump/
school.sql

4.3增量备份

1.增加记录

2.模拟数据破坏

3.刷新日志

4.增量备份(看binlog文件里面)

​ 1基于时间 --start-datetime,--stop-datetime

​ 2基于位置 --start-position,--stop-position

bash 复制代码
mysql> INSERT INTO Student VALUES(5,'xumubin','男',29,'中文专业'),
    -> (6,'wangzhao','男',21,'导弹专业');
    
mysql> drop database school;

mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

mysql> show binary logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |      4487 | No        |
| binlog.000002 |       744 | No        |
| binlog.000003 |       158 | No        |
+---------------+-----------+-----------+

备份binlog文件

一般都是选择刷新日志后的 倒数第二个!!!

bash 复制代码
#手动备份 binlog 文件
mysql> system cp /var/lib/mysql/binlog.000002 /mysql_backup/dump/
[root@bogon ~]# cd /mysql_backup/dump/
[root@bogon dump]# ls
binlog.000002  school.sql

找时间点/位置

先定位到插入数据的大概位置

找到begin和commit,选择begin前和commit后的时间和位置点

bash 复制代码
260401 10:41:16[root@bogon dump]# mysqlbinlog binlog.000002  --base64-output=DECODE-ROWS -vv
......
# at 237
#260401 10:41:16 server id 1  end_log_pos 314 CRC32 0x27fdc597 	Query	thread_id=8	exec_time=0	error_code=0
SET TIMESTAMP=1775011276/*!*/;
SET @@session.pseudo_thread_id=8/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1168113696/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=255,@@session.collation_connection=255,@@session.collation_server=255/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
/*!80011 SET @@session.default_collation_for_utf8mb4=255*//*!*/;
BEGIN
/*!*/;
# at 314
#260401 10:41:16 server id 1  end_log_pos 384 CRC32 0x2caeff05 	Table_map: `school`.`Student` mapped to number 89
# has_generated_invisible_primary_key=0
# at 384
#260401 10:41:16 server id 1  end_log_pos 482 CRC32 0xad982ff4 	Write_rows: table id 89 flags: STMT_END_F
### INSERT INTO `school`.`Student`
### SET
###   @1=5 /* INT meta=0 nullable=0 is_null=0 */
###   @2='xumubin' /* VARSTRING(64) meta=64 nullable=0 is_null=0 */
###   @3='男' /* STRING(8) meta=65032 nullable=0 is_null=0 */
###   @4=29 /* TINYINT meta=0 nullable=0 is_null=0 */
###   @5='中文专业' /* VARSTRING(64) meta=64 nullable=1 is_null=0 */
### INSERT INTO `school`.`Student`
### SET
###   @1=6 /* INT meta=0 nullable=0 is_null=0 */
###   @2='wangzhao' /* VARSTRING(64) meta=64 nullable=0 is_null=0 */
###   @3='男' /* STRING(8) meta=65032 nullable=0 is_null=0 */
###   @4=21 /* TINYINT meta=0 nullable=0 is_null=0 */
###   @5='导弹专业' /* VARSTRING(64) meta=64 nullable=1 is_null=0 */
# at 482
#260401 10:41:16 server id 1  end_log_pos 513 CRC32 0x772bc368 	Xid = 58
COMMIT/*!*/;
# at 513
#260401 10:41:50
......

begin: 260401 10:41:16 2026-04-01 10:41:16 at 237

commit: 260401 10:41:50 2026-04-01 10:41:50 at 513

4.4完全还原

bash 复制代码
#模拟数据库破坏
mysql> drop database school;

#完全还原
[root@bogon dump]# mysql < school.sql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| school             |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

mysql> select * from school.Student;
+----+--------+-----+-----+-----------------+
| no | name   | sex | age | dept            |
+----+--------+-----+-----+-----------------+
|  1 | 陆亚   | 男  |  24 | 计算机网络      |
|  2 | tom    | 男  |  26 | 英语            |
|  3 | 张阳   | 男  |  21 | 物流管理        |
|  4 | alex   | 女  |  22 | 电子商务        |
+----+--------+-----+-----+-----------------+
4 rows in set (0.00 sec)

可以看到没有后面插入的记录

4.5增量还原

4.5.1 基于时间

bash 复制代码
[root@bogon dump]# mysqlbinlog binlog.000002 --start-datetime="2026-04-01 10:41:16" --stop-datetime=" 2026-04-01 10:41:50" > time1.sql
[root@bogon dump]# ls
binlog.000002  school.sql  time1.sql

mysql> select * from school.Student;
+----+----------+-----+-----+-----------------+
| no | name     | sex | age | dept            |
+----+----------+-----+-----+-----------------+
|  1 | 陆亚     | 男  |  24 | 计算机网络      |
|  2 | tom      | 男  |  26 | 英语            |
|  3 | 张阳     | 男  |  21 | 物流管理        |
|  4 | alex     | 女  |  22 | 电子商务        |
|  5 | xumubin  | 男  |  29 | 中文专业        |
|  6 | wangzhao | 男  |  21 | 导弹专业        |
+----+----------+-----+-----+-----------------+
6 rows in set (0.00 sec)

有后面插入的数据,增量还原成功

4.5.2基于位置

bash 复制代码
#删除增量的部分
mysql> delete from school.Student where no=5 or no=6;
mysql> select * from school.Student;
+----+--------+-----+-----+-----------------+
| no | name   | sex | age | dept            |
+----+--------+-----+-----+-----------------+
|  1 | 陆亚   | 男  |  24 | 计算机网络      |
|  2 | tom    | 男  |  26 | 英语            |
|  3 | 张阳   | 男  |  21 | 物流管理        |
|  4 | alex   | 女  |  22 | 电子商务        |
+----+--------+-----+-----+-----------------+

#增量还原
[root@bogon dump]# mysqlbinlog binlog.000002 --start-position=237 --stop-position=513 > pos1.sql
[root@bogon dump]# ls
binlog.000002  pos1.sql  school.sql  time1.sql

mysql> source /mysql_backup/dump/pos1.sql;

mysql> select * from school.Student;
+----+----------+-----+-----+-----------------+
| no | name     | sex | age | dept            |
+----+----------+-----+-----+-----------------+
|  1 | 陆亚     | 男  |  24 | 计算机网络      |
|  2 | tom      | 男  |  26 | 英语            |
|  3 | 张阳     | 男  |  21 | 物流管理        |
|  4 | alex     | 女  |  22 | 电子商务        |
|  5 | xumubin  | 男  |  29 | 中文专业        |
|  6 | wangzhao | 男  |  21 | 导弹专业        |
+----+----------+-----+-----+-----------------+
相关推荐
小诗懂技术几秒前
Linux设备驱动并发控制总结_CSDN
linux·运维·服务器
IvorySQL几秒前
PostgreSQL 日报| pg_vectorsearch 开源向量搜索发布(10 月 14 日)
数据库·人工智能·postgresql·开源·区块链
colinu2 分钟前
Docker 容器端口未发布问题快速排查文档
运维·docker·容器
m0_587383006 分钟前
碰碰好评卡功能落地全流程实战指南 附核心逻辑与常见问题解决方案
java·前端·数据库·后端·struts·需求分析
迪康coolmu9 分钟前
迪康Defender网络准入控制系统落地实战:部署、配置与问题排查记录
运维·开发语言·网络·经验分享·php
Dovis(誓平步青云)9 分钟前
一年1956亿行:智能电表场景下的时序数据存储实践
运维·前端·自动化·音视频·prometheus
Y38153266210 分钟前
SerpBase + RAG 实战:用搜索 API 给知识库接上实时数据,回答不再过期
java·服务器·数据库
骑着蜗牛撵大象32710 分钟前
SQL 编辑器不是高级记事本:KStudio 与 KSQL Developer 里的建表与增删改查手法
数据库·sql·mysql·编辑器·crud·执行计划
北风toto14 分钟前
银河麒麟 V10 内网 YUM 源修复实战教程(U盘中转版)
linux·服务器
Access开发易登软件15 分钟前
我全新开发了一套 Access 通用 Excel 导入工具,现在开源了
数据库·microsoft·excel·mfc·vba·access·access开发