🐡
AuroraがReadOnlyになっている原因を調べたらparameter groupの設定だった
先に結論
- パラメータグループの設定で、
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