🐡

AuroraがReadOnlyになっている原因を調べたらparameter groupの設定だった

2022/10/30に公開

先に結論

  • パラメータグループの設定で、read_only=Trueになっていたのが原因

(いろいろ調べた順)

状況:ReadOnlyになっている

しばらく使っていなかったテスト用のAurora MySQLが書き込みできなくなっている。

  • 作成から1年くらい経っている
  • 停止 -> 7日経って起動 -> 停止しかしていない
  • ほとんどレコード入っていない
  • 以前は書き込めていたのでテーブルは存在する
  • フェイルオーバーのテストをした気がする

SQLクライアントで、接続、READはできる。しかし、書き込みしようとするとこういうエラー

The MySQL server is running with the --read-only option so it cannot execute this statement

確認

Reader, Writerのエンドポイントを間違えている?

確認したが、間違えてない

AWS knowledge

Amazon Aurora DB クラスターがフェイルオーバーした後、読み取り専用エラーが発生するのはなぜですか?

フェイルオーバー時に起こるらしい。ここに書いてある方法で調べていく。

innodb_read_onlyの確認

show variables where variable_name='innodb_read_only';
Variable_name Value
innodb_read_only OFF

オフになっているので問題ない。

接続しているインスタンスをテストする

これで0になっていたらライターに接続していることがわかるらしい

select @@innodb_read_only;

@@innodb_read_only 0

しかし、Readerに接続しても0になったので今回は意味がなさそう。

同じクラスタを別に作成する

  • 新しく作成すると、問題なく接続できているので、接続の方法ではなさそう
  • aws rds describe-db-clusters --db-cluster-identifierとか
    aws rds describe-db-instances --db-instance-identifierで差分を見てみると、パラメータグループが変更してあることが分かった(他に変更点なさそう)
    • crr-parameter-groupという名前になっている。(クロスリージョン リードレプリカのテストをしたときに作ったっぽい)

パラメータグループの設定を変える

parameter group -> Action -> Compareするとread_only=1になっています。

read_onlyを1から0に変更します。

書き込みできるようになりました。

TODO なぜこうなっていたのか?

リードレプリカからの昇格なのかな?と思ったのですが、覚えていなくて不明なので調べたい。いろいろ試すうちに変えたと思われる。。

まとめ

  • Auroraが書き込めなくなっていたのは、インスタンスでread_onlyが有効になっていたからだった。
  • 調べるときに右往左往してしまったが、まずはパラメータを疑うのが良いのかも。

Discussion