ホームページ  >  記事  >  データベース  >  操作を中断せずに巨大な MySQL 本番テーブルにインデックスを作成するにはどうすればよいでしょうか?

操作を中断せずに巨大な MySQL 本番テーブルにインデックスを作成するにはどうすればよいでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-31 11:52:02594ブラウズ

How Can You Index a Huge MySQL Production Table Without Disrupting Operations?

大規模な MySQL プロダクション テーブルにインデックスを作成する

問題ステートメント:

大規模な MySQL プロダクション テーブルにインデックスを作成するテーブルがデータベースのロックアウトを引き起こす可能性があります。これにより、インデックス作成プロセス中にデータベースへの中断のないアクセスを確保することが困難になります。

解決策:

MySQL 5.6 以降: オンライン インデックス更新

MySQL 5.6 以降、データベースは操作中の増分インデックス更新をサポートします。これは、インデックスの作成または削除を読み取りと書き込みと同時に実行できることを意味し、ブロックのリスクを軽減し、データの整合性を確保します。

MySQL 5.5 以前

MySQL 5.5 以前のバージョンでは、UPDATE 操作アクティブなインデックス更新のあるテーブルではブロックが発生します。これはパフォーマンスに大きな影響を与え、停止を引き起こす可能性があります。

これらの障害を回避するには、次のアプローチを検討してください。

1.循環マスター サーバー:

  • 2 つのサーバーを確立し、1 つはプライマリ マスターとして機能し、もう 1 つはスレーブとして機能します。
  • スレーブ サーバーのインデックス更新を実行します。マスターからの書き込みを複製します。
  • スレーブがマスターに追いつくことを許可し、更新されたスキーマと古いスキーマ間の互換性を確保します。
  • クライアントをマスターからスレーブに原子的に切り替え、スレーブを作成します。更新されたスキーマを持つ新しいマスター。
  • マスター サーバーでプロセスを繰り返し、新しいスレーブにします。

2. Percona の pt-online-schema-change:

  • 元のテーブルと同一の構造を持つ新しいテーブルを作成します。
  • 新しいテーブルのスキーマを更新します。
  • 元のテーブルでトリガーを確立し、コピーとの変更の同期を維持します。
  • 元のテーブルから新しいテーブルにデータをバッチで移行します。
  • 元のテーブルを新しいテーブル。
  • 古いテーブルを削除します。

3. RDS リードレプリカ プロモーション:

Amazon の RDS を使用している場合は、読み取り専用レプリカを作成し、そのレプリカに対してインデックス更新を実行できます。完了したら、レプリカを新しいマスターに昇格させます。このアプローチでは、フェイルオーバーとデータ移行を自動化することでプロセスが簡素化されます。

注: このアプローチでは、更新されたデータベース インスタンスに再接続するためにアプリケーションを再起動する必要があります。

以上が操作を中断せずに巨大な MySQL 本番テーブルにインデックスを作成するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。