Amazon Aurora MySQLのSystem Databaseが破損していたので、AWSのサポートに直してもらった話

はじめに

イタンジのエンジニアリングマネージャーの田渕です。

イタンジで採用を検討しているDebeziumという技術では、(使い方によっては)MySQLSystem 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)

対応

調べてみると、このような現象はまれに見られるようです。調べてみると、

  • RDBが動いているLinux上で直接/var/lib/mysqlのファイルを変更する
  • RDBが動いているLinux上でmysql_install_dbコマンドを実行する

などの対応が見つかりますが、RDSを使っている場合にはLinuxにそもそもアクセスできないため、試すことすら不可能でした。

最終的にサポートに問い合わせたところ、無停止で修正可能とのことだったので、修正していただきました。
(そこでどのような操作を行ったのかは教えていただいていません)

なお、問い合わせてから修正されるまでは、1週間ほどの時間がかかりました。

おわりに

珍しい現象ではありましたが、サポートに問い合わせることで無事解決できました。
もし、RDSが動いているLinuxにアクセスしないと修正できなさそうなエラーが発生した場合には、サポートに問い合わせることで、もしかしたら解決できるかもしれません。

おかげさまで、冒頭でちょっぴり触れたDebeziumという技術を採用していくこともできそうです。
そちらでも面白い話ができると思うので、今後そういった話もブログに書けたらなと思っています!

今後ともよろしくお願いします。