背景
环境:MariaDB数据库,存储引擎InnoDB
数据库名:douniu
损坏方式:不明
备份情况:有一个表结构的备份,没有开启binlog
结果:可以启动、登录,无法对表执行select/desc/drop等操作
方案
1. 在一个新的server(我的是centos6)上创建一个mysql5.6 建议使用rpm安装(简单)具体安装自行百度,因为5.6版本较高,且默认使用每个表独享数据文件
2. 登录并创建douniu数据库
createdatabase douniu;
3. 创建备份的表结构
usedouniu
sourcexxxxx;
4. 导出要恢复的表的数据文件作为备份(新创建的)例如tb_game_result.ibd
5. 分离舍弃表空间文件
altertable tb_game_result discard tablespace;
6. 使用ue查看导出的新的tb_game_result.ibd查看第三行的第三列和第五列
或者使用下面的命令在linux操作系统查看
hexdump -C tb_game_result.ibd |head -n 3 |tail -n 1|awk'{print $6$7}'
7. 替换space id
使用ue打开老的tb_game_result.ibd,把刚刚看到的00 和10替换到老的文件里
8. 把修改后的tb_game_result.ibd文件上传至服务器
9. 修改文件的owner和权限,我这里是mysql
chownmysql.mysqltb_game_result.ibd
chmod660tb_game_result.ibd
10. 导入表空间文件
altertable tb_game_result importtablespace;
11. Test
select * from tb_game_result;
转载请保留以下内容:
本文来源自天善社区老头子博客,
原文链接:https://ask.hellobi.com/blog/azzo/6219