テーブル ロックを使用せずに大規模な MySQL 本番テーブルにインデックスを作成する
データベースのメンテナンス中に高可用性を維持することは、特に大量のデータを扱う場合に重要です。生産テーブル。数百万行のテーブルにインデックスを追加すると、通常、すべてのデータ操作が停止し、サービスが大幅に中断されます。幸いなことに、いくつかの手法を使用すると、挿入と選択をブロックせずにインデックスを作成できます。
MySQL 5.6 以降
MySQL 5.6 以降では、インデックスの作成と削除の操作はオンラインで実行され、プロセス中にテーブルが読み取りおよび書き込み操作に使用できる状態が維持されます。ただし、この機能は遡及的ではありません。つまり、以前の MySQL バージョンを使用して作成されたテーブルは、このオンライン インデックス作成機能の恩恵を受けられません。
循環マスターの使用
オンライン インデックス作成が有効でない場合利用可能な場合は、循環マスター設定を使用できます。これには、セカンダリ MySQL インスタンスの作成、そこへの運用データベースの複製、セカンダリ インスタンスでのスキーマ更新の実行、および更新されたインスタンスへのすべてのクライアントのアトミックな切り替えが含まれます。この方法では、データ損失や不整合を避けるために、慎重な計画と調整が必要です。
Percona の pt-online-schema-change ツール
pt-online-schema-changeツールは循環マスターアプローチを自動化します。実稼働テーブルの一時コピーを作成し、コピー上のスキーマを更新し、トリガーを使用してデータを同期し、更新されたテーブルにシームレスに切り替えます。このツールは、ダウンタイムを短縮して手動でスキーマを変更するための便利な代替手段を提供します。
RDS リードレプリカ プロモーション
Amazon の RDS 経由で MySQL を使用している場合は、次の機能を利用できます。リードレプリカのプロモーション。これにより、読み取り専用スレーブ インスタンスでスキーマを変更し、そのインスタンスを新しいマスターに昇格させることができます。 RDS はプロセスを簡素化しますが、アプリケーションとデータベースを再構成して再起動するには手動による介入が必要です。
結論
挿入をブロックせずに大規模な運用テーブルにインデックスを作成する選択することは慎重な検討を必要とする課題であり、最適なアプローチは MySQL のバージョンと、専用のツールとサービスの可用性によって異なります。 MySQL 5.6 以降を使用している場合、オンライン インデックス作成によりテーブル ロックが不要になります。それ以外の場合は、循環マスター、pt-online-schema-change、RDS リードレプリカ プロモーションなどの技術を使用して、サービスの中断を最小限に抑え、スキーマ更新中の高可用性を維持する方法を提供します。
以上が操作を中断せずに大規模な MySQL 本番テーブルにインデックスを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。