本節說明 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 或更新版本。
實例或結構描述中的物件名稱必須使用
latin1
或utf8
字元集。只有使用
InnoDB
儲存引擎的表格才能保證資料一致性。-
用來執行公用程式的使用者帳戶在所有相關結構描述上必須擁有的最低權限集如下:
EVENT
、RELOAD
、SELECT
、SHOW VIEW
和TRIGGER
。如果
consistent
選項設定為true
(預設值),則如果後者不可用,則所有複製表格上的LOCK TABLES
權限可以取代RELOAD
權限。如果使用者帳戶沒有
BACKUP_ADMIN
權限且無法執行LOCK INSTANCE FOR BACKUP
,則公用程式會在複製期間進行額外的一致性檢查。如果此檢查失敗,則會停止實例複製,但結構描述複製或表格複製會繼續,並傳回錯誤訊息以提醒使用者一致性檢查失敗。如果
consistent
選項設定為false
,則不需要BACKUP_ADMIN
和RELOAD
權限。
用來執行公用程式的使用者帳戶需要
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_grants
和strip_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_client
、character_set_connection
和character_set_results
的階段作業值,會針對每個連線設定為此值。字元集必須獲得character_set_client
系統變數的允許,且必須由 MySQL 執行個體支援。-
checksum: [true|false]
-
如果啟用,在傾印時,會產生一個中繼資料檔案
@.checksums.json
與複製一起。此檔案包含複製的檢查碼資料,可進行資料驗證。如果在複製期間
checksum: true
,則適用下列條件如果
ddlOnly:false
且chunking:true
,則會為每個複製的表格和分割區區塊產生檢查碼。如果
ddlOnly:false
且chunking:false
,則會為每個複製的表格和表格分割區產生檢查碼。如果
ddlOnly:true
,則會為每個複製的表格和表格分割區產生檢查碼。
如果啟用,公用程式會在載入對應資料後檢查產生的檢查碼資料。驗證僅限於傾印的資料,忽略產生的資料,例如不可見的主索引鍵。
如果檢查碼不符或遺失表格且無法驗證,則會傳回錯誤。
如果
checksum: true
但未載入任何資料 (因為loadData: false
或未傾印任何資料),則公用程式會根據受影響表格的目前內容驗證傾印的檢查碼資訊。如果表格不存在,則會為每個遺失的表格顯示錯誤。
如果
checksum: true
且dryRun: 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 READ
和START 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 ]
-
發生與
GRANT
或REVOKE
錯誤相關的錯誤時所採取的動作。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_limit
或max_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 TABLE
。on
會分析所有資料表,而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 實例,當您設定
append
或replace
以更新 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_executed
和gtid_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_executed
和gtid_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 執行個體上的管理使用者帳戶本身沒有相關權限,則此選項也會移除系統結構描述(mysql
和sys
)的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"}
-
一個鍵值配對,包含有效的表格識別碼,格式為
,以及用於篩選所複製資料的有效 SQL 條件運算式。schemaName
.tableName
注意只有在執行時才會驗證 SQL。如果您正在複製許多資料表,則任何與 SQL 語法相關的問題都只會在流程後期看到。因此,建議您先測試 SQL 條件,然後再在長時間執行的匯出流程中使用它。
-
partitions: {
schemaName.tableName
: ["string
","string
",..]} -
一個鍵值配對,包含有效的表格識別碼,格式為
,以及有效的分割區清單。schemaName
.tableName
例如,若要僅從資料表
schema.table
複製名為p1
和p2
的分割區:partitions: {'
schema
.table
':["p1", "p2"]} -
ddlOnly: [ true | false ]
將此選項設定為
true
,則只會包含副本中項目的 DDL 檔案,而不複製資料。預設值為false
。-
dataOnly: [ true | false ]
將此選項設定為
true
,則只會包含副本中項目的資料檔案,而不包含 DDL 檔案。預設值為false
。-
users: [ true | false ]
-
(僅限實例複製公用程式)在副本中包含 (
true
) 或排除 (false
) 使用者及其角色和授權。預設值為true
。結構描述和資料表複製公用程式不會在副本中包含使用者、角色或授權。您可以使用
excludeUsers
或includeUsers
選項來指定要從副本中排除或包含的個別使用者帳戶。注意如果從 MySQL 5.6 實例複製使用者,執行複製的使用者必須具有 SUPER 權限。
-
excludeUsers:
字串陣列
(僅限實例複製公用程式)從副本中排除已命名的使用者帳戶。用來排除不接受匯入 HeatWave Service DB 系統的使用者帳戶,或已經存在或不想要在目標 MySQL 實例上的使用者帳戶。對於使用使用者名稱和主機名稱定義的帳戶,請以
"'
格式指定每個使用者帳戶字串,或對於僅使用使用者名稱定義的帳戶,請以user_name
'@'host_name
'""'
格式指定。如果您未提供主機名稱,則會排除具有該使用者名稱的所有帳戶。user_name
'"-
includeUsers:
字串陣列
(僅限實例複製公用程式)在副本中僅包含已命名的使用者帳戶。請針對
excludeUsers
選項指定每個使用者帳戶字串。如果副本中只需要少數使用者帳戶,則將此選項作為excludeUsers
的替代方案。您也可以同時指定這兩個選項,以包含某些帳戶並排除其他帳戶。-
excludeSchemas:
字串陣列
(僅限實例複製公用程式)從副本中排除已命名的結構描述。請注意,
information_schema
、mysql
、ndbinfo
、performance_schema
和sys
結構描述一律會從實例副本中排除。-
includeSchemas:
字串陣列
(僅限實例複製公用程式)在副本中僅包含已命名的結構描述。您無法透過在此選項上命名來包含
information_schema
、mysql
、ndbinfo
、performance_schema
或sys
結構描述。如果您想要複製一或多個這些結構描述,可以使用結構描述複製公用程式util.copySchemas()
執行此操作。-
excludeTables:
字串陣列
(僅限執行個體與結構描述複製工具) 從複製中排除指定的資料表(DDL 和資料)。資料表名稱必須使用有效的結構描述名稱進行限定,並且在需要時使用反引號字元括起來。請注意,
mysql.apply_status
、mysql.general_log
、mysql.schema
和mysql.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"})
將資料表從結構描述複製到目的地上的另一個結構描述