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

4.mysqldump

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

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

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 | 导弹专业        |
+----+----------+-----+-----+-----------------+
相关推荐
大耳朵-小飞象9 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技10 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
Cloud云卷云舒10 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
憧憬成为web高手10 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
HLC++10 小时前
Linux的进程间通信
android·linux·服务器
段一凡-华北理工大学10 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh12 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
生活爱好者!13 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
用户713335851562413 小时前
MySQL - 事务、redo/undo 日志与 MVCC
mysql
z1234567898613 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程