冒険の書

27歳と6ヶ月のときに未経験でITエンジニアに転職した元派遣会社営業職(文系)が綴るブログです。同じように20代後半から未経験でIT技術者に転職することを検討されている人に「27歳からの未経験がどれだけ成長できるか」という点などで参考になれば幸いです。

Mroonga(ラッパーモード)のテーブルでalter tableを途中で停止したら、中間テーブルが残ってテーブルコピーを必要とするalter tableができなくなった話

起こったことはタイトルの通りなんですが、解決に至るまでの紆余曲折を書こうと思います。

 

環境

CentOS6.5

MySQL Community Edition 5.6-17

Mroonga 4.10

groonga ライブラリ 4.1

 

事象の再現方法

  1. Mroonga(ラッパーモード)でテーブルコピーが必要となるalter tableを実行する
  2. 処理中にCtrl-Cで中断する

 

解決に至る紆余曲折

  1. テーブルコピーを必要とするalter tableができる方法を探す
  2. 残存した中間テーブルを、テーブルスペースから消さなければいけないことを知る
  3. alter table <table name> discard tablespace やdrop table では削除できなく、再起動が必要なことを知る
  4. 再起動すると別のバク(#67179)を踏み抜く。
  5. しかも、踏み抜き方が悪かったのかWAがうまくいかない。具体的に言うと、初めに対象のテーブルをdropするのだがそこもうまくいかないし、dropした後にテーブルを再生成する工程でcreate tableもできなかった。
  6. そこでmysqldを再起動したらcreate tableできるようになったが、ほかのデータベースのテーブルがshow tables では見れるのに、開けない、という謎現象に遭遇。
  7. 公式マニュアルのinnodbトラブルシューティングを参考にするもにっちもさっちもいかず

解決方法

  1. 公式マニュアルのinnodbトラブルシューティングに残存した中間テーブルに関する記載を見つける
  2. マニュアル通りに進める。
  3. マニュアルには最終的に、その中間テーブルをdropできるような書き方がされているが実際には消せなかった。
  4. しかし、alter table はできるようになり、問題は解決。

それで中間テーブルはどうしたか、というとそのままです。

できれば消したかったのだけれど、再起動した際にその中間テーブルが見つからないとなっては嫌なので、残しています。教訓になりました。alter tableはコピーするだけだから問題ないと思っていたのになぁ('A`)

 

マニュアルの詳細は以下に譲ります。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 14.19.3 InnoDB データディクショナリの操作のトラブルシューティング