次のセクションでは、MySQL レプリケーションに関するよくある質問に回答しています。
- A.14.1. レプリカは常にソースに接続する必要がありますか。
- A.14.2. レプリケーションを有効にするには、ソースとレプリカでネットワーキングを有効にする必要がありますか。
- A.14.3. レプリカがソースと比較してどの程度遅れているかを知るにはどうすればよいですか。 つまり、レプリカによってレプリケートされた最後のステートメントの日付を知るにはどうすればよいですか。
- A.14.4. レプリカがキャッチアップされるまでソースで更新を強制的にブロックするにはどうすればよいですか。
- A.14.5. 二方向レプリケーションを設定する場合に注意する問題はありますか。
- A.14.6. レプリケーションを使用してシステムのパフォーマンスを改善するにはどうすればよいですか。
- A.14.7. パフォーマンスがより高いレプリケーションを使用するには、アプリケーションのクライアントコードを準備するときに何を行えばよいですか。
- A.14.8. MySQL レプリケーションによってシステムのパフォーマンスが向上するのは、どのような場合でどの程度向上しますか。
- A.14.9. 冗長性または高可用性を持たせるには、レプリケーションをどのように使用すればよいですか。
- A.14.10. レプリケーションソースサーバーがステートメントベースまたは行ベースのバイナリロギング形式を使用しているかどうかを確認するにはどうすればよいですか。
- A.14.11. 行ベースのレプリケーションを使用するようレプリカに指示するにはどうすればよいですか。
- A.14.12. GRANT および REVOKE ステートメントがレプリカマシンにレプリケートされないようにするにはどうすればよいですか。
- A.14.13. レプリケーションは混合オペレーティングシステムで機能しますか (たとえば、ソースは Linux 上で実行され、レプリカは macOS と Windows 上で実行されます)。
- A.14.14. 混在ハードウェアアーキテクチャでレプリケーションは機能しますか (たとえば、ソースは 64 ビットマシン上で実行され、レプリカは 32 ビットマシン上で実行されます)。
A.14.1. |
レプリカは常にソースに接続する必要がありますか。 |
いいえ、その必要はありません。 レプリカは、数時間または数日間停止するか切断されたままにしてから、再接続して更新に追いつけます。 たとえば、リンクが散発的にのみ、短時間にわたって稼働しているダイアルアップリンクを介して、ソース/レプリカ関係を設定できます。 これは、特別な対策をとらないかぎり、いつでもレプリカがソースと同期していることが保証されないことを意味します。 切断されたレプリカに対してキャッチアップが発生するようにするには、まだレプリカにレプリケートされていない情報を含むバイナリログファイルをソースから削除しないでください。 非同期レプリケーションは、レプリカが最後にイベントを読み取った時点からバイナリログの読み取りを続行できる場合にのみ機能します。 |
|
A.14.2. |
レプリケーションを有効にするには、ソースとレプリカでネットワーキングを有効にする必要がありますか。 |
はい、ソースおよびレプリカでネットワーキングを有効にする必要があります。 ネットワーキングが有効になっていない場合、レプリカはソースに接続してバイナリログを転送できません。 どちらのサーバーの構成ファイルでも、 |
|
A.14.3. |
レプリカがソースと比較してどの程度遅れているかを知るにはどうすればよいですか。 つまり、レプリカによってレプリケートされた最後のステートメントの日付を知るにはどうすればよいですか。 |
レプリケーション SQL スレッドは、ソースから読み取られたイベントを実行すると、独自の時間をイベントタイムスタンプに変更します。 (これにより、 |
|
A.14.4. |
レプリカがキャッチアップされるまでソースで更新を強制的にブロックするにはどうすればよいですか。 |
次の手順を使用します。
|
|
A.14.5. |
二方向レプリケーションを設定する場合に注意する問題はありますか。 |
現在、MySQL レプリケーションでは、分散 (クロスサーバー) 更新の原子性を保証するために、ソースとレプリカ間のロックプロトコルはサポートされていません。 つまり、クライアント A が共同ソース 1 を更新し、その間にクライアント B が共同ソース 2 に伝播する前に、クライアント A の更新が共同ソース 1 とは異なる方法で動作するように共同ソース 2 を更新できます。 したがって、クライアント A の更新によって共同ソース 2 が作成されると、共同ソース 2 からのすべての更新も伝播された後でも、共同ソース 1 とは異なるテーブルが生成されます。 これは、どのような順序でも更新が安全に行われるという確証がある場合、またはクライアントコードで更新順序の間違いに対処できる場合を除いて、2 つのサーバーを二方向レプリケーション関係にするべきではないことを意味します。 二方向レプリケーションでは、実際には、更新に関してパフォーマンスはそれほど向上しません。 各サーバーは、単一のサーバーで更新を行うときと同量の更新を行う必要があります。 唯一の違いは、別のサーバーで発生した更新があるレプリケーションスレッドでシリアライズされるため、ロックの競合が少し少なくなることです。 この利点さえも、ネットワーク遅延によって相殺されてしまうことがあります。 |
|
A.14.6. |
レプリケーションを使用してシステムのパフォーマンスを改善するにはどうすればよいですか。 |
1 つのサーバをソースとして設定し、すべての書き込みをそのサーバに指示します。 次に、予算およびラックスペースがある数のレプリカを構成し、ソースとレプリカ間で読取りを分散します。 レプリカは、 |
|
A.14.7. |
パフォーマンスがより高いレプリケーションを使用するには、アプリケーションのクライアントコードを準備するときに何を行えばよいですか。 |
スケールアウトソリューションとしてレプリケーションを使用するためのガイドについては、セクション17.4.5「スケールアウトのためにレプリケーションを使用する」を参照してください。 |
|
A.14.8. |
MySQL レプリケーションによってシステムのパフォーマンスが向上するのは、どのような場合でどの程度向上しますか。 |
MySQL レプリケーションは、読み取りが頻繁に行われ、書き込みはそれほどないシステムにもっとも適しています。 理論上、単一ソース/複数レプリケーション設定を使用すると、ネットワーク帯域幅が不足するか、ソースが処理できない時点まで更新負荷が増大するまで、レプリカを追加することでシステムをスケーリングできます。
追加されたメリットが平準化を開始する前に使用できるレプリカの数、およびサイトのパフォーマンスを向上させるためには、クエリーパターンを把握し、典型的なソースと典型的なレプリカでの読取りおよび書込みのスループット間の関係をベンチマークして経験的に判断する必要があります。 ここでは、架空のシステムのレプリケーションの構成を単純に計算した例を示します。
システムのロードは 10% の書き込みと 90% の読み取りで構成されていて、ベンチマークによって
9 *
最後の方程式は、最大可能読取り速度が 1,200/秒で、書込み当たり 9 読取りの比率が指定された場合の、 この分析によって、次の結論が導かれます。
これらの計算では、無限のネットワーク帯域幅が想定され、システムで重要となる可能性のあるその他のいくつかの要因は無視されます。 多くの場合、
|
|
A.14.9. |
冗長性または高可用性を持たせるには、レプリケーションをどのように使用すればよいですか。 |
冗長性の実装方法は、アプリケーションおよび状況によってまったく異なります。 高可用性ソリューション (自動フェイルオーバーを使用) では、アクティブな監視と、元の MySQL サーバーからレプリカへのフェイルオーバーサポートを提供するカスタムスクリプトまたはサードパーティツールが必要です。 プロセスを手動で処理するには、新しいサーバーと通信するようにアプリケーションを変更するか、MySQL サーバーの DNS を障害が発生したサーバーから新しいサーバーに調整して、障害が発生したソースから事前構成済レプリカに切り替えることができます。 詳細およびソリューションの例については、セクション17.4.8「フェイルオーバー中のソースの切替え」を参照してください。 |
|
A.14.10. |
レプリケーションソースサーバーがステートメントベースまたは行ベースのバイナリロギング形式を使用しているかどうかを確認するにはどうすればよいですか。 |
表示される値は、常に |
|
A.14.11. |
行ベースのレプリケーションを使用するようレプリカに指示するにはどうすればよいですか。 |
レプリカは、使用するフォーマットを自動的に認識します。 |
|
A.14.12. |
|
|
|
A.14.13. |
レプリケーションは混合オペレーティングシステムで機能しますか (たとえば、ソースは Linux 上で実行され、レプリカは macOS と Windows 上で実行されます)。 |
はい。 |
|
A.14.14. |
混在ハードウェアアーキテクチャでレプリケーションは機能しますか (たとえば、ソースは 64 ビットマシン上で実行され、レプリカは 32 ビットマシン上で実行されます)。 |
はい。 |