序文 MySQL クラスターを構築する場合、当然のことながら、データの一貫性を確保するために、データベースのマスターとスレーブの同期を完了する必要があります。マスタースレーブ同期には、1 つのマスターと複数のスレーブ、マスタースレーブの連鎖、複数のマスターと複数のスレーブなど、さまざまな方法があります。必要に応じて設定できます。ただし、マスターとスレーブの同期が必要な場合は、server-id の構成に注意する必要があります。そうしないと、マスターとスレーブのレプリケーション例外が発生します。 データベース データのレプリケーションとログ管理を制御するには、バイナリ ログ ファイル レコードとグローバル トランザクション ID に影響する server-id と server-uuid という 2 つの重要な構成があります。 サーバーID設定 マスター/スレーブ トポロジを使用する場合は、すべての MySQL インスタンスに一意のサーバー ID を指定してください。デフォルト値は 0 です。server-id=0 の場合、マスターはバイナリ ログを記録しますが、すべてのスレーブ接続を拒否します。スレーブは他のインスタンスへの接続を拒否します。 MySQL インスタンスの server-id はグローバル変数であり、直接表示できます。 mysql> '%server_id%' のような変数を表示します。 +---------------+-----------+ | 変数名 | 値 | +---------------+-----------+ | サーバー ID | 171562767 | +---------------+-----------+ セット内の 1 行 (0.00 秒) グローバル変数 server-id はオンラインで直接変更できますが、すぐには有効にならないため、変更後はサービスを再起動することを忘れないでください。再起動後、システム構成ファイルが再度読み込まれるため、以前の変更は無効になります。したがって、オンラインで変更するのではなく、構成ファイルを変更してサービスを再起動することをお勧めします。 #私の.cnf [mysqld] #レプリケーション ログ bin = mysql bin サーバーID=171562767 同期バイナリログ=1 binlog-ignore-db=mysql binlog-ignore-db=情報スキーマ サーバーIDの使用 サーバー ID は、連鎖マスター スレーブまたはマルチ マスター マルチ スレーブ トポロジで SQL ステートメントの無限ループを防ぐためにデータベース インスタンスを識別するために使用されます。
server-id を繰り返さない理由を説明するために、2 つの例を挙げてみましょう。 プライマリデータベースとスタンバイデータベースのサーバーIDが重複している場合 デフォルトでは replicate-same-server-id=0 であるため、スレーブ データベースはマスター データベースと同期されたすべてのデータをスキップし、マスター データとスレーブ データの間に不整合が生じます。 2つのスタンバイデータベースのサーバーIDが重複している場合 これにより、スレーブ データベースとマスター データベース間の接続が時々切断され、多数の例外が発生します。 MySQL の設計によれば、マスター データベースとスレーブ データベースはイベント メカニズムを通じて接続され、同期されます。新しい接続が行われたときに、サーバー ID が同じであることがわかった場合、マスター データベースは以前の接続を切断し、新しい接続を再登録します。データベース A がメイン データベースに接続されると、データベース B がそれに接続し、データベース A が切断されます。その後、データベース A が再接続し、このサイクルが繰り返され、大量の異常な情報が発生します。 サーバーID生成のルール サーバー ID は同じにすることはできないため、インスタンスが 10 個ある場合、それぞれが異なることをどのように確認すればよいでしょうか?一般的に使用される方法はいくつかあります。
上記の方法はすべて問題ありませんが、最大値 2^32-1 を超えないように注意し、値は 2 より大きいことが望ましいです。私が使用している方法は、IP アドレスの下 2 桁 + ローカル MySQL インスタンス番号ですが、Docker を使用して複数のインスタンスを管理している場合、これをどのように生成しますか? 何かエレガントな解決策があるかどうか考えていただけますか? サーバーUUID設定 MySQL サービスは、server-uuid 構成を自動的に作成して生成します。
シェル> cat ~/mysql/data/auto.cnf [自動] サーバーUUID=fd5d03bc-cfde-11e9-ae59-48d539355108 auto.cnf 構成スタイルは my.cnf に似ていますが、このファイルには auto 構成ブロックと server-uuid 構成行のみが含まれています。自動的に作成されるため、内容を変更しないでください。 マスター スレーブ トポロジでは、マスターとスレーブは互いの UUID を認識できます。Master_UUID フィールドを表示するには、マスターで show slave hosts を使用し、スレーブで show slave status を使用します。 server-uuid パラメータは server-id パラメータを置き換えるものではありません。これらは機能が異なります。マスターインスタンスとスレーブインスタンスを同期するときに、マスターインスタンスとスレーブインスタンスの server-uuid が同じである場合、エラーが報告され、システムが終了します。ただし、replicate-same-server-id=1 を設定することでエラーを回避できます (非推奨)。 参考文献
要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: Linux システムで httpd の自動インストールと構成を Ansible で実装する方法
>>: Vite2とVue3を使用したウェブサイトの国際化を実現するプロセス全体
このメモはインストール チュートリアルです。実用的な意味はありません。記録のためだけに書いています。...
背景ご存知のとおり、nginx は高性能な Web サーバーであり、負荷分散やリバース プロキシによ...
この記事では主に、MySQL 8.0 ドライバーと Alibaba Druid バージョン間の互換性...
概要インデックス作成は、MySQL で習得しなければならないスキルであり、MySQL クエリの効率を...
SELECT ステートメントの完全な構文は次のとおりです。 (7)選択 (8) DISTINCT ...
Web ページには、非常に複雑な HTML 構造があります。CSS を使用して関連するスタイルを定義...
1. フロントエンド主導の実装手順最初のステップは、ページのインポートボタンをクリックしてExcel...
Nginx は、一般的に 7 層の負荷分散に使用できます。この記事では、負荷分散に関する基本的な知識...
導入MySQL 5.7 は、SSL/TLS と全体的なセキュリティ開発におけるいくつかの重要な変更に...
目次トピック分析する使用目的解決:コードは次のように実装されます。分析:配列とポインタ解決:コードは...
目次1. classList属性2. 実用化以前の JavaScript では、最初にクラス属性を取...
イベントについて: MySQL 5.1 では、イベントの概念が導入され始めました。イベントは「時間ト...
目次1. 父から息子へ2. 息子から父へ3. 親子関係のないコンポーネントの値の転送4. ヴュークス...
キーの入力を求められた場合は、[キーがありません]を選択します。デスクトップエクスペリエンスを選択す...
目次UIデザインEcharts の例の効果序文サンプルコード最終結果UIデザイン Echarts の...