MySQL 工作台  / 第 6 章管理任务  /  6.9 wbcopytables 实用程序

6.9 wbcopytables 实用程序

wbcopytables是 MySQL Workbench 中包含的命令行实用程序,使您能够将表数据从受支持的源数据库服务器复制到 MySQL。在目标 MySQL 服务器中迁移和创建模式后,MySQL Workbench 迁移向导使用它来复制数据。

wbcopytables可以使用 ODBC、Python DBAPI 或本机 MySQL 客户端库连接到源数据库。

该副本SELECT在源数据库上执行一条语句,然后INSERT将检索到的行插入到目标 MySQL 服务器中。

表 6.2 文件位置(默认)

操作系统 地点
Linux /usr/bin/wbcopytables
苹果系统 /Applications/MySQLWorkbench.app/Contents/MacOS/wbcopytables
视窗 C:\Program Files\MySQL\MySQL Workbench 8.0\wbcopytables.exe

连接参数

源和目标连接的选项参数是:

  • --odbc-source=ODBC_connection_string: ODBC 连接字符串的语法使用标准的 ODBC 语法。您还可以使用 ODBC 数据源名称 (DSN)。

  • --mysql-source=MySQL_connection_string:用于 MySQL 源(当执行 MySQL 到 MySQL 的迁移或复制时)。它使用与 MySQL 实用程序相同的语法:

    • 对于 TCP/IP 连接: username[:password]@host:port

    • 对于本地套接字连接: username[:password]@::socket_path

  • --source-password:传递数据源的连接密码。

  • --target=MySQL_connection_string:指定目标连接。

  • --passwords-from-stdin: 通过 STDIN 传递密码。源密码和目标密码必须用制表符分隔。

您可以使用源 RDBMS 中的 ODBC 特定数据源选项来指定一次为源SELECT语句提取的行数。

支持 SSH 隧道复制数据的源和目标连接的选项参数是:

  • --source-ssh-port=ssh port

  • --source-ssh-host=ssh host

  • --source-ssh-user=ssh user

  • --source-ssh-password=ssh password

  • --target-ssh-port=ssh port

  • --target-ssh-host=ssh host

  • --target-ssh-user=ssh user

  • --target-ssh-password=ssh password

表格规格

可以在复制操作的命令行中指定一个或多个表。有两种复制类型:

  • 全表复制:--table

  • 范围复制:--table-range

两种表复制类型都需要一组通用参数:

  • 源模式:表所属的模式或目录。如果需要引用,则必须使用源 RDBMS 中的语法来完成。例如,SQL Server 使用 [square_brackets]

  • 源表:要复制的表。如果源 RDBMS 除了目录之外还使用模式名称,则必须在此处指定模式和表并用点分隔。例如 [dbo].[mytable]

  • 目标模式:MySQL 模式的名称。如果需要引用,则必须使用 MySQL 反引号语法。例如, `萨基拉`

  • 目标表:MySQL 表的名称。

  • 选择表达式:要选择的字段列表SELECT。这将逐字插入到源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= Number:如果要复制多个表,则可以使用此选项将表划分到多个线程中。不支持跨多个线程划分单个表。

  • --count-only:只执行一个 由使用COUNT(*)的选项SELECT 生成的。--table在这种情况下可以省略目标模式和表。

  • --truncate-target:对复制的每个目标表执行 TRUNCATE TABLE 命令。

触发器处理

由于无法在 MySQL 中临时禁用触发器并且它们会影响复制过程,因此 MySQL Workbench 将在复制过程开始之前备份并删除目标 MySQL 数据库中的所有触发器,然后在复制完成后恢复这些触发器。触发器备份在名为 的表下的目标架构中wb_tmp_triggers

  • --disable-triggers-on= Schema_Name:对指定模式中的所有触发器执行备份和 DROP 过程。

  • --reenable-triggers-on= Schema_Name:恢复之前备份到 wb_tmp_triggers表中的触发器。

  • --dont-disable-triggers:绕过触发器禁用步骤。