共用方式為


MySQL 至適用於 MySQL 的 Azure 資料庫資料移轉 - MySQL 結構描述移轉

MySQL 結構描述移轉是一項新功能,可讓使用者移轉資料庫、資料表、檢視、觸發程序、事件、預存程序和函式等物件的結構描述。 這項功能適合用於在開始移轉之前,將準備目標資料庫所需的某些工作自動化。

目前的實作

在目前的實作中,當使用者設定 DMS 移轉專案時,可以在 [選取伺服器物件] 區段底下的 [選取資料庫] 索引標籤中選取他們想要移轉的伺服器物件 (檢視、觸發程序、事件、常式)。 此外,他們可以選取 [選取資料庫] 區段之下要移轉其結構描述的資料庫。

螢幕擷取畫面,其中顯示選取資料庫。

若要移轉資料表物件的結構描述,請導覽至 [選取資料表 ] 索引標籤。在填入索引標籤之前,DMS 會從來源和目標上的所選資料庫擷取資料表,然後判斷資料表是否存在並包含資料。 如果您在來源資料庫中選取目標資料庫上不存在的資料表,則預設會選取 [移轉結構描述] 底下的方塊。 對於確實存在於目標資料庫中的資料表,附註指出選取的資料表已經包含且將會被截斷。 此外,如果目標伺服器上的資料表結構描述不符合來源上的結構描述,則會在移轉繼續之前卸除該資料表。

螢幕擷取畫面,其中顯示選取資料表。

當您繼續下一個索引標籤時,DMS 會驗證您的輸入,並確認在沒有結構描述移轉輸入的情況下選取的資料表相符。 驗證通過後,您即可開始移轉案例。

開始移轉之後,隨著移轉進行,系統會先建立每個資料表,再將其資料從來源移轉至目標。 除了在資料移轉完成後移轉的觸發程序和檢視之外,資料遷移前會為資料表建立其他物件。

結構描述移轉的運作方式

MySQL 的 SHOW CREATE 語法支援綱目遷移,以從來源收集物件的綱目資訊。 將物件的結構描述從來源遷移至目標時,DMS 會處理輸入且個別地遷移物件。 DMS 也會將定序、字元集以及 SHOW CREATE 查詢所提供的其他相關資訊,包裝至建立查詢中,然後傳送至目標進行處理。

在任何資料移轉之前,[常式] 和 [事件] 會先移轉。 每個個別資料表的結構描述都會在資料表的資料移動開始之前立即移轉。 觸發程序會在資料移轉部分之後移轉。 對於檢視,MySQL 會驗證檢視的內容而且其可相依於其他資料表,因此 DMS 會在資料庫資料開始移動之前,先為檢視建立資料表,然後卸除暫存資料表並建立檢視。

查詢來源和目標時,如果發生暫時性錯誤,DMS 會重試查詢。 不過,如果發生 DMS 無法從中復原的錯誤 (例如,執行版本升級移轉時語法無效),則 DMS 會失敗並在完成時回報該錯誤訊息。 如果建立資料表時發生失敗,則不會移轉該資料表的資料,但會嘗試其他所選資料表的資料和結構描述移轉。 如果事件、常式或在為檢視建立暫存資料表時發生無法復原的錯誤,則在針對所選的資料表以及緊接在資料移轉部分後移轉的物件執行移轉之前,移轉就會失敗。

由於已針對檢視建立暫存資料表,如果遷移檢視失敗,則暫存資料表會留在目標上。 修正基礎問題並重試移轉之後,DMS 會在建立檢視之前刪除該資料表。 或者,如果選擇在未來的移轉中不對檢視使用結構描述移轉,則必須在手動移轉檢視之前手動刪除暫存資料表。

先決條件

若要順利完成結構描述移轉,請確定已備妥下列必要條件。

  • READ 來源資料庫的權限。

  • SELECT 從資料庫中選取物件的權限

  • 如果移轉檢視,使用者必須具有權限 SHOW VIEW

  • 如果移轉觸發程式,使用者必須具有權限 TRIGGER

  • 如果移轉常式 (程序和/或函式),則必須在常式的 definer 子句中命名使用者。 或者,根據版本,使用者必須具有下列權限:

    • 針對 5.7 版本,擁有 SELECT 存取 mysql.proc 資料表的權限。

    • 針對 8.0,應具有 SHOW_ROUTINE 專用權,或者在包含常式的範圍內獲授 CREATE ROUTINEALTER ROUTINEEXECUTE 專用權。

  • 如果移轉事件,使用者必須具有 EVENT 要從中顯示事件之資料庫的專用權。

限制

  • 移轉非資料表物件時,DMS 不支援重新命名資料庫。

  • 當移轉至已啟用 bin_log 的目標伺服器時,應該啟用 log_bin_trust_function_creators 以允許建立常式和觸發程序。

  • 目前不支援移轉物件的 DEFINER 子句。 所有在來源上具有 definer 的物件類型都會卸除,並在移轉之後,資料表的預設 definer 會設定為用來執行移轉的登入。

  • 如果版本相容性有重大變更,則不支援某些版本升級。 如需版本升級的詳細資訊,請參閱 MySQL 文件。

  • 目前,我們只能在資料移動過程中遷移結構描述。 如果未選取任何資料移動,則不會發生結構描述移轉。 如果已選取資料表進行結構描述移轉,則會選取該資料表進行資料移動。