MySQL 删除ibdata1时怎么恢复(接上篇)实操

具体实操篇

整体说通俗易懂点就好比:是一个人,被火或者其他烧伤破坏了,躯壳坏了,然后重修找一个躯壳(新建一个数据库),然后依照前面的躯壳画像(上面得到的sql),在造一个躯壳出来,然后在把内在的骨骼血肉那些(以前的数据)给安在新的躯壳上,最后整个完整的人就号了(数据就恢复了)。上述就需要.frm(躯壳),ibd(骨骼血肉)

只是删除ibdta1文件,在确保.frm及.ibd文件在的情况下 恢复数据:

通过mysqlfrm来进行恢复(如果你能明确的知道表名甚至是表结构、数据类型的情况下,上篇文章即可解决,此篇主要是获取表结构),直接就不介绍.frm和.ibd文件了。

1.mysqlfrm

mysqlfrm是一个恢复性质的工具,可以用来读取.frm文件并从该文件中找到表定义,生成ddl语句,生成的ddl语句多用于在另一台服务器上创建表或进行诊断等。但有些信息不存在于.frm文件中,这些信息将会被忽略,如自增长序列。

安装:官方下载链接: https://cdn.mysql.com/archives/mysql-utilities/mysql-utilities-1.6.5.tar.gz

//注意是在linux环境下
//安装目录 自己创建
cd /mysqlfrm/      
//解压文件
tar -xf mysql-utilities-1.6.5.tar.gz
ls
//进入解压好的文件夹
cd mysql-utilities-1.6.5/
//build构建
python ./setup.py build
//install安装
python ./setup.py install

//安装成功查看命令

mysqlfrm --version

buildj截图

install截图

MySQL 删除ibdata1时怎么恢复(接上篇)实操_第1张图片

成功及版本截图

2.简单说下mysqlfrm模式,其他命令可去官网或者help 查看

模式介绍
–basedir:需指定服务器的基本目录,相当于再生一个数据库实例,还需指定prot,user及.frm文件位置等信息,指定的prot不能与在运行的数据库冲突,可在原数据库无法打开情况下使用,在读取.frm文件后,再生的实例将被关闭,所有的临时文件将被删除。

例:mysqlfrm --basedir=/mysql/mysqld/ --port=3333 --user=mysql /mysql/data/test/tables.frm --show-stats

–server:需指定数据库的连接字符串,需在原数据库可以打开的情况下使用,指定数据库用户名,密码,端口号及.frm文件位置等信息。

例:mysqlfrm --server=root:Root#123@localhost:3306 /mysql/data/test/tables.frm --port=3310 --user=mysql

注意:如数据库还可以正常连接,推荐使用–server模式

3.操作

首先来看下在没恢复前,所有库所有表都是没有空的,但是数据库是可以连接的。

MySQL 删除ibdata1时怎么恢复(接上篇)实操_第2张图片

运行mysqlfrm 命令找到以前表结构

mysqlfrm --server=root:Root#123@localhost:3306 /mysql/data/test/tables.frm  --port=3310 --user=mysql

//参数说明以及注意事项
root:Root#123@localhost:3306 => 账号:密码@本地(或者指定ip):端口
/mysql/data/test/tables.frm  => 需要恢复的.frm文件
--port=3310  => 这个3310 端口一定不要和前面那个端口一样,前者是本生数据库端口,后者是mysqlfrm映射的端口

 

得到最关键的表结构以及类型,如上图

4.具体操作

4.1得到sql语句后,就需要在新的数据库执行,创建新的数据库表。

4.2 丢弃新的骨骼,换入旧的骨骼

ALTER TABLE `WIRELESS_ORDER_BUILD_ZX` DISCARD TABLESPACE;

MySQL 删除ibdata1时怎么恢复(接上篇)实操_第3张图片

MySQL 删除ibdata1时怎么恢复(接上篇)实操_第4张图片

此时少了一个.ibd文件,然后去旧的数据库文件夹里面复制拷贝出来

MySQL 删除ibdata1时怎么恢复(接上篇)实操_第5张图片

MySQL 删除ibdata1时怎么恢复(接上篇)实操_第6张图片

 4.3 数据库重新导入.ibd文件(进行融合)

ALTER TABLE `WIRELESS_ORDER_BUILD_ZX` IMPORT TABLESPACE; SHOW WARNINGS;

MySQL 删除ibdata1时怎么恢复(接上篇)实操_第7张图片

最后大功告成,旧库直接删除,用新库。

希望大家能早日成功恢复数据!!!

你可能感兴趣的:(mysql,数据库)