-- 这里要还原的表名为 test_table -- 1建库,并选中库,库名随意 -- 2查看InnoDB 引擎独立表空间是否开启 SHOW VARIABLES LIKE '%per_table%' ; -- 3设置InnoDB 引擎独立表空间开启,这样data目录下新建的表都会有对应的.ibd数据文件 SET GLOBAL innodb_file_per_table=1 ; -- 4建表 CREATE TABLE `test_table` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `openid` VARCHAR(28) DEFAULT NULL, `prize_id` INT(11) DEFAULT '0' COMMENT '奖品id,默认0未中奖', `prize_name` VARCHAR(100) DEFAULT NULL COMMENT '奖品名称', `type_id` TINYINT(4) DEFAULT '0' COMMENT '类别默认0', `username` VARCHAR(50) DEFAULT NULL COMMENT '用户名', `phone` VARCHAR(15) DEFAULT NULL COMMENT '手机号', `province` VARCHAR(50) DEFAULT NULL COMMENT '省', `city` VARCHAR(100) DEFAULT NULL COMMENT '市', `address` VARCHAR(255) DEFAULT NULL COMMENT '详细地址', `add_time` INT(11) DEFAULT NULL COMMENT '添加时间', `update_time` INT(11) DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 ; -- 5 使当前ibd 的数据文件和frm 分离 ALTER TABLE test_table DISCARD TABLESPACE ; -- 6将备份的ibd文件覆盖当前表的ibd -- 7 加载关联新ibd文件 ALTER TABLE test_table IMPORT TABLESPACE -- 这一步可能报错,查看错误日志,本地设置的是.err文件 -- InnoDB: Error: tablespace id and flags in file './data/test_table.ibd' are 2170 and 0, but in the InnoDB -- InnoDB: data dictionary they are 1 and 0. -- 原因是,服务器上的表空间ID 为2170 本地新建的表空间ID为1,所以导致这个错误发生,解决办法是:让他们的表空间ID一致,即在本地不断的创建删除 test_table 表。 ; -- 可在程序里循环执行如下两句,直到本地和线上数据库上该表的表空间ID一致 -- CREATE TABLE test_table (id INT) ENGINE=INNODB -- DROP TABLE `test_table` -- 最后删除表后重新从第4步开始执行 -- 8查看表数据,如果报错则找到my.ini文件 -- 查找有无innodb_force_recovery这一属性,如果没有则在最下一行添加 innodb_force_recovery=1 还报错的话就修改值2,3,4,5等,直到可以正确查看表数据为止 -- 9 可以查看表后立即导出sql文件,再把my.ini文件中innodb_force_recovery属性值改回默认的0,或注释掉(默认值也是0)