MySQL 外壳 8.0  / 第 11 章 MySQL Shell 实用程序  /  11.3 表导出实用程序

11.3 表导出实用程序

MySQL Shell 的表导出实用程序 util.exportTable()在 MySQL Shell 8.0.22 中引入,可将 MySQL 关系表导出到本地服务器或 Oracle Cloud Infrastructure 对象存储桶中的数据文件中。然后可以使用 MySQL Shell 的并行表导入实用程序util.importTable()(请参阅 第 11.4 节,“并行表导入实用程序”)将数据上传到目标 MySQL 服务器上的表中,该实用程序使用并行连接为大型数据文件提供快速数据导入。数据文件也可用于将数据导入不同的应用程序,或作为单个数据表的轻量级逻辑备份。

关于实用程序

默认情况下,表导出实用程序以 MySQL Shell 的并行表导入实用程序的默认格式生成数据文件。预设选项可用于导出 DOS 或 UNIX 系统的 CSV 文件和 TSV 文件。表导出实用程序无法生成 JSON 数据。您还可以为 SELECT...INTO OUTFILE语句设置字段和行处理选项,以创建任意格式的数据文件。

util.exportTable()可以与分区表和子分区表一起使用,但不对这些表执行任何特殊处理。无论发布版本如何,此实用程序始终为每个表创建一个文件。

在为表导出文件选择目标时,请注意,要导入到 MySQL 数据库系统,运行并行表导入实用程序的 MySQL Shell 实例必须安装在有权访问 MySQL 数据库系统的 Oracle Cloud Infrastructure Compute 实例上. 如果将表导出到对象存储桶中的文件,则可以从计算实例访问对象存储桶。如果您在本地系统上创建表导出文件,则需要使用您选择的复制实用程序将其传输到 Oracle Cloud Infrastructure Compute 实例,具体取决于您为 Compute 实例选择的操作系统。

要求和限制

以下要求适用于使用表导出实用程序的导出:

  • 源 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 模式下的这个示例中,用户将employeeshr作为 TSV 格式的文件从模式导出到对象存储桶hanna-bucket

shell-py> util.export_table("hr.employees", "dump/employees.tsv", {
        > dialect: "tsv", "osBucketName": "hanna-bucket", "osNamespace": "idx28w1ckztq" })

对象存储桶的命名空间显示在 Oracle Cloud Infrastructure 控制台中桶详细信息页面的 Bucket Information选项卡中,或者可以使用 Oracle Cloud Infrastructure 命令行界面获取。使用默认 Oracle Cloud Infrastructure CLI 配置文件中的默认配置文件或您使用ociConfigFileociProfile选项指定的替代详细信息与对象存储桶建立连接。有关设置 CLI 配置文件的说明,请参阅 SDK 和 CLI 配置文件

选项

dialect: [default|csv|csv-unix|tsv]

为导出的数据文件的格式指定一组字段和行处理选项。您可以使用所选方言作为进一步自定义的基础,方法是指定 、 、 、 和 选项中的一个或 linesTerminatedBy多个 fieldsTerminatedByfieldsEnclosedBy更改 fieldsOptionallyEnclosed设置 fieldsEscapedBy

默认方言生成一个数据文件,该文件与使用具有该 SELECT...INTO OUTFILE语句默认设置的语句创建的内容相匹配。.txt是分配给这些输出文件的适当文件扩展名。其他方言可用于导出 DOS 或 UNIX 系统的 CSV 文件 ( .csv) 和 TSV 文件 ( .tsv)。

适用于每种方言的设置如下:

表 11.1 表导出实用程序的方言设置

dialect

linesTerminatedBy

fieldsTerminatedBy

fieldsEnclosedBy

fieldsOptionallyEnclosed

fieldsEscapedBy

default

[如果]

[标签]

[空的]

false

\

csv

[CR][低频]

,

''

true

\

csv-unix

[如果]

,

''

false

\

tsv

[CR][低频]

[标签]

''

true

\


笔记
  1. 方言的回车和换行值与操作系统无关。

  2. 如果您使用linesTerminatedByfieldsTerminatedByfieldsEnclosedByfieldsOptionallyEnclosedfieldsEscapedBy选项,根据命令解释器的转义约定,如果您在选项值中使用反斜杠字符 (\),则可能需要加倍。

  3. 与带有该 SELECT...INTO OUTFILE语句的 MySQL 服务器一样,MySQL Shell 不会验证您指定的字段和行处理选项。这些选项的不准确选择会导​​致数据导出部分或不正确。始终在开始导出之前验证您的设置,并在之后验证结果。

linesTerminatedBy: "characters"

一个或多个字符(或空字符串),实用程序使用这些字符终止导出的数据文件中的每一行。\n默认值与指定的方言相同,如果省略方言选项,则为换行符 ( )。此选项等同于 语句的LINES TERMINATED BY选项 。请注意,该实用程序不为语句的选项 SELECT...INTO OUTFILE提供等效项,该选项设置为空字符串。 LINES STARTING BYSELECT...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) 导出进度信息。默认是trueif stdout是一个终端 ( tty),例如当 MySQL Shell 处于交互模式时,false否则。进度信息包括估计要导出的总行数、到目前为止导出的行数、完成百分比以及每秒行数和字节数的吞吐量。

compression: "string"

写入导出数据文件时使用的压缩类型。默认是不使用压缩 ( none)。备选方案是使用 gzip 压缩 ( gzip) 或 zstd 压缩 ( zstd)。

defaultCharacterSet: "string"

在 MySQL Shell 打开到服务器以进行导出的会话连接期间要使用的字符集。默认值为utf8mb4。系统变量的会话值 character_set_clientcharacter_set_connectioncharacter_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 控制台中桶详细信息页面的 Bucket Information 选项卡中,或者可以使用 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。

有关支持的服务及其配置要求的信息,请参阅 第 4.7 节“云服务配置”

s3BucketName: "string"

要写入导出的 S3 存储桶的名称。默认情况下,位于的文件的配置 default 文件用于 建立与 S3 存储桶的连接。您可以使用和 选项替换连接的替代配置和凭据。有关安装和配置 AWS CLI 的说明,请参阅 AWS CLI 入门configcredentials~/.aws/s3ConfigFiles3CredentialsFile

s3CredentialsFile:"string"

包含用于连接的用户凭据的凭据文件,而不是默认位置中的凭据,~/.aws/credentials. 通常,凭据文件包含 用于连接 的aws_access_key_id和 。aws_secret_access_key

s3ConfigFile: "string"

一个配置文件,其中包含用于连接的配置文件,而不是默认位置的配置文件,例如~/.aws/config. 通常,配置文件包含用于连接的区域和输出类型。

s3Profile: "string"

用于连接的 s3 CLI 配置文件的配置文件名称,而不是default 配置文件。

s3EndpointOverride: "string"

要使用的端点的 URL 而不是默认值。

连接到 Oracle Cloud Infrastructure S3 兼容性 API 时,端点采用以下格式: . 替换为对象存储命名空间和 您的区域标识符。例如,美国东部(阿什本)区域的区域标识符是。 https://namespace.compat.objectstorage.region.oraclecloud.comnamespaceregionus-ashburn-1

对于美国东部(阿什本)区域中名为 axaxnpcrorw5 的命名空间:

https://axaxnpcrorw5.compat.objectstorage.us-ashburn-1.oraclecloud.com.