MySQLスレーブへの非レプリケーション書き込みを防止しますか?


12

パフォーマンスのために、行ベースのレプリケーションを設定したMySQLデータベースサーバーがいくつかあります。ソフトウェアはマスターに書き込み、マスターまたはスレーブのいずれかから読み取ります。ほとんどの場合、すべてがうまく機能しています。

MySQLがMySQLスレーブであることを知っていても、MySQLがスレーブへの書き込みを許可することは私の理解です。理想的には、私はこれを閉じたいので、誰かが読み取り接続を取得して実行する悪いコードを書いてもUPDATE、スレーブにデータを置くのではなくエラーをスローします。

MySQLでこれを行う方法はありますか?ソフトウェアからもこれを不可能にしたいのは明らかですが、サーバー上のファイアウォールのように、可能な限り防御したいと思います。

ありがとう!

回答:


13

read-onlymy.cnfでオプションを有効にします。--read-onlymysqld を使用して、コマンドラインでフラグとして指定することもできます。


5
これは、読み取り専用ではないため、スーパーユーザー(つまり、MySQLのrootユーザー)には機能しないことに注意してください。
vmfarms

5

設定の代替としてread_only=1(たとえば、スレーブインスタンスに他のスクラッチパッド/レポート/開発データベースがある場合)、複製するDBに対するすべてのユーザーからSELECT以外のすべての特権を削除することがあります。

つまり、マスターでGRANTコマンドを実行した後、スレーブでREVOKEコマンドを実行します。


2

MySQL 5.7.8の時点で、super_read_onlySUPERユーザーでもクライアントの更新を実行できないオプションがあります。複製プロセスを中断しません。他の設定と同様に、以下を設定できます。

  • コマンドライン形式(--super_read_only=ON)、
  • my.cnf(super_read_only=1)の変数として、または
  • クライアントプロンプトから(SET GLOBAL super_read_only = 1;)。

ご了承ください:

  • 有効にするには、super_read_only暗黙的に可能read_only
  • 無効にread_only暗黙的に無効にしますsuper_read_only

いくつかの注意事項:

  • 一時テーブルの操作read_onlysuper_read_only防止しません。
  • ANALYZE TABLEやOPTIMIZE TABLEなどのメタデータ操作は妨げられません。
  • super_read_only有効な特定のクエリのバグが報告されています。

参照:https : //www.percona.com/blog/2016/09/27/using-the-super_read_only-system-variable/


1

最初の投稿がやや示唆しているように、あなたは許可でそれをします。読み取り専用オプションは、FYIとしてスーパーユーザーに対しては機能しません。また、書き込みを防止したいスレーブにとっては、実際には実行可能なソリューションではありません。ユーザー/データベース/テーブルのアクセス許可による書き込みを防ぐ必要があります。1つは、レプリケーションユーザーがスレーブとマスターとの同期を維持するために、スレーブに書き込むことができる必要があります。書き込みを制御するより良い方法は、スレーブでのみ読み取りを行う必要がある問題のユーザーに対して書き込み(挿入、作成など)を許可するオプションを取り消す必要があることです。


0

スレーブ上のユーザーにのみレプリケーション関連の権限を付与してください。ルートユーザー権限の問題は引き続きありますが、DBサーバーへのリモートルートアクセスを削除できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.