数据恢复咨询热线:400-666-3702  

欢迎访问南京兆柏数据恢复公司,专业数据恢复15年

兆柏数据恢复公司

 常见问题

 当前位置: 主页 > 常见问题

MySQL 删库到恢复

浏览量: 次 发布日期:2023-08-20 22:32:35

MySQL 删库到恢复 失误删库不一定要跑路,只要有合理的备份策略,绝大多数情况都可以恢复到删库之前的那一刻。如果要恢复,一般采用的办法是使用上一次全备先恢复数据,增量数据通过导入从全备开始到误操作之前的 Binlog,但是这种方式如果 Binlog 多,通常是比较慢的,并且很容易导入到一半时报错,这篇文章就介绍另外一种方式进行误操作的恢复。环境IP作用环境192.168.150.253源实例(误操作的实例)CentOS 7.4、已安装 MySQL 8.0.25、已安装 XtraBackup 8.0.25192.168.150.123目标实例(用于恢复数据)CentOS 7.4、已安装 MySQL 8.0.25、已安装 XtraBackup 8.0.25大致过程:在源实例写入基础数据,然后进行全量备份,再写入增量数据,之后模拟在源实例误删除一个数据库,之后通过全量备份在目标实例上进行恢复,把源实例的 Binlog 传输到恢复数据的实例,然后修改成 relay log,再通过 start slave sql_thread until sql_before_gtids="xxx" 同步数据到误操作前面的一个位点。在源实例创建测试库和测试表: 写入数据: 查询数据: 在源实例增加备份用户: 在源实例进行全量备份: 将全量备份传到目标实例上: 在源实例写入一条数据: 在源实例模拟删库误操作: 关闭目标实例运行的 MySQL: 清空目标实例数据目录和事务日志目录: 将全备导入目标实例: 修改目标实例 MySQL 数据目录的属主: 修改配置文件 /data/mysql/conf/my.cnf(配置启动时不启动复制、relay log 元数据通过文件形式记录,server-id 不能跟原实例相同): 启动 MySQL: 查看数据(此时只是恢复了全量数据,所以数据不完整): 清空目标实例的系统变量 gtid_purged 和 gtid_executed: 设置 gtid_purged(这个位点取至 xtrabackup_binlog_info): 让该 MySQL 知道自己是一个从库(192.168.1.1 是随便指定的 IP): 关闭目标实例: 删除该实例的 relay-log.info: 删除所有 relay log: 拷贝源实例 MySQL 全备之后的 Binlog: 在目标实例中,将 Binlog 改成 Relay 文件: 写入 relay log 的索引文件: 查看 relay log 的索引文件: 修改事务日志目录下文件的属组: 启动目标实例: 执行 change master: (这个位点来源于 备份 xtrabackup_binlog_info)解析误操作时间点的 Binlog(Binlog 较大的情况可以增加时间范围): 解析 Binlog 的结果文件 /data/0702.sql 内容如下: 启动 sql 线程,同步数据到误操作之前的一个事务: 该 gtid 值取至上面解析的 Binlog,为误操作这个事务的 GTID。在目标实例上查询数据(此时的数据已经恢复到误操作前一刻): 最终可以将误删除的库恢复到原实例。
相关推荐