Mroonga(ラッパーモード)のテーブルでalter tableを途中で停止したら、中間テーブルが残ってテーブルコピーを必要とするalter tableができなくなった話
起こったことはタイトルの通りなんですが、解決に至るまでの紆余曲折を書こうと思います。
環境
CentOS6.5
MySQL Community Edition 5.6-17
Mroonga 4.10
groonga ライブラリ 4.1
事象の再現方法
- Mroonga(ラッパーモード)でテーブルコピーが必要となるalter tableを実行する
- 処理中にCtrl-Cで中断する
解決に至る紆余曲折
- テーブルコピーを必要とするalter tableができる方法を探す
- 残存した中間テーブルを、テーブルスペースから消さなければいけないことを知る
- alter table <table name> discard tablespace やdrop table では削除できなく、再起動が必要なことを知る
- 再起動すると別のバク(#67179)を踏み抜く。
- しかも、踏み抜き方が悪かったのかWAがうまくいかない。具体的に言うと、初めに対象のテーブルをdropするのだがそこもうまくいかないし、dropした後にテーブルを再生成する工程でcreate tableもできなかった。
- そこでmysqldを再起動したらcreate tableできるようになったが、ほかのデータベースのテーブルがshow tables では見れるのに、開けない、という謎現象に遭遇。
- 公式マニュアルのinnodbのトラブルシューティングを参考にするもにっちもさっちもいかず
解決方法
- 公式マニュアルのinnodbのトラブルシューティングに残存した中間テーブルに関する記載を見つける
- マニュアル通りに進める。
- マニュアルには最終的に、その中間テーブルをdropできるような書き方がされているが実際には消せなかった。
- しかし、alter table はできるようになり、問題は解決。
それで中間テーブルはどうしたか、というとそのままです。
できれば消したかったのだけれど、再起動した際にその中間テーブルが見つからないとなっては嫌なので、残しています。教訓になりました。alter tableはコピーするだけだから問題ないと思っていたのになぁ('A`)
マニュアルの詳細は以下に譲ります。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 14.19.3 InnoDB データディクショナリの操作のトラブルシューティング