本節說明 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
(預設值),則如果沒有RELOAD
權限,則複製的所有資料表上的LOCK TABLES
權限可替代RELOAD
權限。如果使用者帳戶沒有
BACKUP_ADMIN
權限,並且無法執行LOCK INSTANCE FOR BACKUP
,則公用程式會在複製期間執行額外的一致性檢查。如果此檢查失敗,則會停止執行個體複製,但會繼續執行結構描述複製或資料表複製,並傳回錯誤訊息來提醒使用者一致性檢查失敗。如果將
consistent
選項設定為false
,則不需要BACKUP_ADMIN
和RELOAD
權限。
用來執行公用程式的使用者帳戶需要
REPLICATION CLIENT
權限,才能讓公用程式在 Metadata 中包含二進位記錄檔名稱和位置。如果使用者 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
陳述式啟動。當所有執行緒都已啟動其交易時,執行個體會鎖定以進行備份 (如 LOCK INSTANCE FOR BACKUP 和 UNLOCK INSTANCE 陳述式中所述),並釋放全域讀取鎖定。如果使用者帳戶沒有
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 執行個體,如果您要使用updateGtidSet
選項或手動套用目標 MySQL 執行個體上來源 MySQL 執行個體的gtid_executed
GTID 集,請務必將skipBinlog
設定為true
。當 GTID 在目標 MySQL 執行個體上使用中 (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
代表千位元組 (kilobytes)、M
代表百萬位元組 (megabytes) 和G
代表十億位元組 (gigabytes)。最小值為 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:
字串清單
-
用於將資料複製到目標 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: "
字串
" 設定啟用區塊化時要寫入每個資料檔案的大約位元組數。可以使用單位後綴
k
代表千位元組 (kilobytes)、M
代表百萬位元組 (megabytes) 和G
代表十億位元組 (gigabytes)。預設值為 64 MB (64M
),最小值為 128 KB (128k
)。指定此選項會隱含地將chunking
設定為true
。-
loadIndexes: [ true | false ]
-
建立 (
true
) 或不建立 (false
) 表格的次要索引。預設值為true
。當此選項設定為false
時,匯入期間不會建立次要索引,您必須在稍後建立它們。如果您要分別載入 DDL 檔案和資料檔案,並且想要在載入 DDL 檔案後變更表格結構,這會很有用。之後,您可以再次執行傾印載入公用程式,並將loadIndexes
設定為true
以及將deferTableIndexes
設定為all
來建立次要索引。MySQL Shell 使用 MySQL 伺服器的平行索引建立。表格中的所有索引都會同時加入。
如需限制和組態,請參閱設定線上 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。預設值為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 實例時,可以使用此選項。您也可以針對來自 MySQL 8.0 的目標 MySQL 實例使用
replace
,以來源 MySQL 實例的gtid_executed
GTID 集合取代目標 MySQL 實例上的gtid_purged
GTID 集合。若要執行此動作,來源 MySQL 實例中的gtid_executed
GTID 集合必須是目標 MySQL 實例上gtid_purged
GTID 集合的超集合,而且不得與目標的gtid_executed
GTID 集合中但不在其gtid_purged
GTID 集合中的交易集合相交。對於 MySQL 5.7 的目標 MySQL 實例,請將選項設定為
replace
,這會以來源 MySQL 實例的gtid_executed
GTID 集合取代目標 MySQL 實例上的gtid_purged
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 伺服器實例的
gtid_executed
GTID 集合新增至目標 MySQL 實例的gtid_purged
GTID 集合。對於 MySQL 5.7,必須省略加號 (+
),並且目標 MySQL 實例上的gtid_executed
和gtid_purged
GTID 集合必須為空。如需更多詳細資訊,請參閱目標 MySQL 實例版本中gtid_purged
系統變數的說明。 -
compatibility:
字串陣列
-
針對複製中的所有表格,套用與 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 條件之前,先測試您的 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 資料庫系統,或已經存在或不希望存在於目標 MySQL 執行個體的使用者帳戶。針對以使用者名稱和主機名稱定義的帳戶,以
"'
格式指定每個使用者帳戶字串,或者針對僅以使用者名稱定義的帳戶,以使用者名稱
'@'主機名稱
'""'
格式指定。如果您未提供主機名稱,則會排除具有該使用者名稱的所有帳戶。使用者名稱
'"-
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 tables
的資料一律會從綱要複製中排除,雖然包含其 DDL 陳述式,而且您無法透過在另一個選項或公用程式中命名表格來包含該資料。-
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
) 指定結構描述名稱和資料表名稱,來包含特定資料表的所有觸發程序。
以下範例說明如何使用複製工具
-
將實例從本機複製到 HeatWave Service 高可用性資料庫系統
JS> util.copyInstance('mysql://User001@DBSystemIPAddress',{threads: 6, deferTableIndexes: "all", compatibility: ["strip_restricted_grants", "strip_definers", "create_invisible_pks"]})
此範例將實例複製到資料庫系統,使用者為
User001
,並使用一系列相容性選項,使該實例與資料庫系統相容。create_invisible_pks
會包含在內,因為高可用性資料庫系統使用群組複寫,這需要每個資料表都有主鍵。此選項會將隱形主鍵新增至每個資料表。 -
將結構描述複製到目標實例並重新命名結構描述
util.copySchemas(['sakila'], 'user@localhost:4101',{schema: "mySakilaSchema"})
此範例將結構描述的內容從來源複製到目的地 (
localhost:4101
) 上具有不同名稱的結構描述。 -
將資料表從結構描述複製到目的地上的另一個結構描述
util.copyTables('sakila', ['actor'], 'root@localhost:4101',{schema: "mySakilaSchema"})
此範例將
actor
資料表從sakila
結構描述複製到目的地 (localhost:4101
) 上的mySakilaSchema
。