wbcopytables 是一個包含在 MySQL Workbench 中的命令列工具程式,可讓您將表格資料從支援的來源資料庫伺服器複製到 MySQL。MySQL Workbench 移轉精靈會在綱要移轉並在目標 MySQL 伺服器中建立後使用此程式來複製資料。
wbcopytables 可以使用 ODBC、Python DBAPI 或原生 MySQL 用戶端程式庫連線到來源資料庫。
複製會對來源資料庫執行 SELECT
陳述式,然後執行 INSERT
將擷取的列插入到目標 MySQL 伺服器。
表 6.2 檔案位置(預設)
作業系統 | 位置 |
---|---|
Linux | /usr/bin/wbcopytables |
macOS | /Applications/MySQLWorkbench.app/Contents/MacOS/wbcopytables |
Windows | C:\Program Files\MySQL\MySQL Workbench 8.0\wbcopytables.exe |
來源和目標連線的選項參數如下:
--odbc-source=
ODBC_連線字串
:ODBC 連線字串的語法使用標準 ODBC 語法。您也可以使用 ODBC 資料來源名稱 (DSN)。-
--mysql-source=
MySQL_連線字串
:用於 MySQL 來源(當執行 MySQL 對 MySQL 的移轉或複製時)。它使用與 MySQL 工具程式相同的語法對於 TCP/IP 連線:
使用者名稱[:密碼]
@主機:連接埠
對於本機通訊端連線:
使用者名稱[:密碼]
@::通訊端路徑
--source-password
:傳遞資料來源的連線密碼。--target=
MySQL_連線字串
:指定目標連線。--passwords-from-stdin
:透過 STDIN 傳遞密碼。來源和目標密碼必須以 Tab 字元分隔。
您可以使用來源 RDBMS 的 ODBC 特定資料來源選項,來指定來源 SELECT
陳述式每次擷取的列數。
支援使用 SSH 通道複製資料的來源和目標連線選項參數如下:
--source-ssh-port=
ssh 連接埠
--source-ssh-host=
ssh 主機
--source-ssh-user=
ssh 使用者
--source-ssh-password=
ssh 密碼
--target-ssh-port=
ssh 連接埠
--target-ssh-host=
ssh 主機
--target-ssh-user=
ssh 使用者
--target-ssh-password=
ssh 密碼
可以在命令列中指定一或多個表格以進行複製作業。有兩種複製類型
完整表格複製:
--table
範圍複製:
--table-range
兩種表格複製類型都需要一組通用引數
來源綱要:表格所屬的綱要或目錄。如果需要加上引號,則必須使用來源 RDBMS 的語法。例如,SQL Server 使用 [方括號]。
來源表格:要複製的表格。如果來源 RDBMS 除了目錄外還使用綱要名稱,則必須在此處指定綱要和表格,並以點分隔。例如,[dbo].[mytable]。
目標綱要:MySQL 綱要的名稱。如果需要加上引號,則必須使用 MySQL 反引號語法。例如,
`
sakila`
。目標表格:MySQL 表格的名稱。
-
選取表達式:要
SELECT
的欄位清單。這將逐字插入到來源SELECT
陳述式中。警告使用時請小心,因為此表達式會直接複製到來源
SELECT
陳述式中。
對於選取表達式,如果來源和目標表格具有相同順序的相同欄位,並且使用相容的類型,您可以簡單地在此處傳遞 *
,這將建立類似 "SELECT * FROM [dbo].[mytable]" 的查詢。如果不是,您可以按照在 SELECT
陳述式中的方式指定欄位,這些欄位以逗號 (,) 分隔,並使用特定於來源 RDBMS 的適當跳脫/加上引號。您也可以指定來源 RDBMS 支援的類型轉換和/或資料轉換。例如
[client_id], [name], [address], AsText([location])
由於每個選項都必須由 wbcopytables 命令解釋為單一選項,因此您必須在必要時執行 OS shell 特定的引號。通常,使用 '單引號' 或 "雙引號" 來加上參數值就足夠了。這是您使用的任何資料庫特定引號之外的。
完整表格複製
此引數會在來源表格上執行完整的 SELECT
,擷取記錄,然後將它們插入到目標表格中。
沒有其他需要額外的引數。
--table
的語法如下
--table Source_Schema Source_Table Target_Schema Target_Table Select_Expression
範圍複製
此引數會在來源表格上針對指定的範圍執行 SELECT
複製。表格必須具有數值 UNIQUE NOT NULL
或 PRIMARY KEY
,用於為範圍建立 WHERE
表達式。
--table-range
的語法如下
--table-range Source_Schema Source_Table Target_Schema Target_Table Select_Expression Source_Key Range_Start Range_End
產生的表達式為
key_column >= range_start AND key_column <= range_end
如果您為 Range_End 指定 -1,則表達式為
key_column >= range_start
--thread-count
=數字
:如果您要複製多個表格,您可以使用此選項將表格分散在多個執行緒中。不支援將單一表格分散在多個執行緒中。--count-only
:僅執行--table
選項產生的SELECT
的COUNT(*)
。在這種情況下,可以省略目標綱要和表格。--truncate-target
:在複製的每個目標表格上執行 TRUNCATE TABLE 命令。
由於無法在 MySQL 中暫時停用觸發程序,而且它們可能會影響複製程序,因此 MySQL Workbench 會在複製程序開始之前備份並卸除目標 MySQL 資料庫中的所有觸發程序,然後在複製完成後還原這些觸發程序。觸發程序會備份在目標綱要中的名為 wb_tmp_triggers
的表格下。
--disable-triggers-on
=綱要名稱
:對指定綱要中的所有觸發程序執行備份和 DROP 程序。--reenable-triggers-on
=綱要名稱
:還原先前備份到wb_tmp_triggers
表格的觸發程序。--dont-disable-triggers
:略過停用觸發程序的步驟。