博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql通过ibd恢复数据
阅读量:4585 次
发布时间:2019-06-09

本文共 2828 字,大约阅读时间需要 9 分钟。

参考文档 http://www.cnblogs.com/logo-fox/p/6210533.html

数据库只剩  数据库目录中的 .frm 和 .ibd文件 时候的修复

.frm  表结构

.ibd  表的元数据

下面从已经拥有表结构开始恢复

1 新建一个表(test库),将表结构导入表中,此时,表只有表结构,没有数据

2 分离表,ALTER TABLE  tbname DISCARD TABLESPACE;

此时表tbname 的ibd文件会被删除(数据库的数据存储目录 ,默认为/var/lib/mysql)

3 将保存有数据的ibd文件复制到数据库目录的下相应的库中(/var/lib/mysql/test/)

修改新复制的ibd文件权限,chown mysql:mysql * 

4  恢复表  ALTER TABLE tbname IMPORT TABLESPACE; 

正常情况下不会报错,但是如果报这个

Schema mismatch (Table has ROW_TYPE_COMPACT row format, .ibd file has ROW_TYPE_DYNAMIC row format

表类型错误,在传建表时候 加上这个  ROW_FORMAT=DYNAMIC; 

或者 alter table tb_name row_format=DYNAMIC; 

然后再执行  ALTER TABLE tbname IMPORT TABLESPACE; 

5 如果还不成功可能是数据库版本的问题。我在5.6上执行时报这样的错

换在5.7上执行 import 时 报 lost connection to mysql server during query

此时数据已经恢复。

一下示例一个批量恢复数据库的简单脚本

#!/usr/bin/bash#数据库的批量恢复#在MySQL5.6及以下版本中恢复失败的话请在5.7版本中尝试。#此恢复方式仅适用于innodb引擎。#将此脚本与#(1)含有表结构的sql文件#(2)需要恢复的城市区县的IBD文件放在一起# 需要恢复的区县名称city=(hengyangxianqidong)#数据库的存储目录,在数据库的配置文件my.cnf中[mysqld]下的datadir配置dbpath=/usr/local/mysql/data/#数据库用户dbuser=root#数据库密码dbpd=123456#存储恢复数据的数据库名称#最好新建一个库用来专门存储恢复的数据# create database  yy default character set utf8; dbname=yy#判断命令是否执行成功reback(){if [ $? = 0 ]; then    echo -e "\033[32;1m 【 执行成功 】 \033[0m"else    echo -e "\033[31;1m 【 执行失败 】 \033[0m"    exit 1fi}#判断恢复数据库所需文件是否缺失for c in ${city[@]};do    if [ ! -f v9_${c}.sql ];then         echo -e "\033[31;1m 【 v9_${c}.sql 文件不存在 】 \033[0m"        exit 1    fi    if [ ! -f v9_${c}_data.sql  ];then         echo -e "\033[31;1m 【 v9_${c}_data.sql 文件不存在 】 \033[0m"        exit 1    fi    if [ ! -f v9_${c}.ibd ];then         echo -e "\033[31;1m 【 v9_${c}.ibd 文件不存在 】 \033[0m"        exit 1    fi    if [ ! -f v9_${c}_data.ibd ];then         echo -e "\033[31;1m 【 v9_${c}_data.ibd 文件不存在 】 \033[0m"        exit 1    fi        done# 导入表结构,并且分离表for c in ${city[@]};do        mysql -u$dbuser -p$dbpd $dbname < v9_${c}.sql    echo -e "\033[36;1m 【 导入表 v9_${c} 结构 】 \033[0m"    reback    mysql -u$dbuser -p$dbpd $dbname < v9_${c}_data.sql    echo -e "\033[36;1m 【 导入表 v9_${c}_data 结构 】 \033[0m"    reback    mysql -u$dbuser -p$dbpd -e "use $dbname ; ALTER TABLE v9_${c} DISCARD TABLESPACE;"    echo -e "\033[36;1m 【 分离表 v9_${c} 】 \033[0m"    reback    mysql -u$dbuser -p$dbpd -e "use $dbname ; ALTER TABLE v9_${c}_data DISCARD TABLESPACE;"    echo -e "\033[36;1m 【 分离表 v9_${c} 】 \033[0m"    rebackdone# 将ibd文件复制到数据库目录下cp -arf *.ibd ${dbpath}${dbname}chmod -R 777 $dbpath#表结构和元数据结合for c in ${city[@]};do        mysql -u$dbuser -p$dbpd -e "use $dbname ; ALTER TABLE v9_${c} IMPORT TABLESPACE;"    echo -e "\033[36;1m 【 合成表 v9_${c} 】 \033[0m"    reback    mysql -u$dbuser -p$dbpd -e "use $dbname ; ALTER TABLE v9_${c}_data IMPORT TABLESPACE;"    echo -e "\033[36;1m 【 合成表 v9_${c}_data} 】 \033[0m"    rebackdone

 

===============END====================

转载于:https://www.cnblogs.com/jkklearn/p/6654199.html

你可能感兴趣的文章
iOS 有关内存管理的一个错误分析
查看>>
JavaScript循环和数组常用操作
查看>>
re模块(正则表达式)
查看>>
IOS UIView动画(封装动画)
查看>>
Python简单的爬取网页信息并生成json文件与乱码解决小记
查看>>
雷林鹏分享:Redis 安全
查看>>
某表中字段值存在多个Gid逗号分开 取值拆分每个gid SQL多个逗号隔开的取值
查看>>
C#与vb6 com组件的互相调用方法[转]
查看>>
Python快速教程
查看>>
本地git连接github
查看>>
WebService
查看>>
AC自动机板子(from. qwer)
查看>>
codevs1958 刺激
查看>>
firefox 访问12306.cn提示有风险但没有添加例外选项
查看>>
HDOJ题目(11.22-12.22)
查看>>
Jenkins-在windows上配置自动化部署(Jenkins+Bonobo.Git.Server)
查看>>
15个来自 CodePen 的酷炫 CSS 动画效果【下篇】
查看>>
那些带给我们强烈视觉冲击的 JavaScript 特效网站
查看>>
Bitmap和Drawable相互转换方法
查看>>
android开发环境以及genymotion虚拟机配合HBuilder测试(自总结)
查看>>