web-dev-qa-db-ja.com

mysql idbファイルを回復できません

最近hddエラーが発生し、_/var/lib/mysql/griffith_ファイルのコピーからグリフィス( https://github.com/micjahn/Griffith )データベースを復元しようとしています。私の新しいコンピューターは、より新しいバージョンのMySQLを使用しています。

  • オリジナル:5.7.19-0ubuntu
  • 新規:5.7.20-0ubuntu

InnoDBデータベースの回復に関するスレッドをたくさん読んで、多くのテーブルの復元に成功しましたが、メインテーブル(ムービー)の復元に失敗しました。

これが私がすることです:

  1. 新しいデータベースを作成する
  2. https://recovery.twindb.com/ でテーブル構造を見つける
  3. テーブルを再作成する
  4. すべてのテーブルに使用:

    _ALTER TABLE mytable DISCARD TABLESPACE;
    _
  5. バックアップされたファイルをコピーする

  6. すべてのテーブルに使用:

    _ALTER TABLE mytable IMPORT TABLESPACE;
    _

moviesテーブルの最後のステップで失敗し、mysqlサーバーが終了します。

分析の結果、元のデータベースがutf8エンコーディングで作成されていることがわかりました(twindbスクリプトはlatin1を使用していました)。しかし、それは問題を修正しません。

また、mysqlの設定を次のように変更しました。

_innodb_force_recovery=6
_

select count(*)を実行するといくつかの情報が得られますが、realバックアップを作成するためにテーブルをダンプできません。

Mysqlログで、_IMPORT TABLESPACE_コマンドを実行するとこのエラーが発生します。

_[...many errors and warnings...]
[ERROR] InnoDB: Table `mysql`.`innodb_table_stats` not found.
[ERROR] InnoDB: Fetch of persistent statistics requested for table `griffith`.`movies` 
but the required system tables mysql.innodb_table_stats and mysql.innodb_index_stats 
are not present or have unexpected structure. Using transient stats instead.
[ERROR] InnoDB: Trying to access page number 1647523377 in space 238, space name 
griffith/movies, which is outside the tablespace bounds. 
Byte offset 0, len 16384, i/o type read. 
If you get this error at mysqld startup, please check that your my.cnf
matches the ibdata files that you have in the MySQL server.
[ERROR] InnoDB: Server exits.
_

誰かが私を助けてくれますか?

2
Baron Robert

Movies.ibdのページの1つが破損しているため、読み取れません。

ここには2つのオプションがあります。

1)破損したInnoDBテーブルからMyISAMテーブルに可能な限り多くのレコードをコピーできるスクリプト fetch_data.sh があります。 innodb_force_recovery = 6でMySQLを起動し、同じ構造のMyISAMテーブルを作成し、スクリプトを使用してレコードをコピーします。

2)同じツールキットからc_parser/stream_parserを使用して、movies.ibdからレコードをフェッチします。破損しているため、とにかくインポートできません。

ああ、TwinDBの作者として、もう1つのオプションを提案できます:-)- https://recovery.twindb.com/ を使用して映画を復元しますibd。しかし、それは$$$の費用がかかります。

1
akuzminsky