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

mysql基于GTID恢复数据

下面我将完整模拟从建库建表、误删数据库,到通过GTID进行数据恢复的全过程,包括导出和导入对应GTID事务的具体操作。

1. 环境准备:启用GTID配置

开启 GTID 需要设置以下关键参数(MySQL 5.6 及以上版本支持):
gtid_mode=ON:启用 GTID 模式(必填)
enforce_gtid_consistency=ON:强制 GTID 一致性(防止执行不支持 GTID 的语句,必填)
首先确保MySQL已启用GTID,配置如下(my.cnf/my.ini):

[mysqld]
gtid_mode = ON
enforce_gtid_consistency = ON
log_bin = /var/log/mysql/mysql-bin.log
server-id = 1
binlog_format = row
log_slave_updates = ON

重启MySQL服务使配置生效。

2. 完整操作流程

– 步骤1: 创建数据库和表并插入数据

CREATE DATABASE testdb;
USE testdb;CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL UNIQUE
);INSERT INTO users (username, email) VALUES 
('alice', 'alice@example.com'),
('bob', 'bob@example.com'),
('charlie', 'charlie@example.com');

– 查看当前GTID执行情况

SHOW GLOBAL VARIABLES LIKE 'gtid_executed';

– 记录此时的GTID值,例如: c27a37ff-978f-11f0-b5d6-0050563a4b27:1-16

mysql> SHOW GLOBAL VARIABLES LIKE 'gtid_executed';
+---------------+-------------------------------------------+
| Variable_name | Value                                     |
+---------------+-------------------------------------------+
| gtid_executed | c27a37ff-978f-11f0-b5d6-0050563a4b27:1-16 |
+---------------+-------------------------------------------+
1 row in set (0.01 sec)

– 步骤2: 模拟误删除操作

DROP DATABASE testdb;

– 确认数据库已删除
SHOW DATABASES LIKE 'testdb';
– 应返回空结果

– 步骤3: 查找需要恢复的GTID范围
– 查看二进制日志列表

SHOW BINARY LOGS;
或者使用
show master status;
mysql> SHOW BINARY LOGS;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       177 |
| mysql-bin.000002 |       201 |
| mysql-bin.000003 |       201 |
| mysql-bin.000004 |       444 |
| mysql-bin.000005 |      3755 |
| mysql-bin.000006 |      1505 |
| mysql-bin.000007 |      1701 |
| mysql-bin.000008 |      3523 |
| mysql-bin.000009 |      2838 |
+------------------+-----------+
9 rows in set (0.00 sec)

可以确定当前使用的日志文件是mysql-bin.000009
– 查看具体日志文件中的GTID事件(假设日志文件为mysql-bin.000009)

SHOW BINLOG EVENTS IN 'mysql-bin.000009';

在这里插入图片描述

– 从日志中找到创建数据库到插入数据的GTID范围
– 例如: c27a37ff-978f-11f0-b5d6-0050563a4b27:14-16

– 步骤4: 在命令行使用mysqlbinlog导出指定GTID事务
– 注意:此命令在操作系统命令行执行,不是MySQL客户端

mysqlbinlog  --skip-gtids    --include-gtids='c27a37ff-978f-11f0-b5d6-0050563a4b27:14-16' /data/mysql/mysql-bin.000009 > recovery.sql

–skip-gtids参数的作用是忽略 binlog 中的 GTID 信息,即执行时不记录或不应用这些 GTID 到目标库的gtid_executed集合中

– 步骤5: 导入恢复文件
– 注意:此命令在操作系统命令行执行

mysql -u root -p < recovery.sql

– 步骤6: 验证恢复结果

USE testdb;
SELECT * FROM users; 

– 应能看到之前插入的3条记录

– 查看当前GTID执行情况,确认已恢复

SHOW GLOBAL VARIABLES LIKE 'gtid_executed';

关键操作说明

  1. GTID范围确定

    • 每个操作(创建库、创建表、插入数据)都会生成一个GTID
    • 通过SHOW BINLOG EVENTS可以查看每个事务对应的GTID
    • 我们需要恢复的是从创建数据库到删除之前的所有GTID
  2. 导出GTID事务

    # 导出指定GTID范围的事务
    mysqlbinlog  --skip-gtids  --include-gtids='UUID:起始编号-结束编号' 二进制日志文件 > 恢复文件.sql# 示例
    mysqlbinlog  --skip-gtids  --include-gtids='3a1b2c3d-4e5f-6789-abcd-1234567890ab:1-4' /var/log/mysql/mysql-bin.000001 > recovery.sql

–skip-gtids参数的作用是忽略 binlog 中的 GTID 信息,即执行时不记录或不应用这些 GTID 到目标库的gtid_executed集合中


3. **导入恢复文件**:
```bash
# 导入恢复文件
mysql -u 用户名 -p < recovery.sql
  1. 验证恢复
    • 检查数据库和表是否重建
    • 确认数据是否完整恢复
    • 查看gtid_executed变量确认事务已应用

这种方法的优势在于可以精确恢复特定范围的事务,避免了全量备份恢复的冗余操作,特别适合处理误删除数据库这类场景。

http://www.dtcms.com/a/438271.html

相关文章:

  • LabVIEW正弦波去噪与信号处理
  • winform 五子棋
  • Java实现BCH与BTC的地址相互转换
  • CyberSecurity:SSL Client-Initiated Renegotiation 客户端发起的重新协商ddos攻击
  • 关于Mybatis-Plus的insertOrUpdate()方法使用时的问题与解决—数值精度转化问题
  • 石家庄做网站制作公司网站写作赚钱
  • Docker、容器、虚拟机到底是什么
  • 西安微信商城网站开发做阿里巴巴怎么进公司网站
  • Go语言入门(17)-接口
  • WebPages 安全
  • 安卓基础组件030-进程和线程
  • [ vue 前端框架 ] 基本用法和vue.cli脚手架搭建
  • 鸿蒙Next中使用Socket进行网络通信:完整指南与实战
  • dw如何做商业网站淘宝网站建设流程
  • 网站做好了 怎么做解析wordpress 怎么迁移
  • GNS3 3.0.5新版教程,以及Cloud设备找不到VMware网卡的解决方法
  • 比奇堡合唱团制作教学,AI翻唱教学动漫角色歌曲
  • 活动展板设计:大尺寸 + 高分辨率,打印清晰
  • 深圳市城乡建设部网站首页一个网站如何做盈利
  • 【IMX6ULL驱动学习】I2C驱动
  • 基于物联网数据采集的大型应用程序软件架构设计:核心要点、结构内容与链路关系
  • 【连载5】云数据库 MySQL 热点更新功能介绍
  • (四)Webpack、Slot与Vue CLI脚手架
  • 【附源码】个人事务管理系统的设计与实现
  • 基于PCIe(XDMA)的多路(1-32路)信号采集与回放子系统,多路视频、AD、光纤等信号,支持PR over PCIe
  • 【STM32项目开源】基于STM32的智能电子秤
  • 网站建设专用图形库西安网站快速排名提升
  • 红色php企业网站模板下载wordpress slider设置
  • Starting again-02
  • 【IMX6ULL驱动学习】PWM驱动