在設定新的 NDB Cluster 執行個體時,通常需要從現有的 NDB Cluster、MySQL 執行個體或其他來源匯入資料。這些資料最常以以下一種或多種格式提供
由 mysqldump 或其他匯出程式產生的 CSV 檔案。可以使用 mysql 用戶端中的
LOAD DATA INFILE,或使用 NDB Cluster 發行版本提供的 ndb_import 公用程式將這些檔案匯入NDB。有關後者的更多資訊,請參閱第 25.5.13 節,「ndb_import — 將 CSV 資料匯入 NDB」。使用
NDB管理用戶端中的START BACKUP產生的原生NDB備份。若要匯入原生備份,您必須使用作為 NDB Cluster 一部分的 ndb_restore 程式。如需有關使用此程式的更多資訊,請參閱第 25.5.23 節,「ndb_restore — 還原 NDB Cluster 備份」。
從 SQL 檔案匯入資料時,通常不需要強制執行交易或外部索引鍵,並且暫時停用這些功能可以大大加快匯入過程。可以使用 mysql 用戶端,從用戶端工作階段或在命令列上叫用來完成此操作。在 mysql 用戶端工作階段中,您可以使用下列 SQL 陳述式執行匯入
SET ndb_use_transactions=0;
SET foreign_key_checks=0;
source path/to/dumpfile;
SET ndb_use_transactions=1;
SET foreign_key_checks=1;以這種方式執行匯入時,您必須在執行 mysql 用戶端的 source 命令後,重新啟用 ndb_use_transaction 和 foreign_key_checks。否則,在同一工作階段中的後續陳述式也可能在沒有強制執行交易或外部索引鍵限制的情況下執行,這可能會導致資料不一致。
從系統 shell,您可以使用帶有 --init-command 選項的 mysql 用戶端匯入 SQL 檔案,同時停用交易和外部索引鍵的強制執行,如下所示
$> mysql --init-command='SET ndb_use_transactions=0; SET foreign_key_checks=0' < path/to/dumpfile也可以將資料載入 InnoDB 資料表,然後使用 ALTER TABLE ... ENGINE NDB 將其轉換為使用 NDB 儲存引擎。您應該考慮到,特別是對於許多資料表,這可能需要多次這樣的操作;此外,如果使用了外部索引鍵,您必須仔細注意 ALTER TABLE 陳述式的順序,因為外部索引鍵在具有不同 MySQL 儲存引擎的資料表之間不起作用。
您應該知道,本節前面所述的方法並未針對非常大的資料集或大型交易進行最佳化。如果應用程式確實需要大型交易或許多並行交易作為正常操作的一部分,您可能希望增加 MaxNoOfConcurrentOperations 資料節點組態參數的值,這會保留更多記憶體以允許資料節點在其交易協調器意外停止時接管交易。
在 NDB Cluster 資料表上執行大量 DELETE 或 UPDATE 操作時,您可能也希望這樣做。如果可能,請嘗試讓應用程式分批執行這些操作,例如,透過將 LIMIT 新增至此類陳述式。
如果資料匯入操作因任何原因而未成功完成,您應該準備好執行任何必要的清理,包括可能執行一個或多個 DROP TABLE 陳述式、DROP DATABASE 陳述式,或兩者皆是。如果未能這樣做,可能會導致資料庫處於不一致的狀態。