マスター/スレーブデータベーススキームを使用してmysqlレプリケーションを設定した後、スレーブデータベースサーバーが読み取り専用ではないことに気付きました。理由は、その後、/ etc /my.cnfファイルで手動で構成したことです。
理解できません。スレーブが常に読み取り専用モードで実行されているのはデフォルトの動作ではありませんか、それとも常に手動で構成する必要がありますか?
スレーブをread_onlyモードにしないことは非常に一般的です。
実際、自分で設定しないと、有効になることはありません。
良い質問は、なぜ実際に設定したいのかということです... ???
間違いを防ごうとしていますか?またはエラーが私の管理者ユーザーになりましたか?またはアプリケーション?
とにかく多くの管理者がMySQLをrootとして使用していることを考えると、ここでの保護はどこにありますか?
想像どおりにデータを正確に保護することはできません(とにかくすべてがスレーブに複製されるため)
スーパー特権とレプリケーションスレッドを持つユーザーがread_onlyに従わないことを知っていますか?
ユーザーと特権に対する強力な構造化アプローチは、スレーブのread_only構成ではなく、レプリケーションの問題に対処する正しい方法です
私の正直な意見では、それは実際にはあまり保護していません...または、書き込みを行わない少数のユーザーを停止する以外の何かに役立ちます..(本番システムでは-とにかく起こるべきではありません)
例として、Mysql-Multi-Master(read_onlyはスクリプトによって設定されます)では、これは理論的には、マスターマスター構成でどのサーバーが「真のマスター」であるかを単に決定することだけです。
全体として..read_onlyを忘れてください(それは本当に不必要であり、おそらくあなたが想像するものからあなたを保護することはありません)
いいえ、これはデフォルトの動作ではありません。スレーブを読み取り専用にする場合は、「手動」(またはスクリプト)で行う必要があります。
これの理由は主にそれが始まった方法であり、それ以来変更されていないという理由だけです。ただし、これが望ましい動作である方法はたくさんあります。たとえば、スレーブにマスターにはないテーブルがある場合(要約テーブルのレポートなど)。または、ALTERを実行する場合は、最初にスレーブで実行し、フェイルオーバーしてから、ライブサイトに影響を与えないようにマスターで実行できます。
スレーブの多くはread_onlyに設定されていますが、そうでないものもあります。
このような場合、通常、これらのサーバーに他の開発/スクラッチパッド/レポートデータベースが格納されているためです。このような場合、ユーザーにはプライマリデータベースへのSELECT権限のみが付与され、セカンダリデータベースへのSELECT/UPDATE権限が付与されます。
さらに、マルチマスターレプリケーションが使用されている場合、スレーブをデフォルトでread_onlyにすることは深刻な問題になります。 :)
読み取り専用モードはユーザーごとであり、スレーブに対してグローバルではないと思います。したがって、ユーザー(データベース 'mysql')を複製していないことを確認し、必要に応じて、USAGE付与オプションのみを使用してユーザーを作成します。読み取り専用です。