MySQL Shell 8.4  /  MySQL Shell 公用程式  /  複製實例、結構描述和表格

11.7 複製實例、結構描述和表格

本節說明 MySQL Shell 複製公用程式

關於公用程式

複製公用程式可讓您在 MySQL 實例之間複製 DDL 和資料,而無需中介儲存。資料會從來源串流到目的地。

大約預先配置 32MB 的記憶體來儲存中繼資料檔案,這些檔案會在讀取時捨棄,並處理複製。

可以從來源複製到 HeatWave Service 資料庫系統。如果您將資料庫系統定義為目標,則公用程式會偵測到這一點,並預設啟用 HeatWave Service 相容性檢查。如需有關這些檢查的詳細資訊,請參閱第 11.5 節:「實例傾印公用程式、結構描述傾印公用程式和表格傾印公用程式」

為了易於使用,複製公用程式將傾印和載入公用程式合併為單一作業。載入和傾印公用程式可用的大部分選項也適用於複製公用程式,並在以下各節中說明。

需求和限制

  • 複製公用程式使用 LOAD DATA LOCAL INFILE 陳述式來上傳資料,因此目標伺服器上的 local_infile 系統變數必須設定為 ON。您可以在執行複製公用程式之前,在目標實例上發出下列陳述式來執行此操作

    SET GLOBAL local_infile = 1;

    為了避免 LOAD DATA LOCAL 中已知的潛在安全性問題,當 MySQL 伺服器以檔案傳輸要求回覆公用程式的 LOAD DATA 要求時,公用程式只會傳送預先決定的資料區塊,並忽略伺服器嘗試的任何特定要求。如需更多資訊,請參閱LOAD DATA LOCAL 的安全性考量

  • 複製公用程式僅支援 MySQL Server 版本的正式發行 (GA)。

  • 載入複製的目標 MySQL 實例需要 MySQL 5.7 或更新版本。

  • 實例或結構描述中的物件名稱必須使用 latin1utf8 字元集。

  • 只有使用 InnoDB 儲存引擎的表格才能保證資料一致性。

  • 用來執行公用程式的使用者帳戶在所有相關結構描述上必須擁有的最低權限集如下:EVENTRELOADSELECTSHOW VIEWTRIGGER

    • 如果 consistent 選項設定為 true (預設值),則如果後者不可用,則所有複製表格上的 LOCK TABLES 權限可以取代 RELOAD 權限。

    • 如果使用者帳戶沒有 BACKUP_ADMIN 權限且無法執行 LOCK INSTANCE FOR BACKUP,則公用程式會在複製期間進行額外的一致性檢查。如果此檢查失敗,則會停止實例複製,但結構描述複製或表格複製會繼續,並傳回錯誤訊息以提醒使用者一致性檢查失敗。

    • 如果 consistent 選項設定為 false,則不需要 BACKUP_ADMINRELOAD 權限。

  • 用來執行公用程式的使用者帳戶需要 REPLICATION CLIENT 權限,以便公用程式能夠在後設資料中包含二進位記錄檔名稱和位置。如果使用者 ID 沒有該權限,複製會繼續,但不包含二進位記錄資訊。在將複製的資料載入複本伺服器後,可以使用二進位記錄資訊,使用 CHANGE REPLICATION SOURCE TO 陳述式的 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 選項,設定與非 GTID 來源伺服器的複寫。

  • 公用程式會將不安全以文字形式儲存 (例如 BLOB) 的資料類型資料行轉換為 Base64。因此,這些資料行的大小不得超過目標 MySQL 實例上設定的 max_allowed_packet 系統變數值 (以位元組為單位) 的約 0.74 倍。

  • 為了與 HeatWave Service 相容,所有表格都必須使用 InnoDB 儲存引擎。如果您將資料庫系統定義為目標,則公用程式會偵測到這一點,預設啟用 HeatWave Service 相容性檢查,並檢查來源中發現的任何例外狀況,而且 compatibility 選項會變更複製,以使用 InnoDB 取代其他儲存引擎。

  • 對於實例和結構描述複製公用程式,為了與 HeatWave Service 相容,實例或結構描述中的所有表格都必須位於 MySQL 資料目錄中,而且必須使用預設結構描述加密。

  • HeatWave Service 使用 partial_revokes=ON,這表示在包含萬用字元 (例如 _%) 的結構描述上的資料庫層級使用者授與會回報為錯誤。

    您也可以使用相容性選項 ignore_wildcard_grantsstrip_invalid_grants

    如需更多資訊,請參閱適用於 HeatWave Service 和 Oracle Cloud Infrastructure 的選項

  • 為了與 HeatWave Service 相容,許多其他安全性相關的限制和需求適用於表格空間和權限等項目。compatibility 選項會自動變更複製以解決部分相容性問題。您可能需要 (或偏好) 手動進行一些變更。如需更多詳細資訊,請參閱 compatibility 選項的說明。

  • 對於使用群組複寫的 HeatWave Service 高可用性,每個表格都需要主索引鍵。MySQL Shell 會檢查並回報複製中缺少主索引鍵的任何表格錯誤。compatibility 選項可以設定為忽略缺少的主索引鍵 (如果您不需要它們),或在不存在主索引鍵時將其新增至不可見的資料行。如需詳細資訊,請參閱 compatibility 選項的說明。如果可以,請考慮在複製之前在來源伺服器上的表格中建立主索引鍵,而不要在公用程式中管理此作業。

  • 如果來源是 MySQL 5.7,而目標是資料庫系統,則會自動執行 util.checkForServerUpgrade。會根據複製中包含的物件類型執行升級前檢查。

  • 複製公用程式不支援進度恢復。

執行公用程式

複製實例、複製結構描述和複製表格公用程式使用 MySQL Shell 全域工作階段來取得執行複製的 MySQL 伺服器的連線詳細資訊。您必須先開啟全域工作階段 (可以使用 X Protocol 連線或傳統的 MySQL 通訊協定連線),然後再執行其中一個公用程式。公用程式會為每個執行緒開啟自己的工作階段,從全域工作階段複製連線壓縮和 SSL 選項等選項,並且不再進一步使用全域工作階段。

  • util.copyInstance(connectionData[, options]):啟用將整個實例複製到另一個伺服器。

    • connectionData:定義您要複製到的目的地伺服器的連線詳細資訊。

      這可以是下列其中一項

      • 簡單的 user@host 字串。

      • 連線 URI,例如 mysql://user@host:port?option=value,option=value

      • 連線字典,例如 { "scheme": "mysql", "user": "u", "host": "h", "port": 1234, "option": "value" }

  • util.copySchemas(schemaList, connectionData[, options]):啟用將一個或多個結構描述複製到另一個伺服器。

    • schemaList:定義要從目前伺服器複製到目標伺服器的綱要清單。

  • util.copyTables(schemaName, tablesList, connectionData[, options]):啟用將一個或多個表格從一個綱要複製到另一個伺服器。

    • schemaName:定義要從中複製表格的綱要名稱。

    • tablesList:定義要從指定綱要複製到目標伺服器的表格名稱。

複製控制的選項

dryRun: [ true | false ]

顯示具有指定選項集的複製相關資訊,以及 HeatWave 服務相容性檢查的結果,但不會繼續執行複製。設定此選項可讓您在開始複製之前列出所有相容性問題。預設值為 false

showProgress: [ true | false ]

顯示 (true) 或隱藏 (false) 複製的進度資訊。預設值為,如果 stdout 是終端機 (tty),例如當 MySQL Shell 處於互動模式時,則為 true,否則為 false。進度資訊包括要複製的估計總行數、到目前為止已複製的行數、完成百分比,以及每秒的行和位元組輸送量。

threads: int

用來從 MySQL 執行個體複製資料區塊的平行執行緒數。每個執行緒都有其與 MySQL 執行個體的連線。預設值為 4。

複製公用程式需要兩倍的執行緒數,一個執行緒用於複製,一個執行緒用於寫入。如果將執行緒設定為 N,則會使用 2N 個執行緒。

maxRate: "string"

複製期間每個執行緒每秒讀取資料輸送量的最大位元組數。可以使用單位後綴 k 表示千位元組,M 表示百萬位元組,以及 G 表示十億位元組 (例如,設定 100M 將輸送量限制為每個執行緒每秒 100 百萬位元組)。設定 0 (預設值) 或將選項設定為空字串,表示未設定任何限制。

defaultCharacterSet: "string"

MySQL Shell 開啟至目標伺服器的階段作業連線期間要使用的字元集。預設值為 utf8mb4。系統變數 character_set_clientcharacter_set_connectioncharacter_set_results 的階段作業值,會針對每個連線設定為此值。字元集必須獲得 character_set_client 系統變數的允許,且必須由 MySQL 執行個體支援。

checksum: [true|false]

如果啟用,在傾印時,會產生一個中繼資料檔案 @.checksums.json 與複製一起。此檔案包含複製的檢查碼資料,可進行資料驗證。

如果在複製期間 checksum: true,則適用下列條件

  • 如果 ddlOnly:falsechunking:true,則會為每個複製的表格和分割區區塊產生檢查碼。

  • 如果 ddlOnly:falsechunking:false,則會為每個複製的表格和表格分割區產生檢查碼。

  • 如果 ddlOnly:true,則會為每個複製的表格和表格分割區產生檢查碼。

如果啟用,公用程式會在載入對應資料後檢查產生的檢查碼資料。驗證僅限於傾印的資料,忽略產生的資料,例如不可見的主索引鍵。

如果檢查碼不符或遺失表格且無法驗證,則會傳回錯誤。

如果 checksum: true 但未載入任何資料 (因為 loadData: false 或未傾印任何資料),則公用程式會根據受影響表格的目前內容驗證傾印的檢查碼資訊。

  • 如果表格不存在,則會為每個遺失的表格顯示錯誤。

  • 如果 checksum: truedryRun: true,則不會驗證檢查碼。會顯示一則訊息,指出未執行任何驗證。

consistent: [ true | false ]

透過在複製期間鎖定執行個體以進行備份,來啟用 (true) 或停用 (false) 一致的資料複製。預設值為 true

當設定為 true 時,公用程式會使用 FLUSH TABLES WITH READ LOCK 陳述式 (如果用來執行公用程式的使用者 ID 具有 RELOAD 權限) 來設定全域讀取鎖定,或者使用 LOCK TABLES 陳述式來設定一系列表格鎖定 (如果使用者 ID 沒有 RELOAD 權限,但確實具有 LOCK TABLES)。每個執行緒的交易都會使用陳述式 SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READSTART TRANSACTION WITH CONSISTENT SNAPSHOT 來啟動。當所有執行緒都啟動其交易時,會鎖定執行個體以進行備份 (如 鎖定執行個體以進行備份和解除鎖定執行個體陳述式中所述),並釋放全域讀取鎖定。

如果使用者帳戶沒有 BACKUP_ADMIN 權限,且無法執行 LOCK INSTANCE FOR BACKUP,則公用程式會在複製期間執行額外的一致性檢查。如果此檢查失敗,則會停止執行個體複製,但綱要或表格複製會繼續並傳回錯誤訊息,以提醒使用者一致性檢查失敗。

skipConsistencyChecks: [ true | false ]

啟用 (true) 或停用 (false) 在 consistent: true 時執行的額外一致性檢查。預設值為 false

如果 consistent: false,則會忽略此選項。

schema: "string"

必須將複製的綱要內容載入其中的目標綱要。

如果綱要不存在,則會建立綱要,並將複製的綱要載入到該新綱要。如果新綱要名稱與複製中的綱要名稱不同,則複製會載入到新綱要,但載入的資料不會進行任何變更。也就是說,資料中仍會保留對舊綱要名稱的任何參照。所有預存程序、檢視等等,都會參照原始綱要,而不是新綱要。

單一綱要複製或導致單一綱要的篩選選項支援此載入選項。也就是說,如果您使用 copyInstance 將資料複製到新的執行個體,如果來源只包含一個綱要,或定義的篩選條件導致將單一綱要複製到目的地,則您可以將所有資料複製到單一綱要。

skipBinlog: [ true | false ]

透過發出 SET sql_log_bin=0 陳述式,在複製期間公用程式使用的階段作業中,略過目標 MySQL 執行個體的二進位記錄。預設值為 false,因此二進位記錄預設為啟用。對於 HeatWave 服務資料庫系統,不使用此選項,如果您嘗試將其設定為 true,則匯入會停止並顯示錯誤。對於其他 MySQL 執行個體,如果您要將來源 MySQL 執行個體的 gtid_executed GTID 集套用至目標 MySQL 執行個體,無論是使用 updateGtidSet 選項還是手動套用,都請務必將 skipBinlog 設定為 true。當目標 MySQL 執行個體正在使用 GTID 時 (gtid_mode=ON),將此選項設定為 true 可防止在執行匯入時產生和指派新的 GTID,以便可以使用來自來源伺服器的原始 GTID 集。使用者帳戶必須具有設定 sql_log_bin 系統變數的必要權限。

ignoreVersion: [ true | false ]

即使複製資料的來源主要版本號碼與目的地主要版本號碼不連續 (例如從 5.6 到 8.1),仍會執行複製。預設值為 false,表示如果主要版本號碼不同,則會發出錯誤並停止複製。當此選項設定為 true 時,會發出警告並繼續複製。請注意,只有在複製的綱要與新的主要版本沒有相容性問題時,複製才會成功。

注意

在連續的主要版本之間進行複製 (例如從 5.7 到 8.1) 時,不需要 ignoreVersion

在嘗試使用 ignoreVersion 選項進行複製之前,請使用 MySQL Shell 的升級檢查器公用程式 checkForServerUpgrade() 來檢查來源執行個體,並修正公用程式識別的任何相容性問題,然後再嘗試複製。

ignoreExistingObjects: [ true | false ]

複製時即使目標實例中已存在相同的物件也繼續複製。預設值為 false,表示當發現重複物件時,會發出錯誤並停止複製。當此選項設定為 true 時,會報告重複的物件,但不會產生錯誤,且複製會繼續進行。使用此選項時應謹慎,因為該公用程式不會檢查目標 MySQL 實例中物件的內容是否與傾印檔案中的內容不同,因此產生的複製可能會包含不正確或無效的資料。另一種策略是使用 excludeTables 選項排除您已經複製的資料表,並確認傾印檔案中的物件與目標 MySQL 實例中匯入的物件相同。最安全的選擇是在重新啟動複製之前,從目標 MySQL 實例中移除重複的物件。

handleGrantErrors: [ abort | drop_account | ignore ]

發生與 GRANTREVOKE 錯誤相關的錯誤時所採取的動作。

  • abort:(預設) 停止複製程序並顯示錯誤。

  • drop_account:刪除帳戶並繼續複製程序。

  • ignore:忽略錯誤並繼續複製程序。

maxBytesPerTransaction: number

在單一 LOAD DATA 陳述式中,可從資料區塊複製的最大位元組數。如果資料檔案超過 maxBytesPerTransaction 值,則多個 LOAD DATA 陳述式會從檔案中載入小於或等於 maxBytesPerTransaction 值的區塊資料。

可以使用單位後綴 k 表示千位元組、M 表示百萬位元組,以及 G 表示十億位元組。最小值為 4096 個位元組。如果指定較小的值,則會擲回例外狀況。如果未設定 maxBytesPerTransaction 選項,則會改用 bytesPerChunk 值。

如果資料檔案包含的列大於 maxBytesPerTransaction 設定,則會以單一 LOAD DATA 陳述式請求該列的資料。對於第一個遇到的超過 maxBytesPerTransaction 設定的列,會發出警告。

此選項的預期用途是在資料檔案太大而超出目標伺服器的限制時,以較小的區塊載入資料,例如伺服器的 group_replication_transaction_size_limitmax_binlog_cache_size 設定所定義的限制。例如,如果您在載入資料時收到錯誤訊息 "MySQL Error 1197 (HY000): Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage",請將 maxBytesPerTransaction 設定為小於或等於伺服器實例 max_binlog_cache_size 設定的值。

sessionInitSql: list of strings

在每個用於將資料複製到目標 MySQL 實例的用戶端工作階段開始時執行的 SQL 陳述式清單。您可以使用此選項來變更工作階段變數。例如,下列陳述式會在匯入期間,略過目標 MySQL 實例上公用程式使用的工作階段的二進位記錄,並增加可用於建立索引的執行緒數。

sessionInitSQL: ["SET SESSION sql_log_bin=0;", "SET SESSION innodb_ddl_threads=8,"]

如果執行 SQL 陳述式時發生錯誤,複製會停止並傳回錯誤訊息。

tzUtc: [ true | false ]

在複製開始時包含設定時區為 UTC 的陳述式。輸出中的所有時間戳記資料都會轉換為此時區。預設值為 true。將時區設定為 UTC 有助於在具有不同時區的伺服器之間移動資料,或處理具有多個時區的一組資料。如果偏好保留原始時間戳記,請將此選項設定為 false

chunking: [ true | false ]

啟用 (true) 或停用 (false) 資料表的區塊處理,這會將每個資料表的資料分割成多個檔案。預設值為 true。使用 bytesPerChunk 來指定區塊大小。如果您將區塊處理選項設定為 false,則不會進行區塊處理,且公用程式會為每個資料表建立一個資料檔案。

如果資料表沒有主索引鍵或唯一索引,則會根據資料表中的列數、平均列長度和 bytesPerChunk 值來進行區塊處理。

bytesPerChunk: "string"

設定啟用區塊處理時要寫入每個資料檔案的大約位元組數。可以使用單位後綴 k 表示千位元組、M 表示百萬位元組,以及 G 表示十億位元組。預設值為 64 MB (64M),最小值為 128 KB (128k)。指定此選項會隱含地將 chunking 設定為 true

loadIndexes: [ true | false ]

建立 (true) 或不建立 (false) 資料表的次要索引。預設值為 true。當此選項設定為 false 時,匯入期間不會建立次要索引,您必須在之後建立它們。如果您要分別載入 DDL 檔案和資料檔案,並且如果您想要在載入 DDL 檔案後變更資料表結構,這會很有用。之後,您可以再次執行傾印載入公用程式,並將 loadIndexes 設定為 true,並將 deferTableIndexes 設定為 all,以建立次要索引。

MySQL Shell 會使用 MySQL Server 的平行索引建立。資料表中的所有索引都會同時加入。

如需限制和組態,請參閱 為線上 DDL 作業設定平行執行緒

deferTableIndexes: [ off | fulltext | all ]

將次要索引的建立延遲到載入資料表資料之後。這可以減少載入時間。off 表示所有索引都會在載入資料表期間建立。預設設定 fulltext 只會延遲全文索引。all 會延遲所有次要索引,並且只會在載入資料表期間建立主索引,以及在包含自動遞增值的欄上定義的索引。

analyzeTables: [ off | on | histogram ]

在載入資料表後,對資料表執行 ANALYZE TABLEon 會分析所有資料表,而 histogram 只會分析在傾印中儲存直方圖資訊的資料表。預設值為 off。即使資料已載入,您也可以使用此選項執行傾印載入公用程式來分析資料表。

updateGtidSet: [ off | append | replace ]

將來源 MySQL 實例中的 gtid_executed GTID 集合 (記錄在傾印中繼資料中) 套用至目標 MySQL 實例上的 gtid_purged GTID 集合。gtid_purged GTID 集合會保存伺服器上已套用的所有交易的 GTID,但伺服器上的任何二進位記錄檔中都不存在這些 GTID。預設值為 off,表示不會套用 GTID 集合。

當 Group Replication 在目標 MySQL 實例上執行時,請勿使用此選項。

對於非 HeatWave Service DB 系統實例的 MySQL 實例,當您設定 appendreplace 以更新 GTID 集合時,也請將 skipBinlog 選項設定為 true。這可確保來源伺服器上的 GTID 與目標伺服器上的 GTID 相符。對於 HeatWave Service DB 系統實例,不會使用此選項。

對於來自 MySQL 8.0 的目標 MySQL 實例,您可以將此選項設定為 append,這會將來源 MySQL 實例中的 gtid_executed GTID 集合附加至目標 MySQL 實例上的 gtid_purged GTID 集合。要套用的 gtid_executed GTID 集合 (顯示在 @.json 傾印檔案的 gtidExecuted 欄位中) 不得與目標 MySQL 實例上已有的 gtid_executed 集合相交。例如,您可以在將來自不同來源 MySQL 實例的結構描述匯入至已具有來自其他來源伺服器的結構描述的目標 MySQL 實例時,使用此選項。

您也可以將 replace 用於來自 MySQL 8.0 的目標 MySQL 實例,以將目標 MySQL 實例上的 gtid_purged GTID 集合取代為來源 MySQL 實例中的 gtid_executed GTID 集合。若要執行此操作,來源 MySQL 實例中的 gtid_executed GTID 集合必須是目標 MySQL 實例上的 gtid_purged GTID 集合的超集合,且不得與目標的 gtid_executed GTID 集合中不在其 gtid_purged GTID 集合中的交易集合相交。

對於 MySQL 5.7 的目標 MySQL 實例,請將選項設定為 replace,這會將目標 MySQL 實例上的 gtid_purged GTID 集合,替換為來源 MySQL 實例的 gtid_executed GTID 集合。在 MySQL 5.7 中,若要執行此操作,目標 MySQL 實例上的 gtid_executedgtid_purged GTID 集合必須為空,因此該實例必須是未使用的,且沒有先前匯入的 GTID 集合。

若要在匯入後套用 GTID 集合,請使用 MySQL Shell 的 \sql 命令(或進入 SQL 模式),在連線的 MySQL 實例上發出下列陳述式,複製傾印中繼資料中 @.json 傾印檔案的 gtidExecuted 欄位中的 gtid_executed GTID 集合。

shell-js> \sql SET @@GLOBAL.gtid_purged= "+gtidExecuted_set";

此陳述式適用於 MySQL 8.0,它會將來源 MySQL Server 實例的 gtid_executed GTID 集合,加入至目標 MySQL 實例的 gtid_purged GTID 集合。對於 MySQL 5.7,必須省略加號 (+),且目標 MySQL 實例上的 gtid_executedgtid_purged GTID 集合必須為空。如需詳細資訊,請參閱目標 MySQL 實例版本中 gtid_purged 系統變數的描述。

相容性:字串陣列

針對副本中的所有表格,套用與 HeatWave Service 相容的指定需求,並視需要修改傾印檔案。

下列修改可以指定為字串陣列

force_innodb

CREATE TABLE 陳述式變更為對任何尚未使用的表格使用 InnoDB 儲存引擎。

skip_invalid_accounts

移除使用 HeatWave Service 中不支援的外部驗證外掛程式建立的使用者帳戶。此選項也會移除未設定密碼的使用者帳戶,除非未設定密碼的帳戶被識別為角色,在這種情況下,會使用 CREATE ROLE 陳述式複製它。

strip_definers

從檢視表、常式、事件和觸發程序中移除 DEFINER 子句,以便使用預設定義者(叫用結構描述的使用者)建立這些物件,並將檢視表和常式的 SQL SECURITY 子句變更為指定 INVOKER 而非 DEFINER。HeatWave Service 需要特殊權限,才能使用定義者(而非載入結構描述的使用者)建立這些物件。如果您的安全模型需要讓檢視表和常式擁有比查詢或呼叫它們的帳戶更多的權限,則必須在複製結構描述之前手動修改。

strip_restricted_grants

GRANT 陳述式中移除 HeatWave Service 限制的特定權限,因此無法將這些權限授予使用者及其角色(這會導致使用者建立失敗)。如果 Oracle Cloud Infrastructure Compute 執行個體上的管理使用者帳戶本身沒有相關權限,則此選項也會移除系統結構描述(mysqlsys)的 REVOKE 陳述式,因此無法移除它們。

strip_tablespaces

CREATE TABLE 陳述式中移除 TABLESPACE 子句,以便在預設資料表空間中建立所有資料表。HeatWave Service 對資料表空間有一些限制。

ignore_missing_pks

在執行傾印時,讓實例、結構描述或資料表複製公用程式忽略任何遺失的主索引鍵。使用此修改建立的傾印無法載入 HeatWave Service 高可用性執行個體,因為 HeatWave Service 高可用性(使用群組複寫)需要主索引鍵。若要自動新增遺失的主索引鍵,請使用 create_invisible_pks 修改,或考慮在來源伺服器上的資料表中建立主索引鍵。

ignore_wildcard_grants

如果啟用,則會忽略來自具有萬用字元結構描述的授權的錯誤,這些錯誤在啟用 partial_revokes 系統變數的系統中會以不同的方式解譯。

strip_invalid_grants

如果啟用,則會移除複製使用者時會失敗的授權陳述式。例如,參照不存在的特定常式的授權。

create_invisible_pks

為每個不包含主索引鍵的資料表新增隱形欄位中的主索引鍵。此修改可讓將某些資料表缺少主索引鍵的副本載入 HeatWave Service 高可用性執行個體。HeatWave Service 高可用性(使用群組複寫)需要主索引鍵。

此修改不會變更資料,因為資料表在由複製公用程式處理之前不會包含隱形欄位。隱形欄位(名為「my_row_id」)對使用上傳資料表的應用程式沒有影響。

篩選選項

where: {"schemaName.tableName": "string"}

一個鍵值配對,包含有效的表格識別碼,格式為 schemaName.tableName,以及用於篩選所複製資料的有效 SQL 條件運算式。

注意

只有在執行時才會驗證 SQL。如果您正在複製許多資料表,則任何與 SQL 語法相關的問題都只會在流程後期看到。因此,建議您先測試 SQL 條件,然後再在長時間執行的匯出流程中使用它。

partitions: {schemaName.tableName: ["string","string",..]}

一個鍵值配對,包含有效的表格識別碼,格式為 schemaName.tableName,以及有效的分割區清單。

例如,若要僅從資料表 schema.table 複製名為 p1p2 的分割區:partitions: {'schema.table':["p1", "p2"]}

ddlOnly: [ true | false ]

將此選項設定為 true,則只會包含副本中項目的 DDL 檔案,而不複製資料。預設值為 false

dataOnly: [ true | false ]

將此選項設定為 true,則只會包含副本中項目的資料檔案,而不包含 DDL 檔案。預設值為 false

users: [ true | false ]

(僅限實例複製公用程式)在副本中包含 (true) 或排除 (false) 使用者及其角色和授權。預設值為 true。結構描述和資料表複製公用程式不會在副本中包含使用者、角色或授權。

您可以使用 excludeUsersincludeUsers 選項來指定要從副本中排除或包含的個別使用者帳戶。

注意

如果從 MySQL 5.6 實例複製使用者,執行複製的使用者必須具有 SUPER 權限。

excludeUsers: 字串陣列

(僅限實例複製公用程式)從副本中排除已命名的使用者帳戶。用來排除不接受匯入 HeatWave Service DB 系統的使用者帳戶,或已經存在或不想要在目標 MySQL 實例上的使用者帳戶。對於使用使用者名稱和主機名稱定義的帳戶,請以 "'user_name'@'host_name'" 格式指定每個使用者帳戶字串,或對於僅使用使用者名稱定義的帳戶,請以 "'user_name'" 格式指定。如果您未提供主機名稱,則會排除具有該使用者名稱的所有帳戶。

includeUsers: 字串陣列

(僅限實例複製公用程式)在副本中僅包含已命名的使用者帳戶。請針對 excludeUsers 選項指定每個使用者帳戶字串。如果副本中只需要少數使用者帳戶,則將此選項作為 excludeUsers 的替代方案。您也可以同時指定這兩個選項,以包含某些帳戶並排除其他帳戶。

excludeSchemas: 字串陣列

(僅限實例複製公用程式)從副本中排除已命名的結構描述。請注意,information_schemamysqlndbinfoperformance_schemasys 結構描述一律會從實例副本中排除。

includeSchemas: 字串陣列

(僅限實例複製公用程式)在副本中僅包含已命名的結構描述。您無法透過在此選項上命名來包含 information_schemamysqlndbinfoperformance_schemasys 結構描述。如果您想要複製一或多個這些結構描述,可以使用結構描述複製公用程式 util.copySchemas() 執行此操作。

excludeTables: 字串陣列

(僅限執行個體與結構描述複製工具) 從複製中排除指定的資料表(DDL 和資料)。資料表名稱必須使用有效的結構描述名稱進行限定,並且在需要時使用反引號字元括起來。請注意,mysql.apply_statusmysql.general_logmysql.schemamysql.slow_log 資料表的資料始終會從結構描述複製中排除,即使其 DDL 陳述式會包含在內,且您無法透過在其他選項或工具中指定資料表名稱來包含這些資料。

excludeTables: 字串陣列

(僅限執行個體與結構描述複製工具) 僅在複製中包含指定的資料表。資料表名稱必須使用有效的結構描述名稱進行限定,並且在需要時使用反引號字元括起來。

includeTables: 字串陣列

events: [ true | false ]

(僅限執行個體與結構描述複製工具) 在複製中,包含 (true) 或排除 (false) 每個結構描述的事件。預設值為 true

excludeEvents: 字串陣列

(僅限執行個體與結構描述複製工具) 從複製中排除指定的事件。事件名稱必須使用有效的結構描述名稱進行限定,並且在需要時使用反引號字元括起來。

includeEvents: 字串陣列

(僅限執行個體與結構描述複製工具) 僅在複製中包含指定的事件。事件名稱必須使用有效的結構描述名稱進行限定,並且在需要時使用反引號字元括起來。

routines: [ true | false ]

(僅限執行個體與結構描述複製工具) 在複製中,包含 (true) 或排除 (false) 每個結構描述的函數和預存程序。預設值為 true。請注意,即使 routines 設定為 true,也不會包含使用者定義的函數。

excludeRoutines: 字串陣列

(僅限執行個體與結構描述複製工具) 從複製中排除指定的函數和預存程序。常式名稱必須使用有效的結構描述名稱進行限定,並且在需要時使用反引號字元括起來。

includeRoutines: 字串陣列

(僅限執行個體與結構描述複製工具) 僅在複製中包含指定的函數和預存程序。常式名稱必須使用有效的結構描述名稱進行限定,並且在需要時使用反引號字元括起來。

all: [ true | false ]

(僅限資料表複製工具) 將此選項設定為 true,即可在複製中包含指定結構描述的所有檢視和資料表。預設值為 false。當您使用此選項時,請將 tables 參數設定為空陣列。

triggers: [ true | false ]

(所有複製工具) 在複製中,包含 (true) 或排除 (false) 每個資料表的觸發程序。預設值為 true

excludeTriggers: 字串陣列

(所有複製工具) 從複製中排除指定的觸發程序。觸發程序名稱必須使用有效的結構描述名稱和資料表名稱 (schema.table.trigger) 進行限定,並且在需要時使用反引號字元括起來。您可以透過使用此選項指定結構描述名稱和資料表名稱 (schema.table),來排除特定資料表的所有觸發程序。

includeTriggers: 字串陣列

(所有複製工具) 僅在複製中包含指定的觸發程序。觸發程序名稱必須使用有效的結構描述名稱和資料表名稱 (schema.table.trigger) 進行限定,並且在需要時使用反引號字元括起來。您可以透過使用此選項指定結構描述名稱和資料表名稱 (schema.table),來包含特定資料表的所有觸發程序。

範例

  • 以下範例說明如何使用複製工具

    JS> util.copyInstance('mysql://User001@DBSystemIPAddress',{threads: 6, deferTableIndexes: "all", 
        compatibility: ["strip_restricted_grants", "strip_definers", "create_invisible_pks"]})

    將執行個體從本機複製到 HeatWave Service 高可用性資料庫系統

  • 此範例會將執行個體複製到資料庫系統,使用者為 User001,並提供一系列相容性選項以使執行個體與資料庫系統相容。create_invisible_pks 包含在內,因為高可用性資料庫系統會使用 Group Replication,這需要每個資料表都有主鍵。此選項會為每個資料表新增不可見的主鍵。

    util.copySchemas(['sakila'], 'user@localhost:4101',{schema: "mySakilaSchema"})

    將結構描述複製到目標執行個體並重新命名結構描述

  • 此範例會將結構描述的內容從來源複製到目的地的不同名稱結構描述 localhost:4101

    util.copyTables('sakila', ['actor'], 'root@localhost:4101',{schema: "mySakilaSchema"})

    將資料表從結構描述複製到目的地上的另一個結構描述


此範例會將 sakila 結構描述中的 actor 資料表複製到目的地 localhost:4101 上的 mySakilaSchema