11.3 表导出实用程序
MySQL Shell 的表导出实用程序 util.exportTable()在 MySQL Shell 8.0.22 中引入,可将 MySQL 关系表导出到本地服务器上或 Oracle Cloud Infrastructure 对象存储存储桶中的数据文件中。然后可以使用 MySQL Shell 的并行表导入实用程序util.importTable()(请参阅 第 11.4 节“并行表导入实用程序” )将数据上传到目标 MySQL 服务器上的表中,该实用程序使用并行连接为大型数据文件提供快速数据导入。数据文件还可用于将数据导入到不同的应用程序,或作为单个数据表的轻量级逻辑备份。
- 关于实用程序
- 要求和限制
- 运行实用程序
- 选项
- OCI 云基础设施选项
- S3 兼容服务的选项
- Microsoft Azure Blob 存储选项
关于实用程序
默认情况下,表导出实用程序会为 MySQL Shell 并行表导入实用程序生成默认格式的数据文件。预设选项可用于导出 DOS 或 UNIX 系统的 CSV 文件以及 TSV 文件。表导出实用程序无法生成 JSON 数据。您还可以为语句设置字段和行处理选项, SELECT...INTO OUTFILE以创建任意格式的数据文件。
util.exportTable()可以与分区表和子分区表一起使用,但不对这些表执行任何特殊处理。无论发行版本如何,此实用程序始终为每个表创建一个文件。
选择表导出文件的目标时,请注意,要导入到 MySQL 数据库系统,运行并行表导入实用程序的 MySQL Shell 实例必须安装在有权访问 MySQL 数据库系统的 Oracle Cloud Infrastructure 计算实例上。如果将表导出到对象存储存储桶中的文件,则可以从计算实例访问对象存储存储桶。如果您在本地系统上创建表导出文件,则需要使用您选择的复制实用程序将其传输到 Oracle Cloud Infrastructure 计算实例,具体取决于您为计算实例选择的操作系统。
要求和限制
以下要求适用于使用表导出实用程序的导出:
- 源MySQL实例和目标MySQL实例均需要MySQL 5.7或更高版本。
- 用于将文件传输到 Oracle Cloud Infrastructure 对象存储存储桶的上传方法的文件大小限制为 1.2 TiB。
运行实用程序
表导出实用程序使用 MySQL Shell 全局会话来获取执行导出的目标 MySQL 服务器的连接详细信息。在运行该实用程序之前,您必须打开全局会话(可以具有 X 协议连接或经典 MySQL 协议连接)。该实用程序为每个线程打开自己的会话,从全局会话复制连接压缩和 SSL 选项等选项,并且不会进一步使用全局会话。您可以限制最大数据传输速率以平衡网络负载。
在MySQL Shell API中,表导出实用程序是全局对象的函数util,并具有以下签名:
util.exportTable(table, outputUrl[, options])
table是要导出到数据文件的关系数据表的名称。表名可以使用有效的模式名称进行限定,并在需要时用反引号字符引起来。如果省略架构,则使用 MySQL Shell 全局会话的活动架构。
options是一个选项字典,如果为空则可以省略。本主题的最后部分列出了这些选项。
如果要将数据导出到本地文件系统,则 outputUrl它是一个字符串,指定导出的数据文件的路径以及文件名本身,并具有适当的扩展名。您可以指定绝对路径或相对于当前工作目录的路径。您可以使用架构作为本地目录路径的前缀file://。在此示例中,在 MySQL Shell 的 JavaScript 模式下,用户使用默认方言employees从架构中导出表 。hr该文件被写入exports用户主目录中的目录,并被赋予.txt 适合以下格式的文件的扩展名:
shell-js> util.exportTable("hr.employees", "file:///home/hanna/exports/employees.txt")
目标目录在导出之前必须存在,但不必为空。如果导出的数据文件已存在,则会被覆盖。对于导出到本地目录,将使用访问权限创建数据文件rw-r-----(在支持这些权限的操作系统上)。该文件的所有者是运行 MySQL Shell 的用户帐户。
如果要将数据导出到 Oracle Cloud Infrastructure 对象存储存储桶或 S3 兼容存储,则outputUrl是存储桶中数据文件的名称,包括合适的文件扩展名。您可以包含目录分隔符来模拟目录结构。使用该osBucketName选项提供对象存储存储桶的名称,并 osNamespace使用该选项标识该存储桶的命名空间。在此示例中,在 MySQL Shell 的 Python 模式下,用户将表employees作为 hrTSV 格式的文件从架构导出到对象存储存储桶hanna-bucket:
shell-py> util.export_table("hr.employees", "dump/employees.tsv", {
> dialect: "tsv", "osBucketName": "hanna-bucket", "osNamespace": "idx28w1ckztq" })
对象存储存储桶的命名空间显示在 Oracle Cloud Infrastructure 控制台存储桶详细信息页面的存储桶信息选项卡中,或者可以使用 Oracle Cloud Infrastructure 命令行界面获取。使用默认 Oracle Cloud Infrastructure CLI 配置文件中的默认配置文件或您使用ociConfigFile和 选项指定的替代详细信息建立与对象存储存储桶的连接ociProfile。有关设置 CLI 配置文件的说明,请参阅 SDK 和 CLI 配置文件。
选项
-
where: "\*string\*"用于过滤导出数据的有效 SQL 条件表达式。笔记SQL 仅在执行时才有效。如果您要导出许多表,则任何与 SQL 语法相关的问题只会在过程后期才会出现。因此,建议您在长时间运行的导出过程中使用 SQL 条件之前对其进行测试。在以下示例中,仅将表中的值 大于 150 的
where行导出 到名为 的文件中:sakila.actor``actor_id``dump.csv`` util.exportTable("sakila.actor", "dump.csv", {"where" : "actor_id > 150"}) -
partitions: ["\*string\*","\*string\*",..]将导出限制为指定分区的有效分区名称列表。以下示例将分区 p1 和 p2 导出
schema.table到名为 的文件dump.csv:util.exportTable("schema.table", "dump.csv", {"partitions" : ["p1", "p2"]} -
dialect: [default|csv|csv-unix|tsv]为导出的数据文件的格式指定一组字段和行处理选项。您可以使用选定的方言作为进一步自定义的基础,还可以指定
linesTerminatedBy、fieldsTerminatedBy、fieldsEnclosedBy、fieldsOptionallyEnclosed和fieldsEscapedBy选项中的一个或多个来更改设置。默认方言生成的数据文件SELECT...INTO OUTFILE与使用具有该语句的默认设置的语句创建的内容相匹配。.txt是分配给这些输出文件的适当文件扩展名。其他方言可用于导出 DOS 或 UNIX 系统的 CSV 文件 (.csv) 和 TSV 文件 (.tsv)。适用于每种方言的设置如下:表 11.1 表导出实用程序的方言设置dialect``linesTerminatedBy``fieldsTerminatedBy``fieldsEnclosedBy``fieldsOptionallyEnclosed``fieldsEscapedBy``default[如果][标签][空的]false`csv[CR][LF],”true\csv-unix[如果],”false\tsv[CR][LF][标签]”true\ 笔记方言的回车和换行值与操作系统无关。如果您使用linesTerminatedBy、fieldsTerminatedBy、fieldsEnclosedBy、fieldsOptionallyEnclosed和fieldsEscapedBy选项,根据命令解释器的转义约定,如果您在选项值中使用反斜杠字符 (\),则可能需要加倍反斜杠字符 (\)。与使用该语句的 MySQL 服务器一样 [SELECT…INTO OUTFILE`](https://dev.mysql.com/doc/refman/8.0/en/select-into.html),MySQL Shell 不会验证您指定的字段和行处理选项。这些选项选择不准确可能会导致数据导出部分或不正确。请务必在开始导出之前验证您的设置,并在之后验证结果。 -
linesTerminatedBy: "\*characters\*"实用程序用一个或多个字符(或空字符串)来终止导出的数据文件中的每一行。默认值与指定的方言相同,
\n如果省略方言选项,则默认为换行符 ( )。该选项相当于 语句LINES TERMINATED BY的选项SELECT...INTO OUTFILE。请注意,该实用程序不提供LINES STARTING BY该SELECT...INTO OUTFILE语句的等效选项,该选项设置为空字符串。 -
fieldsTerminatedBy: "\*characters\*"实用程序用一个或多个字符(或空字符串)来终止导出的数据文件中的每个字段。默认值与指定的方言相同,
\t如果省略方言选项,则默认为制表符 ( )。该选项相当于 语句FIELDS TERMINATED BY的选项SELECT...INTO OUTFILE。 -
fieldsEnclosedBy: "\*character\*"实用程序用单个字符(或空字符串)将导出的数据文件中的每个字段括起来。默认值与指定的方言相同,如果省略方言选项,则默认值为空字符串。该选项相当于语句
FIELDS ENCLOSED BY的选项SELECT...INTO OUTFILE。 -
fieldsOptionallyEnclosed: [ true | false ]给定的字符
fieldsEnclosedBy是包围导出数据文件中的所有字段 (false),还是仅包围具有字符串数据类型(如CHAR、BINARY、TEXT或ENUM(true))的字段。默认值是指定的方言,或者false省略方言选项。该选项使该fieldsEnclosedBy选项等同于FIELDS OPTIONALLY ENCLOSED BY该SELECT...INTO OUTFILE语句的选项。 -
fieldsEscapedBy: "\*character\*"在导出的数据文件中开始转义序列的字符。默认值与指定的方言相同,如果省略方言选项,则默认值为反斜杠 ()。该选项相当于语句
FIELDS ESCAPED BY的选项SELECT...INTO OUTFILE。如果将此选项设置为空字符串,则不会转义任何字符,但不建议这样做,因为SELECT...INTO OUTFILE必须转义使用的特殊字符。 -
maxRate: "\*string\*"导出期间每个线程数据读取吞吐量每秒的最大字节数。可以使用
k千字节、M兆字节和千兆字节的单位后缀G(例如,将100M吞吐量设置为每个线程每秒 100 兆字节)。设置0(这是默认值),或将选项设置为空字符串,意味着不设置限制。 -
showProgress: [ true | false ]显示 (
true) 或隐藏 (false) 导出进度信息。默认为trueifstdout是终端 (tty),例如当 MySQL Shell 处于交互模式时,false否则。进度信息包括估计要导出的总行数、到目前为止导出的行数、完成百分比以及每秒行数和字节数的吞吐量。 -
compression: "\*string\*"写入导出的数据文件时使用的压缩类型。默认情况下不使用压缩 (
none)。替代方案是使用 gzip 压缩 (gzip) 或 zstd 压缩 (zstd)。 -
defaultCharacterSet: "\*string\*"MySQL Shell 为导出而打开到服务器的会话连接期间要使用的字符集。默认为
utf8mb4.对于每个连接,系统变量character_set_client、character_set_connection和 的会话值character_set_results都设置为此值。该字符集必须是系统变量允许character_set_client且MySQL实例支持的。
OCI 云基础设施选项
-
osBucketName: "\*string\*"要写入导出的数据文件的 Oracle Cloud Infrastructure 对象存储存储桶的名称。默认情况下,
[DEFAULT]位于的 Oracle Cloud Infrastructure CLI 配置文件中的配置文件~/.oci/config用于建立与存储桶的连接。您可以使用ociConfigFile和 选项替换用于连接的替代配置文件ociProfile。有关设置 CLI 配置文件的说明,请参阅 SDK 和 CLI 配置文件。 -
osNamespace: "\*string\*"名为 by 的对象存储存储桶所在的 Oracle Cloud Infrastructure 命名空间
osBucketName。对象存储存储桶的命名空间显示在 Oracle Cloud Infrastructure 控制台存储桶详细信息页面的存储桶信息选项卡中,或者可以使用 Oracle Cloud Infrastructure 命令行界面获取。 -
ociConfigFile: "\*string\*"一个 Oracle Cloud Infrastructure CLI 配置文件,其中包含用于连接的配置文件,而不是默认位置中的配置文件
~/.oci/config。 -
ociProfile: "\*string\*"用于连接的 Oracle Cloud Infrastructure 配置文件的配置文件名称,而不是
[DEFAULT]用于连接的 Oracle Cloud Infrastructure CLI 配置文件中的配置文件。
S3 兼容服务的选项
MySQL Shell 支持将表导出到 S3 兼容的存储桶,例如 Amazon Web Services (AWS) S3。
笔记
MySQL Shell 支持命令行选项、环境变量和配置文件中的 AWS S3 配置。命令行选项覆盖环境变量、配置文件和默认选项。
有关配置要求的信息,请参阅 第 4.7 节 “云服务配置”。
-
s3BucketName: "\*string\*"要写入导出的 S3 存储桶的名称。默认情况下,位于 的
default配置文件config和 文件用于建立与 S3 存储桶的连接。您可以使用和 选项替换连接的替代配置和凭据。有关安装和配置 AWS CLI 的说明,请参阅 AWS CLI 入门。credentials``~/.aws/``s3ConfigFile``s3CredentialsFile -
s3CredentialsFile:"\*string\*"一种凭据文件,其中包含用于连接的用户凭据,而不是默认位置中的凭据
~/.aws/credentials。通常,凭据文件包含 用于连接的aws_access_key_id和 。aws_secret_access_key -
s3ConfigFile: "\*string\*"包含用于连接的配置文件的配置文件,而不是默认位置中的配置文件,例如
~/.aws/config.通常,配置文件包含用于连接的区域和输出类型。 -
s3Profile: "\*string\*"用于连接的 s3 CLI 配置文件的配置文件名称,而不是配置文件
default。 -
s3Region: "\*string\*"用于连接的区域的名称。
-
s3EndpointOverride: "\*string\*"要使用的端点 URL,而不是默认值。连接到 Oracle Cloud Infrastructure S3 兼容性 API 时,端点采用以下格式: .替换为对象存储命名空间和 您的区域标识符。例如,美国东部(阿什本)区域的区域标识符是。
https://*namespace*.compat.objectstorage.*region*.oraclecloud.comnamespace**regionus-ashburn-1对于美国东部(阿什本)区域中名为 axaxnpcrorw5 的命名空间:https://axaxnpcrorw5.compat.objectstorage.us-ashburn-1.oraclecloud.com。
Microsoft Azure Blob 存储选项
MySQL Shell 支持导出到 Microsoft Azure Blob 存储。
笔记
MySQL Shell 支持命令行选项、环境变量和配置文件中的 Microsoft Azure Blob 存储配置。命令行选项覆盖环境变量和配置文件。
有关配置要求和配置类型优先顺序的信息,请参阅 第 4.7 节 “云服务配置”。
-
azureContainerName: "\*string\*"强制的。要写入导出的 Azure 容器的名称。容器必须存在。
-
azureConfigFile: "\*string\*"选修的。包含存储连接参数的配置文件,而不是默认位置的配置文件,例如
~/.azure/config.如果未定义,则使用默认配置文件。azureContainerName必须已定义,且不能为空。 -
azureStorageAccount: "\*string\*"选修的。用于操作的 Azure 存储帐户的名称。
-
azureStorageSasToken: "\*string\*"选修的。用于对操作进行身份验证的 Azure 共享访问签名 (SAS) 令牌,而不是密钥。
在以下示例中,配置使用配置字符串作为连接参数,这意味着该 exportTable命令仅需要 azureContainerName.
示例config文件:
解释 [cloud]
name = AzureCloud
[storage]
connection_string=alphanumericConnectionString
示例exportTable命令,将sakila.actor表作为 TSV 文件导出到名为 的容器*mysqlshellazure*:
util.exportTable("sakila.actor", "actor.tsv", {dialect: "tsv", azureContainerName: "mysqlshellazure"})