删库不跑路之Mysql数据恢复

数据恢复

前言:既然要恢复,肯定要先备份,如何备份看这篇MySQL数据库备份

全库恢复

  • 先找到需要恢复的数据,解压出来
gunzip miaosha-202008061026.sql.gz
  • 使用解压出来的文件,将数据恢复到指定的新数据库中
方式一,linux命令行下:
mysql -uroot -p db2 < miaosha-202008061026.sql

方式二,mysql命令行下:
source miaosha-202008061026.sql

单表恢复

  • 方式一,使用MySQL数据库备份中的3.对指定表进行备份方式生成的表备份来恢复
mysql -uroot -p db2 < table_backupData.sql
  • 方式二,使用MySQL数据库备份中的4.使用-tab备份到指定目录方式生成的表结构和表数据进行恢复
    注意:这里需要进入mysql命令行
#导入表结构
source /usr/local/backupData/goods.sql
#导入表数据
load data infile '/usr/local/backupData/goods.txt' into table goods;

单表中的差异恢复

  • 新建数据库,将数据恢复到指定的新数据库中(注意:要恢复到同一台主机的mysql实例下)
    此方式一般针对的是误操作造成的数据差异,通过对两个库中的表的查询,查处差异数据,然后进行恢复
    因为是针对某个表的数据的某些数据行进行恢复,数据量很少的情况下,可以用insert into select 来进行恢复,
方式一:
insert into miaosha.goods (id, goods_name,goods_title,goods_img,goods_detail,goods_price,goods_stock) 
select o.* from db2.goods o  
Where not exists(select 1 from miaosha.goods g where o.id = g.id);

方式二:
insert into miaosha.goods (id, goods_name,goods_title,goods_img,goods_detail,goods_price,goods_stock)
select o.* from db2.goods o  
left join miaosha.goods g on o.id = g.id 
where g.id is null;

指定某一时间点的数据恢复

此方式一般针对的是误操作造成的数据差异,需要把数据恢复到误操作的时间节点
前提:要有上次数据库的全备,并且开启了binlog日志,有上次全备时到现在的所有binlog日志
简单分析下:我们需要先将数据库恢复到上一次备份节点,节点后面的数据就使用来进行恢复

  • 1.先将数据库恢复到上一次备份节点
mysql -uroot -p miaosha < miaosha-202008061026.sql
  • 2.找到上次备份节点的二进制日志的文件名和时间点
more miaosha-202008061026.sql

在这里插入图片描述

  • 3.找到现在的binlog日志
    进入位置
cd /var/lib/mysql/

在这里插入图片描述

注意:binlog存放的位置,可能不一样,可通过下面命令查到

show variables like 'general_log_file';

在这里插入图片描述

  • 4.使用mysqlbinlog对日志进行分析
mysqlbinlog --base64-output=decode-rows -vv --start-position=155 --database=miaosha binlog.000005 | grep -B3 DELETE | more

在这里插入图片描述

  • 5.把两个节点间的数据导出到文件
mysqlbinlog --start-position=155 --stop-position=363439 --database=miaosha binlog.000005 > miaosha_diff.sql
  • 6.把差异数据导入
mysql -uroot -p miaosha < miaosha_diff.sql 

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值