mysql 数据库数据恢复方案:

  • 前言
  • 一、恢复数据需要满足的条件
  • 二、开始恢复数据
    • 1、第一步
    • 2、第二步
    • 3、第三步
    • 4、第四步
    • 5、第五步
    • 6、 第六步
  • 结束语:

前言

该方案针对于 linux 环境下恢复数据,windows 下不太清楚能不能用,可以参考下。

mysql 数据库的恢复是通过 MySQL 本身的 binlog 日志来恢复丢失或删除的数据,binlog 日志文件中记录着数据库中所有的操作,CRUD/Rollback 操作都会记录在日志中。

该方式是通过通过 binlog 日志恢复,需要保证数据库开启了 binlog 日志。

一、恢复数据需要满足的条件

查询是否开启 binlog 日志的 sql 脚本:
如果没开启的话,这个方案恢复不了了的。

 show variables like '%log_bin%';


查看binlog存放日志文件目录

  show variables like '%datadir%';

my2sql 插件使用的限制条件:

  • 使用回滚/闪回功能时,binlog格式必须为row,且binlog_row_image=full, DML统计以及大事务分析不受影响,只能回滚DML, 不能回滚DDL
  • 支持指定-tl时区来解释binlog中time/datetime字段的内容。开始时间-start-datetime与结束时间-stop-datetime也会使用此指定的时区, 但注意此开始与结束时间针对的是binlog event header中保存的unix timestamp。结果中的额外的datetime时间信息都是binlog event header中的unix timestamp
  • 此工具是伪装成从库拉取binlog,需要连接数据库的用户有SELECT, REPLICATION SLAVE, REPLICATION CLIENT权限

插件下载地址,下载免费:my2sql下载地址免费

二、开始恢复数据

1、第一步

在mysql 安装目录 bin 目录中放入插件 my2sql,然后给 my2sql 赋权限。

  chmod 777 my2sql

2、第二步

创建一个空文件夹 “tmpdir”,然后给个 777 的权限。

 mkdir tmpdir

3、第三步

binlong文件下载到本地,然后转换成sql格式找到对应的节点(pos点),节点名(pos点)是纯数字的时间戳,根据节点可以恢复指定时间段的数据。
binlog 文件格式转换,首先保证本地数据库与生产环境数据库版本要一致,然后输入以下命令(不要有换行符号):

mysqlbinlog --no-defaults --base64-output=decode-rows -v
--start-datetime="2022-08-09 08:00:00" --stop-datetime="2022-08-17 10:35:00"
C:\MySQL\MySQL8.0\Desktop\mysql-bin.000039 -r ./output1.sql

说明:

mysqlbinlog --no-defaults --base64-output=decode-rows -v
--start-datetime="开始时间" --stop-datetime="结束时间"
'binlog文件的绝对路径' -r ./'转换后的文件名称'

转换后的sql文件中的节点(pos点):
可以根据binlog文件中的时间找到对应的节点,有了开始节点与结束节点,就可以恢复指定时间段的数据了。

4、第四步

在bin目录,输入以下命令(不要有换行):

./my2sql -user root -password 123456 -host 127.0.0.1 -port 3308
-mode file -local-binlog-file ./mysql-bin.000038  -work-type 2sql
-start-file mysql-bin.000038  -start-pos 606463342  -
stop-file mysql-bin.000038 -stop-pos 651675557  -output-dir ./tmpdir

说明:

./my2sql -user '账号' -password '密码' -host 'ip (bin 目录就是127)' -port '端口'  -mode file -local-binlog-file ./'binlog 文件名'  -work-type 2sql  -start-file 'binlog 文件名'  -start-pos '开始节点(节点数字在binlog日志中有)'  -stop-file 'binlog 文件名' -stop-pos '结束节点(节点数字在binlog日志中有)'  -output-dir ./tmpdir

执行成功后,会将 binlog 文件中对应节点的 sql 语句提取到文件中,我本次共生成了三个文件,分别为 biglong_trx.txt 、binlog_status.txt 、forward.38.sql

文件说明:
biglong_trx.txt:
该文件没什么内容,没去深入了解,没什么用,暂不关注。
binlog_status.txt:
该文件是说明 binlog 文件的DML统计信息,比如开始节点到结束节点中,都执行了哪些 sql ,什么时候执行的,执行了什么操作,影响了几行数据,什么执行结束的。
forward.38.sql:
该文件存的是从 binlog 中提取出来的 sql 语句,这个语句是可以在数据库中执行的sql文件。

5、第五步

将提取出的文件,在文本编辑器中打开,检查对应的 sql 是否正确且完整,要注意 delete 与 rollback语句

6、 第六步

sql 审查没问题了,然后在库里面将 sql 文件执行下就好了,推荐使用 navicat 15 工具,选运行 sql 文件来执行sql,到此,数据就算恢复完成了。

结束语:

涉及正式数据一定要慎重,请不要在生产环境执行任何修改生产环境的 sql 脚本,要定期备份,或者做主从复制的模式,主机只对应用程序开放连接,其余需要数据库的,都连接从库。
附一个 my2sql 工具详解的博客地址,有兴趣的可以了解一下 my2sql 工具。
地址:https://blog.csdn.net/liuhanran/article/details/107425016


mysql 数据库数据恢复 库被删了怎么恢复数据库相关推荐

  1. mysql整备_【mysql】使用xtrabackup在线增量备份及恢复数据库

    一.Percona Xtrabackup 简介 1.Xtrabackup  bin目录文件 介绍 1)innobackupex innobackupex 是xtrabackup的一个符号链接 . in ...

  2. mysql主库从库在同一台服务器_MySQL_MySQL 数据库两台主机同步实战(linux),当一个从服务器连接到主服务 - phpStudy...

    MySQL 数据库两台主机同步实战(linux) 当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器 ...

  3. mysql主库从库在同一台服务器_mysql数据库从一台服务器迁移到另一台服务器上...

    一.应用场景 由于要把测试服务器上的数据库迁移到正式服务器上,因此需要做数据库的迁移.这里记录一下. 二.数据库迁移 1.新建数据库test create database test; 1 2.进入数 ...

  4. mysql中毒_2020-10-15 MYSQL中勒索病毒解密 .help 病毒解密恢复 数据库中.help 解密恢复 服务器被加密解密恢复...

    数据类型 SQL 2005 for MYSQL 5.6 数据大小 10 GB 故障检测 服务器被勒索病毒加密, 文件被添加 .help 扩展名 修复结果 直接从加密的数据库处理完成恢复,数据恢复率达9 ...

  5. oracle重新恢复数据库,重新安装oracle根据原数据文件恢复数据库

    个人重新安装系统,数据文件保留,在重新安装oracle 后,需要根据现有文件恢复现有数据库. 假设我的数据库数据文件在D:\oracle\product\10.2.0\oradata\orcl\目录下 ...

  6. linux postgres恢复数据库,从纯文本格式的备份文件恢复数据库

    六.从纯文本格式的备份文件恢复数据库 下面我们详细介绍如何使用psql程序从一个纯文本格式的备份文件恢复数据库. 注意:如果您使用的是Postgres Plus Advanced Server的话,那 ...

  7. mysql主库从库在同一台服务器_MySQL数据库的主从配置(多主对一从)

    一.实验环境部署 主服务器 192.168.18.42 端口3306  ==> 从服务器 192.168.18.44 端口 3306 主服务器 192.168.18.43 端口3306  ==& ...

  8. mysql查询当前库的实例名_oracle查询数据库名、实例名等

    oracle中: 1.查询数据库名:select name,dbid from v$database;或者show parameter db_name; 2.查询实例名:select instance ...

  9. hive查看数据库里库的信息_hive 查看当前数据库

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  10. mysql数据库压缩备份_Mysql备份压缩及恢复数据库方法总结

    一般情况我们通过mysqldump来备份MySQL数据库,并上传至其它备份机器.如果数据库比较大,在备份传输的时候可能会慢,所以我们尽量让备份的文件小一些. 在写自动备份脚本时,最好把备份结果直接压缩 ...

最新文章

  1. 美国防部用AI消除“战争迷雾”,机器人、无人机全上阵
  2. ai如何旋转画布_Ai绘制科技感晶格球体!
  3. 杨建:网站加速--内容简介
  4. Spring Boot SLF4J日志实例
  5. 线性代数拾遗(一):线性方程组、向量方程和矩阵方程
  6. UI设计素材模板|社交新媒体,可编辑套件
  7. 算法专题(一)1.1 希尔排序,快速排序
  8. APS生产计划排程系统优化方案
  9. landsat 8 卫星 波段介绍 及组合
  10. 如何完全清除微信聊天记录
  11. 【程序员如何买股票 二】 A股证券账户开户
  12. 记录win10无法通过IE浏览器设置受信任的站点的几种方法
  13. 华为云-- 消息通知服务(SMN)
  14. day29 | 黑马程序员Java全程笔记 | 第二阶段MySQL高级事务-索引-视图-触发器-存储过程
  15. 基于51单片机的4位竞赛抢答器的设计
  16. 苏世民,我的经验和教训(一)
  17. 如何去除Word中的波浪线?这三种方法很实用!
  18. Unity3D 2021.1.1F1。更新与下载。
  19. 【2018年广东工业大学文远知行杯新生程序设计竞赛】灰暗而空虚的景色β
  20. Columbia Biosciences 山羊抗美洲驼 IgG:SureLight APC

热门文章

  1. 微信java版s40_塞班微信S40版下载 v1.0 Beta-symbian微信S40版-pc6下载站
  2. 让你的Windows系统时光倒流
  3. spring切点表达式提取jdk版本与aspectjweaver版本不匹配
  4. 我从Web前端开发转到网页游戏开发
  5. 通过 DataEase 获取 API 数据完成项目周报分享
  6. Windows操作系统发展简史
  7. Android UI 控件
  8. linux的dlan脚本,Linux下的DLNA播放器源码
  9. 【解决】Git:hint:Pulling without specifying how to reconclie divergent branches is...
  10. 基于3D关节点的人体动作识别综述