MySQL Workbench 手冊  /  管理任務  /  wbcopytables 工具程式

6.9 wbcopytables 工具程式

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 NULLPRIMARY 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 選項產生的 SELECTCOUNT(*)。在這種情況下,可以省略目標綱要和表格。

  • --truncate-target:在複製的每個目標表格上執行 TRUNCATE TABLE 命令。

觸發程序處理

由於無法在 MySQL 中暫時停用觸發程序,而且它們可能會影響複製程序,因此 MySQL Workbench 會在複製程序開始之前備份並卸除目標 MySQL 資料庫中的所有觸發程序,然後在複製完成後還原這些觸發程序。觸發程序會備份在目標綱要中的名為 wb_tmp_triggers 的表格下。

  • --disable-triggers-on=綱要名稱:對指定綱要中的所有觸發程序執行備份和 DROP 程序。

  • --reenable-triggers-on=綱要名稱:還原先前備份到 wb_tmp_triggers 表格的觸發程序。

  • --dont-disable-triggers:略過停用觸發程序的步驟。