zoukankan      html  css  js  c++  java
  • mysql如何通过单个ibd文件进行数据恢复

    ####################################

    需求场景:

           业务误操作时刻在路上,那么数据恢复是件常见的事,我们通常通过innobackupex或xtrabackup进行数据库实例的全量备份,遇到需要进行数据恢复时,我们就将该备份拷贝到测试机上进行恢复,这对于一般的中小型数据库实例而言,拷贝数据花不了多少时间,还是很方便的,

    但是当数据库实例的数据量很大时,这个时候拷贝几百G,甚至几个T的数据,则是非常耗时。那么能不能只拷贝误操作的那几张表的数据呢,答案是可以,通过拷贝误操作的那几张表的ibd文件即可完成,下面就通过ibd文件进行数据恢复。[前提是数据库实例开启了每张表都是一个独立表空间,即查看这个全局变量:innodb_file_per_table=1]

    假设线上集群的实例为10.10.10.11:3306,备份机所在机器为10.10.10.22,业务误操作了线上apple库的ipad表,测试机的mysql实例为10.10.10.33:3306

    1,登录10.10.10.11:3306,查看apple.ipad表的表结构,同时预估一下数据量:

    mysql> show create table apple.ipad G;
    
    mysql> select count(*)  from apple.ipad ;

    2,在测试机实例10.10.10.33:3306上创建相同的库和表,即创建apple和ipad表:

    mysql> create  database apple;
    
    mysql> use apple;
    
    mysql> create table ipad (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(255) NOT NULL,address varchar(255) NOT NULL,blob_name blob,PRIMARY KEY (id),KEY idx_name (name)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4; # 执行后会在apple数据库目录下面新增两个文件:ipad.ibd和ipad.frm文件

    mysql> alter table ipad discard tablespace; # 执行后,该实例的apple库的ipad表只剩下数据定义文件ipad.frm,表空间文件ipad.ibd已被删除

    3,拷贝备份机10.10.10.22上备份对应的表空间文件apple/ipad.ibd到测试机10.10.10.33:3306的apple数据库目录下:

    # 任意地方均可执行,网络通即可:
    
    shell> scp  work@10.10.10.22:/home/work/2021/data/apple/ipad.ibd   work@10.10.10.33:/home/work/mysql_3306/data/apple/
    
    # 在测试机10.10.10.33上执行:
    
    shell> chown -R work:work   /home/work/mysql_3306

    # 如果是拷贝正在运行的实例上的ibd文件则需要在该实例上执行: mysql> flush tables;lock tables apple.ipad  read;

    4,登录测试机10.10.10.33::3306导入表空间数据:

    mysql> alter table apple.ipad  import tablespace;

     5,经过上面4个步骤已经将误操作的表的备份加载到了测试机上的数据库实例中,如果还需要将其恢复到该备份时刻后面的任意一刻,则需要通过配置复制过滤到线上集群的实例,且线上集群的某个实例在该备份时刻后到现在的的binlog还存在,这个步骤就省略了

     

    #########################

    igoodful@qq.com
  • 相关阅读:
    [开心一笑]学妹写的函数
    Silverlight Fundamentals
    北京火车订票电话一览
    Silverlight 2 RTW tomorrow and more goodness
    [转]什么是“29岁现象”?
    看起来很像算法问题的CSS问题
    火狐不支持innerText的解决办法
    纯JS的表单邮件发送
    抽取思维(重构设计)
    不定长参数作用
  • 原文地址:https://www.cnblogs.com/igoodful/p/15234608.html
Copyright © 2011-2022 走看看