おれんじぺこ

母、ときどきwebエンジニア

[DBeaver]rootユーザでクエリを実行したら読み取り専用の接続と怒られたときの対処法

今回、AWSでスナップショットから新規RDSを構築しました。 同じVPC内でのRDSの複製ではなく、別VPCへの複製だったので、色々手順があるのですが、その話はまた今度・・・

とりあえず、DBに接続できたので、マスターユーザでログイン、各種設定を行おうとSQLを実行したところ・・・ SQLが実行できない!という事態が。

まさか、ここでつまづくとは思っていなかったので、何が原因か当初は分からず、かなりあたふたしました。 結局、RDSの設定などは関係なく、使用していたSQLクライアントの「DBeaver」の設定が原因でした・・・

はぁ、焦った・・・

直面したエラー

今回直面したエラーは、以下のエラーです。
ユーザ追加をしようとしたときにこのエラーになり、SQLの実行に失敗してしまいました。

SQLエラー [S1009]: Connection is read-only. Queries leading to data modification are not allowed.```

「マスターユーザーでデータベースには問題なくログインできるのに、参照しかできないなんてある?!」
と画面の前で突っ込みました(笑)

まず疑ったのは、データベースの設定がまずかったのではないかと言うことでした。

データベースの設定を確認

エラーの内容が「読み取り専用の接続です」ということだったので、そもそもデータベースが読み取り専用設定になっているのではないかと思い、以下のSQLで設定の確認を行いました。

SHOW variables WHERE variable_name='read_only';
SHOW variables WHERE variable_name='innodb_read_only';

実行結果はどちらも「OFF」。DBの設定として、読み取り専用になっているわけではありませんでした。
DBの設定では問題ないし、DBへの接続は問題なくできている・・・もしかして・・・SQLクライアント側の問題?

DBeaverの設定を確認

今まで、さまざまなデータベースにDBeaverで接続してきましたが、「読み取り専用問題」で引っかかることがありませんでした。
そのため、まさかDBeaverの設定に問題があるのかも・・・と思うまでかなりの時間がかかりました。

DBeaverの問題の設定箇所は、
編集 接続>一般>セキュリティエリアにある、”読み取り専用接続チェックボックス でした。

この読み取り専用接続がONになっていたために、データベースへの変更SQLの実行でエラーになっていました。 こちらのチェックボックスを外すと、DBのログインユーザの権限通りの動きになりました。

ほんと、焦った・・・💦