MySQLレプリケーションスレーブを読み取り専用に設定する必要がありますか?


22

このガイドに従って、Percona Server 5.5でレプリケーションを実行していますが、読み取り専用にするためにread-only=1スレーブに追加すべきかどうか疑問に思いましたmy.cnf

このガイドでは、ユーザーが複製されるようにmysqlテーブルのレプリケーションを設定しますが、私は主にスレーブを使用してmysqldumpを取得し、緊急時にマスターに再構成します。それは常に?


スレーブを読み取り専用にするために見落とされがちなリマインダーに対して+1。
RolandoMySQLDBA

回答:


31

スレーブが読み取り専用の場合、100%シールドされません。

MySQLドキュメントによると read-only

この変数はデフォルトではオフです。有効にすると、サーバーは、SUPER特権を持つユーザーからの更新、または(スレーブサーバー上の)スレーブスレッドによって実行される更新からの更新を許可しません。レプリケーションのセットアップでは、スレーブサーバーでread_onlyを有効にして、スレーブがクライアントではなくマスターサーバーからのみ更新を受け入れるようにすることが役立ちます。

したがって、スーパー権限を持つ人は誰でも、そのようなスレーブに対して自由に読み書きできます...

すべての非特権ユーザーにSUPER特権がないことを確認してください。

一度にすべてのスーパー権限を取り消す場合は、マスターとスレーブでこれを実行してください。

UPDATE mysql.user SET super_priv='N' WHERE user<>'root';
FLUSH PRIVILEGES;

スレーブを参照すると、これはSUPER特権を予約し、rootそうでない場合に制限される書き込みを非特権ユーザーが行うことを防ぎます。

更新2015-08-28 17:39 EDT

最近、MySQL 5.7がsuper_read_onlyを導入することを知りました

5.7 Docsが言うので、これは彼らのトラックでスーパーユーザーを止めます

read_onlyシステム変数が有効になっている場合、サーバーは、SUPER特権を持つユーザーからのクライアント更新のみを許可します。super_read_onlyシステム変数も有効になっている場合、サーバーは、SUPERを持っているユーザーからのクライアント更新も禁止します。読み取り専用モードの説明、およびread_onlyとsuper_read_onlyの相互作用に関する情報については、read_onlyシステム変数の説明を参照してください。

マスターサーバー上のsuper_read_onlyへの変更は、スレーブサーバーに複製されません。この値は、マスターの設定とは無関係にスレーブサーバーに設定できます。

super_read_onlyはMySQL 5.7.8で追加されました。


1
スレーブを読み取り専用にするのがベストプラクティスですか?
外部参照

6
はい、それはそうすることをお勧めします
RolandoMySQLDBA

1
読み取り専用オプションで運用データベースから集約されたデータを使用して、スレーブでレポートデータベースを使用するにはどうすればよいですか?
Geany

3

MySQLレプリケーションスレーブを読み取り専用に設定する必要がありますか?

はい、R / O モードが利用可能なスレーブサーバーを実行した方が良いでしょう。以前は特権のあるユーザーはそのようなスレーブのデータをとにかく変更することができましたが、その後、彼らは自分のR / O制限「ノブ」も取得しました。

なぜそれが重要なのか-単純なデータの混乱やレプリケーションを中断するキー競合などの理由でスレーブを効果的に使用できなくする不適切な書き込みで後悔するよりも、書き込みで失敗するほうがよい(実際のスレーブが再びなくなる)。

また、オーケストレーション/負荷分割に使用されるソフトウェアがあり、それらのサーバー間で適切なリクエストルーティングを行うように構成したプール内のサーバーのR / Oステータスを考慮します。

これは安全です。これを使って。


1

MySQL 8.0を含むここでの問題はread_only = ONstart slaveコマンドを実行するときにMySQLが設定を強制しないことです。なぜ問題なのですか?ほとんどすべてのMySQL DBAはROでスレーブを使用してデータの破損を防ぎ、常に、スレーブ上のデータを変更するSQLまたは彼のconfを変更しないアプリを誤って誤って実行する1人のdbaが存在します。複数のスキーマがあり、このスキーマで書き込みを行う必要があるため、スレーブに書き込みたい場合は、read_onlyコマンドをよりインテリジェントにする必要がありますread_only for schema。これは、マルチマスターサーバーとaを行うスレーブで非常に便利ですReplicate_Ignore_DB。したがって、現時点では、手動で制御を行い、非常に注意する必要があります。

楽しい。

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