首頁 >資料庫 >mysql教程 >如何在不鎖表的情況下為巨大的MySQL生產表建立索引?

如何在不鎖表的情況下為巨大的MySQL生產表建立索引?

Linda Hamilton
Linda Hamilton原創
2024-10-31 00:25:02747瀏覽

How to Create an Index on a Huge MySQL Production Table Without Locking the Table?

在沒有表鎖定的情況下在巨大的MySQL 生產表上建立索引

問題:

您需要🎜>問題:

您需要建立索引在生產環境中的海量MySQL 表上,而不中斷正在進行的操作。

傳統智慧(2015):

在 5.6 之前的 MySQL 版本中,在MyISAM 或 InnoDB 表會阻止寫入作業。

MySQL 5.6 (2017) 中的線上索引更新:

MySQL 5.6 及更高版本支援線上索引更新,讓您可以新增或更新索引刪除索引而不阻塞讀取或寫入。

在不停機的情況下更新架構:

  1. 如果您無法使用MySQL 5.6 或更高版本,可以使用以下方法更新架構無需停機:
  2. 循環主伺服器:啟動新的主伺服器並從現有主伺服器複製寫入。
  3. 在新主伺服器上執行架構更新: 在新主伺服器上進行架構變更。
  4. 交換客戶端:以原子方式將所有客戶端從舊主伺服器遷移到新主伺服器。
更新舊主控:

對舊主控重複相同的過程,將其更新為輔助主控。

Percona 的pt-online-schema-change 工具:

此工具提供了一種在不阻塞操作的情況下更改表架構的替代方法。它會建立一個具有所需結構的新表,進行架構更改,並在替換原始表之前逐步複製原始表中的資料。

Amazon RDS:

Amazon RDS透過讓您建立唯讀副本、對副本進行架構更改,然後將副本提升為新的主伺服器,簡化了流程。這種方法可以最大限度地減少停機時間並簡化切換過程。

以上是如何在不鎖表的情況下為巨大的MySQL生產表建立索引?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn