MySQL损坏数据恢复

MySQL损坏恢复

 一、两种方式的数据存储结构:

 在Myisam下,数据库的每个数据表都有*.frm、*.YMI和*.YMD三个文件,其中*.frm存储数据表的表结构,*.MYI存储数据表的索引,*.MYD存数数据表的记录数据;

 在Innodb下,每个数据库下的每个数据表只有一个*.frm存储数据表的表结构,而所有数据库的所有表数据索引、数据记录都全部存储在ibdata1文件中,而ib_logfile0和ib_logfile1是日志文件。

 二、恢复方式

 Innodb引擎数据恢复

    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;

 1、在新的 MySQL 实例上,在同名数据库中重新创建表。

 2、丢弃新创建的表的表空间。

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

    例:

    mysql> ALTER TABLE sakila.actor DISCARD TABLESPACE;

 3、将孤立的.ibd文件从备份目录复制到新的数据库目录。

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

 4、确保.idb文件具有必要的文件权限。

 5、导入孤立.ibd文件。发出警告,指示InnoDB尝试在没有模式验证的情况下导入文件。

    ALTER TABLE {库名}.{表名} IMPORT TABLESPACE;SHOW WARNINGS;

    例:

    mysql> ALTER TABLE sakila.actor IMPORT TABLESPACE; SHOW 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

6、查询表以验证.ibd 文件是否已成功恢复。

    mysql> SELECT COUNT(*) FROM sakila.actor;

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

    | count(*) |

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

    |      200 |

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

MyiSAM引擎数据恢复

 1、将备份目录中所对应的.MYI及.MYD文件复制到新的数据库目录。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容