mysql数据库(表)误删恢复

mysql数据库(表)误删恢复

1. 检查mysql服务是否开启binlog

# 查看是否开启binlog日志
show variables like '%log_bin%';

看下图结果.如果这里是OFF那就不用看下去了.本文帮助不了
在这里插入图片描述

2.开启binlog日志(已开启略过)

1、编辑打开mysql配置文件 ***/my.cnf在

[mysqld]区块添加

log-bin=mysql-bin(也可指定二进制日志生成的路径,如:log-bin=/opt/Data/mysql-bin)
    server-id=1

binlog_format=MIXED(加入此参数才能记录到insert语句)

3.查看binlog日志记录位置

# 查看日志记录位置
show variables like '%datadir%';

直接去结果里面就能

4.常用binlog查询方式

# 查看所有日志文件
show master logs;
# 查看日志状态
show master status;
# 查看指定日志的事件(xxx自行替换到自己的文件名)
show binlog events in 'xxx-bin.0000xx';

5.备份当前数据库

整个库都删了当我没说.直接开始后面操作.如果只是删除了当前表.就先备份当前数据库.其实没啥用.但是咧.就怕手残再有失误,不手残就不会误删表,有备份就TM直接还原了也看不到这…-_-!
反正有备份就在开始下面操作.

6.操作binlog

1.先去上面第三点说的日志文件存放位置找到目录.
2.然后找到xxx-bin.0000xx这类文件
3.不要这么死板找固定名字.理论上这个文件多数人都不一样.然后就是看日期.
4.每次mysql服务重启都会截断日志.重新生成一个新的.找到最后更新日期那个就没错了

# 截断当前日志,后续日志生成一个新的编号binlog文件
flush log
1. 查看binlog日志

binlog文件是二进制的.无法直接打开.什么vim.txt.notepad.啥啥啥都不行.不要浪费功夫找工具尝试打开这种文件.

  1. 直接去找到mysqlbinlog.exe (一般都在mysql的安装目录.找不到全局搜就行了.)
  2. 找到之后命令行去到当前目录,mysqlbinlog.exe D:/mysql/WMANG-bin.000020 (window就.exe.linux就不带)
  3. 这种查看日志少的话还好.多的话直接刷屏.不要等刷完直接ctrl+c了.能看部分.其实看了意义也不大…
  4. 推荐sql直接查
# a、IN 'log_name':指定要查询的binlog文件名(不指定就是第一个binlog文件)
# b、FROM pos:指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
# c、LIMIT【offset】:偏移量(不指定就是0)
# d、row_count :查询总条数(不指定就是所有行)
show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

# 查看当前日志的所有事件以及pos
show binlog events in 'xxx-bin.00000xxx';

7 开始恢复数据

可以先把xxx-bin.00000xxx 拷贝到自己的目录去操作.

1. 根据时间恢复(简单粗暴)

估算误操作的事件.实在不记得可以给个大概.数据要求高的就用后面定位的方法

# 运行日志恢复.从2018-11-12 09:00:00开始到2023-12-5 17:00:00 结束事件.开始时间不知道给个比较靠前的就行.反正你当前的文件肯定不会早于这个时间,database指定要操作的数据库.否则会操作所有数据库.mysql后面就是常规登录信息
mysqlbinlog.exe  --start-datetime="2018-11-12 09:00:00" --stop-datetime="2023-12-5 17:00:00" D:/mysql/xxx-bin.00000xxx  --skip-gtids=true --database=mom_ls_test | mysql -uroot -S D:/mysql/logs/mysql.sock -p123456 -v
2. 根据事件定位恢复(简单粗暴)

估算误操作的事件.实在不记得可以给个大概.数据要求高的就用后面定位的方法

# 运行日志恢复.从当前日志位置号0开始,执行到343299346位号.database指定要操作的数据库.否则会操作所有数据库.mysql后面就是常规登录信息
mysqlbinlog.exe  --start-position="0" --stop-position="343299346" D:/mysql/xxx-bin.00000xxx  --skip-gtids=true --database=mom_ls_test | mysql -uroot -S D:/mysql/logs/mysql.sock -p123456 -v

需要注意的是.此期间的过程需要包含你插入数据的日志.如果没有.只能往前推.按xxx-bin.00000xxx 后几位是顺序号.找到之前的文件.从起点开始操作,如果你时间跨度很长,那就有的搞了.

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值