表空间替换的数据恢复方式

恢复单表或单库数据:
第一步:     
  1、在禁用表空间前后增加外键约束关闭和开启
     set foreign_key_checks = 0;
     alter table tab_name discard tablespace;
     ....
     set foreign_key_checks = 1;
   2、单库:
    set foreign_key_checks = 0;
    select concat('alter table ', table_name, ' discard tablespace;') from information_schema.tables where table_schema='db_name';
    set foreign_key_checks = 1;
第二部:

将对应的tab_name.ibd文件拷贝到目标服务器数据目录下,修改文件权限
     chown u:g file

第三步:
  1、单个表导入表空间
     alter table tab_name import tablespace;
  2、单库导入表空间
     select concat('alter table ', table_name, ' import tablespace;') from information_schema.tables where table_schema='db_name';

可能出现问题:
    1.mysql 1808错误:这是由于mysql 5.6的文件恢复到mysql 5.7版本导致的错误,需要在建表语句后面添加ROW_FORMAT=COMPACT

    2.mysql 1812错误:copy的ibd文件没有赋权,用chown u:g file

    3.mysql 1451错误: Cannot delete or update a parent row: a foreign 
    在前后加上
        SET foreign_key_checks = 0; -- 先设置外键约束检查关闭
        SET foreign_key_checks = 1; -- 开启外键约束检查,以保持表结构完整性

    4、因为表的ID在新旧环境上不一样导致的话,可以通过命令进行重新操作,如日志中显示旧表ID为15,新的环境上为13的话,可以修对该表进行DDL操作,增加
       ID : alter table tab_name rename to tab_name1;
                alter table tab_name1 rename to tab_name; 
就可以保持新旧一样的ID,这个错误在新环境上有可能不会触发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值