MySQL误删数据快速恢复

烟雨 3年前 (2023-04-05) 阅读数 17581 #MySQL
文章标签 MySQL

第一步

保证mysql已经开启binlog,查看命令

-- 查看binlog是否开启
show variables like '%log_bin%';
-- 查看binlog存放日志文件目录
show variables like '%datadir%';

image.png

第二步

进入binlog文件目录,找出日志文件

image.png

第三步

切换到mysqlbinlog目录

image.png

当线上数据出现错误的时候首先可以询问具体操作人记录时间点,这个时候可以借助mysql自带的binlog解析工具mysqlbinlog(具体位置在mysql安装目录**/mysql/bin/下)

第四步

通过mysqlbinlog工具命令查看数据库增删改查记录(必须切换到mysqlbinlog目录才有效)

例子1

查询2023-04-02 09:00:00到2023-04-02 20:00:00 数据库为test的操作日志,输入如下命令将数据写入到一个备用的txt文件中

mysqlbinlog --no-defaults --database=test --start-datetime="2023-04-02 09:00:00" --stop-datetime="2023-04-02 20:00:00" 
/data/mysql/mysql-bin.000015 > template_coupon_tb_product_category.txt

例子2

查询2023-04-02 09:00:00到2023-04-02 20:00:00 数据库为test的操作日志,并输出到屏幕上

mysqlbinlog --no-defaults --database=test --start-datetime="2023-04-02 09:00:00" --stop-datetime="2023-04-02 20:00:00" 
/data/mysql/mysql-bin.000015   |more

例子3

查询2023-04-02 09:00:00到2023-04-02 20:00:00 数据库为test的操作日志,并且过滤出 只包括template_coupon_tb_product_category表数据的操作记录 ,输入如下命令将数据写入到一个备用的txt文件中

mysqlbinlog --no-defaults --database=test --start-datetime="2023-04-02 09:00:00" --stop-datetime="2023-04-02 20:00:00" 
/data/mysql/mysql-bin.000015 | grep template_coupon_tb_product_category > template_coupon_tb_product_category.txt
mysqlbinlog 命令的语法格式:
mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名
--------------------------------------------------------
常用参数选项解释:
--start-position=875 起始pos点
--stop-position=954 结束pos点
--start-datetime="2023-9-25 22:01:08" 起始时间点
--stop-datetime="2023-9-25 22:09:46" 结束时间点
--database=zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)
-------------------------------------------------------- 
不常用选项: 
-u --user=name 连接到远程主机的用户名
-p --password[=name] 连接到远程主机的密码
-h --host=name 从远程主机上获取binlog日志
--read-from-remote-server 从某个MySQL服务器上读取binlog日志

然后利用第四步输出的sql语句或者txt文本进行语句过滤,重新插入数据或更新数据。

版权声明

非特殊说明,本文由Zender原创或收集发布,欢迎转载。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

作者文章
热门