如何从ibd文件中恢复数据

如何从ibd文件中恢复数据,第1张

创建已经丢失的表结构

先要安装 mysql-utilities。

// RedHatyum -y install mysql-server mysql-utilities// Debianapt install mysql-utilities

使用 mysqlfrm 从 .frm 文件里面找回建表语句。

// 分析一个 .frm 文件生成建表的语句mysqlfrm --diagnostic /var/lib/mysql/test/t1.frm// 分析一个目录下的全部.frm文件生成建表语句root@username:~# mysqlfrm --diagnostic /var/lib/mysql/my_db/bk/ >createtb.sqlroot@username:~# grep "^CREATE TABLE" createtb.sql |wc -l124

可以看到一共生成了 124 个建表语句。

有很多时候也可以从其它库里面生成建表语句,如同一个应用的其它数据库或不同的测试环境,采用下面的 mysqldump 生成建表语句:

mysqldump --no-data --compact my_db>createtb.sql

登录 MySQL 生成表。

mysql>create database my_dbmysql>use my_dbDatabase changedmysql>source createtb.sqlQuery OK, 0 rows affected (0.07 sec)......

导入旧的数据文件

将新建的没有包括数据的 .ibd 文件抛弃

root@username:/var/lib/mysql/my_db# ll *.ibd|wc12411167941root@username:/var/lib/mysql/my_db# mysql -e "show tables from my_db" \| grep -v  Tables_in_my_db  \| while read ado mysql -e "ALTER TABLE my_db.$a DISCARD TABLESPACE"doneroot@username:/var/lib/mysql/my_db# ll *.ibd|wcls: cannot access '*.ibd': No such file or directory000

可以看到所有的 .idb 文件都已经被抛弃了。然后把旧的有数据的 .ibd 文件拷贝到这个 my_db 目录下面,别忘了把属主改过来:chown mysql. *,再把这些数据文件 import 到数据库中。

root@username:/var/lib/mysql/my_db# mysql -e "show tables from my_db" \| grep -v  Tables_in_my_db  \| while read a\do mysql -e "ALTER TABLE my_db.$a import TABLESPACE"done

导入完成后检查表

使用 mysqlcheck 对数据库 my_db 下的所有表进行检查:

root@username:/var/lib/mysql/my_db# mysqlcheck -c my_dbmy_db.cdp_backup_point                             OK......

所有的表都导入成功。

    mysql>CREATE DATABASE sakila

    mysql>USE sakila

    mysql>CREATE TABLE actor (

        actor_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,

        first_name VARCHAR(45) NOT NULL,

        last_name VARCHAR(45) NOT NULL,

        last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

        PRIMARY KEY  (actor_id),

        KEY idx_actor_last_name (last_name)

      )ENGINE=InnoDB DEFAULT CHARSET=utf8

    ALTER TABLE {库名}.{表名} DISCARD TABLESPACE

    例:

    mysql>ALTER TABLE sakila.actor DISCARD TABLESPACE

    cp /backup_directory/actor.ibd path/to/mysql-5.7/data/sakila/

    ALTER TABLE {库名}.{表名} IMPORT TABLESPACESHOW WARNINGS

    例:

    mysql>ALTER TABLE sakila.actor IMPORT TABLESPACESHOW WARNINGS

    Query OK, 0 rows affected, 1 warning (0.15 sec)

    Warning | 1810 | InnoDB: IO Read error: (2, No such file or directory)

    Error opening './sakila/actor.cfg', will attempt to import

    without schema verification

    mysql>SELECT COUNT(*) FROM sakila.actor

    +----------+

    | count(*) |

    +----------+

    |      200 |

    +----------+


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7253899.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-03
下一篇2023-04-03

发表评论

登录后才能评论

评论列表(0条)

    保存