当前位置: 首页 > news >正文

Implement recovery based on PITR using dump file and binlog

模拟生产场景中需要基于某个事务点的恢复,使用存量备份与存量binlog

生成测试数据

(root@localhost) [(none)]> create database NanJing;
Query OK, 1 row affected (0.01 sec)
(root@localhost) [test]> use NanJing;
Database changed
(root@localhost) [NanJing]> create table xianlin (id int);
Query OK, 0 rows affected (0.04 sec)
创建procedure生产测试数据
(root@localhost) [NanJing]> DELIMITER $$
(root@localhost) [NanJing]> CREATE PROCEDURE InsertSampleData()-> BEGIN->     DECLARE i INT DEFAULT 1;->->     WHILE i <= 1000 DO->         INSERT INTO xianlin (id) VALUES (i);->         SET i = i + 1;->     END WHILE;-> END$$
Query OK, 0 rows affected (0.01 sec)
(root@localhost) [NanJing]> DELIMITER ;
(root@localhost) [NanJing]> CALL InsertSampleData();
Query OK, 1 row affected (2.12 sec)
(root@localhost) [NanJing]> select count(1) from xianlin;
+----------+
| count(1) |
+----------+
|     1000 |
+----------+
1 row in set (0.01 sec)步骤说明:
1.mysqldump备份集可以恢复至1000数据
2.利用binlog恢复剩余1000条数据
binlog起终点:master-data=2  ->  寻找drop之前的标号

模拟0级备份

[root@node01 ~]# mysqldump -uroot -p -S /tmp/mysql.sock -A --master-data=2 --single-transaction --max-allowed-packet=128M -R -E --triggers --set-gtid-purged=auto >/data/dumpAll_`date +%F`.sql
WARNING: --master-data is deprecated and will be removed in a future version. Use --source-data instead.
Enter password:

模拟备份之后的数据变化

(root@localhost) [NanJing]> DROP PROCEDURE InsertSampleData;
Query OK, 0 rows affected (0.00 sec)
(root@localhost) [NanJing]> DELIMITER $$
(root@localhost) [NanJing]> CREATE PROCEDURE InsertSampleData()-> BEGIN->     DECLARE i INT DEFAULT 1001;->->     WHILE i <= 2000 DO->         INSERT INTO xianlin (id) VALUES (i);->         SET i = i + 1;->     END WHILE;-> END$$
Query OK, 0 rows affected (0.00 sec)
(root@localhost) [NanJing]> DELIMITER ;
(root@localhost) [NanJing]> CALL InsertSampleData();
Query OK, 1 row affected (2.10 sec)
(root@localhost) [NanJing]> select count(1) from xianlin;
+----------+
| count(1) |
+----------+
|     2000 |
+----------+
1 row in set (0.01 sec)

模拟数据丢失

(root@localhost) [mysql]> drop database NanJing;
Query OK, 1 row affected (0.01 sec)

查看重要事务节点与binlog信息

由于我们的备份是设置记录有GTID信息与MASTER,所以可以通过dump备份来查看这两个关键信息
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '4dee4290-485c-11ef-8500-000c2946a607:1-1005'; (info:备份存在1-1005事务号事务内容)
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000014', MASTER_LOG_POS=285564; (info:备份存在POSTION号285564之前内容)查看binlog内容信息,获取tail GTID
[root@node01 data]# cd 3306/log/
[root@node01 log]# ll
-rw-r-----. 1 mysql mysql      180 Jul 30 21:44 mysql-bin.000013
-rw-r-----. 1 mysql mysql   570354 Jul 31 22:03 mysql-bin.000014
-rw-r-----. 1 mysql mysql      448 Jul 31 18:29 mysql-bin.index
-rw-r--r--. 1 mysql mysql   528035 Jul 31 21:56 mysql-err.log
-rw-r-----. 1 mysql mysql  3820064 Jul 31 22:00 slow.log
(root@localhost) [(none)]> show binlog events in 'mysql-bin.000014';
| mysql-bin.000014 | 570164 | Gtid  | 51 | 570241 | SET @@SESSION.GTID_NEXT= '4dee4290-485c-11ef-8500-000c2946a607:2008'  --drop事务号为2008
| mysql-bin.000014 | 570241 | Query | 51 | 570354 | drop database NanJing /* xid=11339 */   

根据GTID导出binlog

利用mysqlbinlog工具截取上次全量备份之后的binlog
1006 - 2007
[root@node01 log]# mysqlbinlog --skip-gtids --include-gtids='4dee4290-485c-11ef-8500-000c2946a607:1006-2007' mysql-bin.000014 >/data/bin.sql
[root@node01 log]# ll /data/bin.sql
-rw-r--r--. 1 root root 751934 Jul 31 22:58 /data/bin.sql

恢复

由于恢复也会产生log所以设置sql_log_bin = 0(root@localhost) [(none)]> # set this session generate no log;
(root@localhost) [(none)]> set sql_log_bin = 0;
Query OK, 0 rows affected (0.00 sec)
(root@localhost) [(none)]> source /data/dumpAll_2030-07-31.sql
(root@localhost) [test]> show databases;
+--------------------+
| Database           |
+--------------------+
| Benjamin           |
| NanJing            |
+--------------------+
(root@localhost) [test]> use NanJing
Database changed
(root@localhost) [NanJing]> select count(1) from xianlin;
+----------+
| count(1) |
+----------+
|     1000 |
+----------+
1 row in set (0.01 sec)
(root@localhost) [test]> source /data/bin.sql
(root@localhost) [NanJing]> select count(1) from xianlin;
+----------+
| count(1) |
+----------+
|     2000 |
+----------+
1 row in set (0.01 sec)
http://www.dtcms.com/a/309194.html

相关文章:

  • 用离子交换树脂做镍钴分离的工艺优势
  • Solana:解决Anchor Build编译程序报错 no method named `source_file` found for struct
  • 暑期算法训练.12
  • 练习javaweb+mysql+jsp
  • 渗透测试常用指令
  • [vue3 echarts] echarts 动态数据更新 setInterval
  • winform,DataGridView单元格点击选择日期,日期控件
  • 使用 whisper, 音频分割, 整理需求 2
  • 高防服务器租用:保障数据安全
  • 【智能Agent场景实战指南 Day 29】Agent市场趋势与前沿技术
  • 法国彩虹重磅发布EmVue:解锁能源监控新方式
  • TGD第十篇:当神经网络遇到TGD特征
  • 相亲小程序个人资料管理系统模块搭建
  • 数据结构(10)栈和队列算法题
  • 25电赛e题杂乱环境稳定识别矩形框(附源码)
  • 浏览器环境segmentit实现中文分词
  • 精通分类:解析Scikit-learn中的KNN、朴素贝叶斯与决策树(含随机森林)
  • LLM Prompt与开源模型资源(2)提示工程关键技术
  • 工程化(二):为什么你的下一个项目应该使用Monorepo?(pnpm / Lerna实战)
  • 位运算-面试题01.01.判定字符是否唯一-力扣(LeetCode)
  • 【unity小技巧】封装unity适合2D3D进行鼠标射线检测,获取鼠标位置信息检测工具类
  • 8.1每日一题
  • (线段树)SP2916 GSS5 / nfls #2899 查询最大子段和 题解
  • STL进阶典题整理 2025.7.30-2025.8.1
  • 关于继承的一些知识(C++)
  • react-native在mac的m2芯片下,pod install安装glog的时候报错
  • bmcweb工作流程
  • 【科研绘图系列】R语言绘制环状分组显著性柱状堆积图
  • Spring AI 系列之三十 - Spring AI Alibaba-其它模型
  • CSS font-weight:500不生效