mysql 全备+binlog恢复数据

实验内容:模拟mysql通过全量备份+binlog日志恢复数据

1、数据准备

sql 复制代码
mysql> create database backup;
mysql> use backup
mysql> create table t1(id int );
mysql> insert into t1 values(1),(2),(3);
mysql> commit;

[root@oracle backup]# rm -rf /backup/*

2、模拟周二 23:00 全备

sql 复制代码
mysqldump -uroot -S  /data/3307/mysql.sock  -A  -R  --triggers  --set-gtid-purged=OFF 
--master-data=2 --single-transaction |  gzip >  /backup/full_$(date +%F).sql.gz

参数说明:

--single-transaction:保证备份一致性(InnoDB 表)

--flush-logs:备份后刷新二进制日志,生成新的日志文件

--master-data=2:记录备份时的二进制日志位置(在备份文件中以注释形式存在)

bash 复制代码
[root@oracle backup]# ll
总用量 1004
-rw-r--r-- 1 root root 1024907 8月  30 15:29 full_2025-08-30.sql.gz

解压

bash 复制代码
[root@oracle backup]# gunzip full_2025-08-30.sql.gz 
[root@oracle backup]# ll
总用量 4392
-rw-r--r-- 1 root root 4495985 8月  30 15:29 full_2025-08-30.sql
[root@oracle backup]# 

3、模拟周二 23:00 到周三10点之间的数据变化

sql 复制代码
mysql> insert into t1   values(4),(5),(5),(11);
mysql> commit;
mysql> create table t2(id int );
mysql> insert into t2   values(4),(5),(5),(11);
mysql> commit;

4、模拟故障,删除表(只是模拟,不代表生产)

sql 复制代码
mysql> drop backup;

5、恢复过程

5.1 准备临时数据库(多实例3308,3307为生产主库)

bash 复制代码
[root@oracle ~]# systemctl start  mysqld3308

5.2 准备备份

(1)准备全备

bash 复制代码
[root@oracle backup]# cd /backup/
[root@oracle backup]# gunzip full_2025-08-30.sql.gz 

(2)截取二进制日志binlog

bash 复制代码
vim full_2025-08-30.sql.gz   

查看事务ID ,940为起点

sql 复制代码
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=940;
sql 复制代码
mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000001 |     1815 |              |                  | dba0d530-774a-11f0-928d-0050562cf0d9:1-8 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)

查看终点,在binlog事务中查看

sql 复制代码
mysql> show binlog events in 'mysql-bin.000001';

确定终点号:1716,drop不需要,

所有最终二进制范围:940------1716

sql 复制代码
mysqlbinlog  --skip-gtids --start-position=940  --stop-position=1716 /data//3307/mysql-bin.000001 > /backup/bin.sql

6、恢复备份到临时库 3308

登陆到临时库3308

bash 复制代码
mysql -uroot -S  /data/3308/mysql.sock

关闭二进制记录

sql 复制代码
mysql> set sql_log_bin=0;

恢复全备

sql 复制代码
mysql> source /backup/full_2025-08-30.sql

恢复二进制

sql 复制代码
mysql> source /backup/bin.sql

开启二进制记录

mysql> set sql_log_bin=1;

7、将临时库里面恢复后的数据库导出,再导入到生产库

bash 复制代码
 mysqldump -S /data/3308/mysql.sock -B  backup > /backup/bak.sql

登陆到生产库

bash 复制代码
[root@oracle ~]# mysql -uroot -S  /data/3307/mysql.sock

关闭二进制记录

sql 复制代码
mysql> set sql_log_bin=0;

恢复数据

sql 复制代码
source /backup/bak.sql

再次开启二进制记录

sql 复制代码
mysql> set sql_log_bin=1;

查看数据是否全部恢复,确认数据全部恢复

相关推荐
越甲八千5 小时前
async 和 await 详细解析
网络·数据库·tcp/ip
buddieofcugb5 小时前
记一次MySQL数据表误操作修复
mysql
·云扬·5 小时前
MySQL高可用方案全解析:6种主流方案的原理、优缺点与选型指南
数据库·mysql
only-qi6 小时前
深入理解MySQL中的MVCC:多版本并发控制的实现原理
java·数据库·mysql
G皮T6 小时前
【Elasticsearch】查询性能调优(六):track_total_hits 影响返回结果的相关性排序吗
大数据·数据库·elasticsearch·搜索引擎·全文检索·性能·opensearch
夜光小兔纸6 小时前
Oracle 表新增 ID RAW(16) 字段并填充历史数据
数据库·sql·oracle
寂寞恋上夜6 小时前
PRD权限矩阵怎么写:RBAC模型+5个真实案例
数据库·人工智能·矩阵·deepseek ai·markdown转xmind·ai思维导图生成器
北亚数据恢复6 小时前
服务器数据恢复—mdisk热备盘同步失败的数据恢复流程
数据恢复·服务器数据恢复·北亚数据恢复·存储数据恢复
科技块儿6 小时前
【离线环境部署】在内网系统中搭建与维护IP离线数据库的完整方案
数据库·网络协议·tcp/ip
秋饼6 小时前
【深度剖析MySQL五大核心模块:从架构到实践】
数据库·mysql·架构