【mysql】mysql之数据误删恢复

2024-09-04 17:20

本文主要是介绍【mysql】mysql之数据误删恢复,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》从问题中去学习k8s

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

《DBA》db的介绍使用(mysql、redis、mongodb...)

数据误删除恢复流程

前期介绍

1.正在运行的网站系统,MySQL数据库,数据量25G,日业务增量10-15M。
2.备份策略:每天23:00,计划任务调用mysqldump执行全备脚本 	
3.故障时间点:上午10点开发人员误删除一个核心业务表,如何恢复?

思路

1.停库,避免二次伤害
2.创建新库
3.倒入前一天的全备
4.通过binlog找到前一天23:00到第二天10点之间的数据
5.导入找到的新数据
6.恢复业务(A和B两种方式,按照实际环境选取其一方式即可)a.直接使用临时库顶替原生产库,前端应用割接到新库(数据量特别大的时候)b.将误删除的表单独导出,然后导入到原生产环境(数据量小的时候)

环境模拟

ip主机名角色
172.16.1.50db01误删除表主机
172.161.51db02迁移主机
环境准备
# 1. 查看db01主机数据库信息
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| student            |
| test               |
+--------------------+# 2. 查看student表信息
mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| student           |
+-------------------+mysql> select * from student;
+----+-----------+-----+--------+---------------------+
| id | name      | age | gender | cometime            |
+----+-----------+-----+--------+---------------------+
|  1 | 戴佳栋    |  23 | M      | 2020-07-15 06:59:15 |
|  2 | 王张行    |  28 | M      | 2020-07-15 06:59:49 |
|  3 | 王启涵    |  24 | M      | 2020-07-15 07:00:16 |
|  4 | 陈建清    |  21 | M      | 2020-07-15 07:00:38 |
|  5 | 高松平    |  21 | M      | 2020-07-15 07:00:57 |
|  6 | 老掉牙    |  22 | F      | 2020-07-15 07:01:12 |
+----+-----------+-----+--------+---------------------+# 3. 模拟23点执行全量备份
[root@db01 ~]# mysqldump -A -R --triggers --master-data=2 --single-transaction > /tmp/full.sql# 4. 模拟23点全量备份后的数据写入()
mysql> insert into student values(7,'龚晓廖',88,'F','now()');
mysql> insert into student values(8,'好大',44,'F',now());
mysql> insert into student values(9,'邱导',33,'F',now());# 5. 查看数据
mysql> select * from student;
+----+-----------+-----+--------+---------------------+
| id | name      | age | gender | cometime            |
+----+-----------+-----+--------+---------------------+
|  1 | 戴佳栋    |  23 | M      | 2020-07-15 06:59:15 |
|  2 | 王张行    |  28 | M      | 2020-07-15 06:59:49 |
|  3 | 王启涵    |  24 | M      | 2020-07-15 07:00:16 |
|  4 | 陈建清    |  21 | M      | 2020-07-15 07:00:38 |
|  5 | 高松平    |  21 | M      | 2020-07-15 07:00:57 |
|  6 | 汤采玉    |  22 | F      | 2020-07-15 07:01:12 |
|  7 | 龚晓廖    |  88 | F      | 0000-00-00 00:00:00 |
|  8 | 好大      |  44 | F      | 2020-07-22 15:14:07 |
|  9 | 邱导      |  33 | F      | 2020-07-22 15:14:45 |
+----+-----------+-----+--------+---------------------+
故障重现
# 1.模拟误删除表student
mysql> drop table student;# 2. 查看student表已经不存在
mysql> show tables;
Empty set (0.00 sec)
故障恢复(A方案)
# 1.因核心表已删除,停止数据库对外服务
[root@db01 tmp]# systemctl stop mysqld# 2.使用新的临时库db02替代生产库,前段业务割接到新库(将全备数据拷贝到db02)
[root@db01 tmp]# scp full.sql root@172.16.1.52:/tmp# 3.找到二进制日志中全备23点后到删除数据前的数据,并且导出(查看日志,找到位置点)
[root@db01 data]# mysqlbinlog -d student --start-position=2728 --stop-position=3421 mysql-bin.000001 > /tmp/new.sql# 4.将二进制导出数据拷贝到db02
[root@db01 tmp]# scp new.sql root@172.16.1.52:/tmp# 5.在db02中将全备数据导入(在db02数据库启动后操作)
mysql> source /tmp/full.sql# 6.查看全备导入数据
mysql> select * from student;
+----+-----------+-----+--------+---------------------+
| id | name      | age | gender | cometime            |
+----+-----------+-----+--------+---------------------+
|  1 | 戴佳栋    |  23 | M      | 2020-07-15 06:59:15 |
|  2 | 王张行    |  28 | M      | 2020-07-15 06:59:49 |
|  3 | 王启涵    |  24 | M      | 2020-07-15 07:00:16 |
|  4 | 陈建清    |  21 | M      | 2020-07-15 07:00:38 |
|  5 | 高松平    |  21 | M      | 2020-07-15 07:00:57 |
|  6 | 汤采玉    |  22 | F      | 2020-07-15 07:01:12 |
+----+-----------+-----+--------+---------------------+# 7. 将二进制产生数据导入
mysql> source /tmp/new.sql# 8. 查看二进制后的数据(误删除表的数据已经恢复)
mysql> select * from student;
+----+-----------+-----+--------+---------------------+
| id | name      | age | gender | cometime            |
+----+-----------+-----+--------+---------------------+
|  1 | 戴佳栋    |  23 | M      | 2020-07-15 06:59:15 |
|  2 | 王张行    |  28 | M      | 2020-07-15 06:59:49 |
|  3 | 王启涵    |  24 | M      | 2020-07-15 07:00:16 |
|  4 | 陈建清    |  21 | M      | 2020-07-15 07:00:38 |
|  5 | 高松平    |  21 | M      | 2020-07-15 07:00:57 |
|  6 | 汤采玉    |  22 | F      | 2020-07-15 07:01:12 |
|  7 | 龚晓廖    |  88 | F      | 0000-00-00 00:00:00 |
|  8 | 好大      |  44 | F      | 2020-07-22 15:14:07 |
|  9 | 邱导      |  33 | F      | 2020-07-22 15:14:45 |
+----+-----------+-----+--------+---------------------+# 9. 因将数据库迁移,所以在前端业务中需将数据库地址重新指定
故障恢复(B方案)
# 此操作仅针对数据量级别不大环境,因删除数据只有一个表,所以只需要将全备单独导入到db02,然后将误删除表单独拿出来备份,就实现了十一点前对数据库的恢复,再将二进制数据导出,就就实现了十一点后的数据恢复。# 1.将全备数据拷贝致db02
[root@db01 tmp]# scp new.sql root@172.16.1.52:/tmp# 2. 针对删除的student表进行备份
[root@db02 tmp]# mysqldump student student > /tmp/student.sql# 3. 将数据student表的备份转移到db01
[root@db02 tmp]# scp student.sql root@172.16.1.51:/tmp# 4. 在二进制数据中找到数据起始点,导出数据
[root@db01 data]# mysqlbinlog -d student --start-position=2728 --stop-position=3421 mysql-bin.000001 > /tmp/new.sql# 5. 进入数据库student中,导入数据,实现对十一点前数据的还原
mysql> source /tmp/student.sql# 6. 将二进制数据导入,实现十一点后的数据还原
mysql> source /tmp/new.sql# 7. 查看数据(已成功恢复)
mysql> select * from student;
+----+-----------+-----+--------+---------------------+
| id | name      | age | gender | cometime            |
+----+-----------+-----+--------+---------------------+
|  1 | 戴佳栋    |  23 | M      | 2020-07-15 06:59:15 |
|  2 | 王张行    |  28 | M      | 2020-07-15 06:59:49 |
|  3 | 王启涵    |  24 | M      | 2020-07-15 07:00:16 |
|  4 | 陈建清    |  21 | M      | 2020-07-15 07:00:38 |
|  5 | 高松平    |  21 | M      | 2020-07-15 07:00:57 |
|  6 | 汤采玉    |  22 | F      | 2020-07-15 07:01:12 |
|  7 | 龚晓廖    |  88 | F      | 0000-00-00 00:00:00 |
|  8 | 好大      |  44 | F      | 2020-07-22 15:14:07 |
|  9 | 邱导      |  33 | F      | 2020-07-22 15:14:45 |
+----+-----------+-----+--------+---------------------+

 

这篇关于【mysql】mysql之数据误删恢复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136550

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间