はじめに
イタンジのエンジニアリングマネージャーの田渕です。
イタンジで採用を検討しているDebeziumという技術では、(使い方によっては)MySQLのSystem Databaseの一つであるmysql.host
テーブルというテーブルにアクセスする必要があります。
先日、その検証をAmazon Aurora MySQLのとあるインスタンス上で行っていたところ、そのインスタンスのmysql.host
テーブルが破損していることが判明しました。
いろいろ試しましたが、自力では復旧することが不可能であり、最終的にはサポートの方に直していただきました。
めったに無いことかとは思いますが、同様の現象に陥った方の助けになればと思い、詳細を書いていきます。
現象
SHOW TABLESをした結果には、mysql.host
テーブルが存在しますが、SHOW CREATE TABLEをすると、テーブルが見つからない旨のエラーが発生しました。
mysql> SHOW TABLES FROM mysql LIKE 'host'; +------------------------+ | Tables_in_mysql (host) | +------------------------+ | host | +------------------------+ 1 row in set (0.00 sec) mysql> SHOW CREATE TABLE mysql.host; ERROR 1146 (42S02): Table 'mysql.host' doesn't exist
mysqlcheckコマンドやREPAIR TABLE文でも、テーブルが見つからない旨のエラーが発生しました。
# mysqlcheck --databases mysql --tables host -p Enter password: mysql.host Error : Table 'mysql.host' doesn't exist status : Operation failed
mysql> REPAIR TABLE mysql.host; +------------+--------+----------+----------------------------------+ | Table | Op | Msg_type | Msg_text | +------------+--------+----------+----------------------------------+ | mysql.host | repair | Error | Table 'mysql.host' doesn't exist | | mysql.host | repair | status | Operation failed | +------------+--------+----------+----------------------------------+ 2 rows in set (0.00 sec)
対応
調べてみると、このような現象はまれに見られるようです。調べてみると、
などの対応が見つかりますが、RDSを使っている場合にはLinuxにそもそもアクセスできないため、試すことすら不可能でした。
最終的にサポートに問い合わせたところ、無停止で修正可能とのことだったので、修正していただきました。
(そこでどのような操作を行ったのかは教えていただいていません)
なお、問い合わせてから修正されるまでは、1週間ほどの時間がかかりました。
おわりに
珍しい現象ではありましたが、サポートに問い合わせることで無事解決できました。
もし、RDSが動いているLinuxにアクセスしないと修正できなさそうなエラーが発生した場合には、サポートに問い合わせることで、もしかしたら解決できるかもしれません。
おかげさまで、冒頭でちょっぴり触れたDebeziumという技術を採用していくこともできそうです。
そちらでも面白い話ができると思うので、今後そういった話もブログに書けたらなと思っています!
今後ともよろしくお願いします。