mysql5.7误删除ibdata1表空间恢复

痛点:数据库启动不了,无法得知库中的建表语句
思路:先找到之前建表语句,再重新建一个新库,在新库中执行建表sql,将新库中的表空间取除,再将旧库里的idb文件复制到新库中,加载表空间,最后查询数据验证

解决:
1.去mysql官网下载mysql-utilities-1.6.5-1.el7.noarch软件
安装mysql-utilities-1.6.5-1.el7.noarch 软件
安装:用下面2个命令

python ./setup.py build
python ./setup.py sinstall

2.使用下面命令就查看frm文件的建表语句:

mysqlfrm –diagnostic /usr/local/mysql/data/test/*.frm >/tmp/a.sql

3.重新初始化一个新库,将建表语句批量执行
进入到新库中:source /tmp/a.sql;

4.进入到新库中 移除新建表的表空间
如果有多张表 可以用concat拼接语句

> select concat("alter table world.",table_name,"discard tablespace;") from information_schema.tables where table_schema='world';

4.使用cp将旧库里的idb文件移动到新库中

cp *.idb  .
chown -R mysql. *

5.加载表空间,如果表多也可以拼接

select concat("alter table world.",table_name,"import tablespace;") from information_schema.tables where table_schema='world';
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ibdata1是MySQL数据库中的一个文件,它包含了InnoDB存储引擎的表空间数据。如果ibdata1文件损坏了,我们可以尝试以下几种方法来恢复数据。 首先,备份是非常重要的。如果你有完整的备份,你可以简单地将备份文件恢复到一个新的MySQL实例中,从而解决损坏的问题。 如果没有备份,可以尝试使用MySQL自带的工具来修复损坏的ibdata1文件。 首先,关闭MySQL服务器,确保没有任何对数据库文件的写操作。然后备份整个数据目录,以防万一。 然后,使用innodb_force_recovery选项将数据库启动到恢复模式。这将尝试修复损坏的数据,并尽可能多地恢复数据。 如果恢复模式无法修复数据库,我们可以尝试使用InnoDB启动选项来创建一个新的ibdata1文件,然后重新导入数据。首先,在MySQL配置文件中设置innodb_force_recovery选项的值为最高值(一般是6),然后启动MySQL服务器。这将尝试最大程度地恢复数据库。然后使用mysqldump命令将所有数据导出到一个文件中。接下来,停止MySQL服务器,将innodb_force_recovery选项设回默认值,删除原来的数据目录,创建一个新的数据目录,并将从备份导出的数据放入新的数据目录下。最后,重新启动MySQL服务器,数据将被导入到新的数据库中。 尽管这些方法可能能够恢复部分数据,但它们并不是100%可靠的。在尝试修复损坏的数据库之前,最好先与专业的数据库管理员咨询,以获取更确切和个性化的建议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值