Help us understand the problem. What is going on with this article?

mysqlの frm ibd からテーブルを復活させたい!

More than 1 year has passed since last update.

前置き

ことの起こり

ある日、PCが再起動し、その後にmysqlを起動しようとした

$ mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/uhuko.local.pid).

ぐええええ:innocent:

原因

cat /usr/local/var/mysql/uhuko.local.err

[ERROR] [MY-012526] [InnoDB] InnoDB: Upgrade after a crash is not supported. This redo log was created with MySQL 5.7.17. Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/upgrading.html
[ERROR] [MY-012930] [InnoDB] InnoDB: Plugin initialization aborted with error Generic error.
[ERROR] [MY-011013] [Server] Failed to initialize DD Storage Engine.
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
[ERROR] [MY-010119] [Server] Aborting

落ち着いた対処

$ brew uninstall mysql --force
$ rm -rf /usr/local/var/mysql
$ brew install mysql

データベースが消えてしまった!

奇跡的に.frm .ibdは残っているのでここから復活させよう
同名のdatabaseを作成しそのフォルダに.frm .ibdをコピーさせると復活する?
そんなことはなかった

.frm .ibdからの復元

https://teratail.com/questions/7925
ここを参考にDDLを.frmファイルから取り出し、次に

テーブルを作成したら、以下のコマンドをMySQL で実行して、作ったテーブルの
テーブルスペースNoを調べてください。
mysql> select SPACE,NAME from information_schema.innodb_sys_tablespaces;
テーブルスペースNoが一致したら mysqld を停止して、元の復元したいテーブルの.ibd と.frm を
新しくできた.ibd と.frm に上書きしてください。

$ od -Ax -j 16418 -N4 -t x1 example_table.ibd
0 0 0 0 5f

5f

テーブルスペースNoが一致したら

5f = 95

つらくない?

解決策の解決策

https://stackoverflow.com/questions/26868956/restore-table-structure-from-frm-and-ibd-files

まず以下を実行する

ALTER TABLE example_table DISCARD TABLESPACE;

.frm .ibdを上書きし

ALTER TABLE example_table IMPORT TABLESPACE;

復活!

まとめ

.frm .ibdからは以下の手順で復活できる

  1. 同名のdatabaseを作成する
  2. 同じ定義のテーブルを作成する(cat example_table.frm などでDDLを手に入れる)
  3. ALTER TABLE example_table DISCARD TABLESPACE; でTABLESPACEを消す
  4. .frm .ibdを上書き
  5. ALTER TABLE example_table IMPORT TABLESPACE;でファイルのTABLESPACEを取り込む
___uhu
マシュマロないとプログラムできない
http://uhu.cilantro.io/
opt
"INNOVATION AGENCY" を標榜するインターネット広告代理店。エンジニア組織 "Opt Techonologies" を中心にアドテクetc...に取り組んでいます。
https://opt-technologies.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした