数据库根据.frm、.ibd文件恢复数据

1、把数据库格式从类似的数据库结构中同步到本地数据库,本地数据库行格式是:Dynamic的,备份的数据是Compact的
需要把同步的数据库表的行格式批量改成Compact格式;
快速修改mysql数据库行记录格式ROW_FORMAT_sql row fromat-CSDN博客
SELECT
    CONCAT( "ALTER TABLE `", table_schema, "`.`", table_name, "` ROW_FORMAT =COMPACT ;" ) 
FROM
    information_schema.TABLES 
WHERE
    table_schema IN ( '数据库名称' );
批量获取修改命令运行;
2、关闭数据库,在本地数据库data中搜素.ibd文件,批量删除,把备份的.ibd文件拷贝到数据表中
3、开启数据库,获取改变表空间命令,运行,就可以恢复数据了
//批量获取改变表空间命令
public function b(){
    $path = 'D:/phpstudy_pro/Extensions/MySQL5.7.26/data/*';//获取数据库目录
    if(file_exists($path)){
       $files = glob($path.'/*.frm');//获取frm类型文件
       foreach ($files as $v){
           $filename = basename($v,".frm");//获取文件名
           $a = 'ALTER TABLE '.$filename.' IMPORT TABLESPACE;<br/>';//改表空间
           print($a);
       }
    }
}

如果出现ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes

把索引去掉,恢复数据后,再改为ROW_FORMAT =DYNAMIC手动添加索引

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值