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 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
=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
:绕过触发器禁用步骤。