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 模式下的这个示例中,用户将employees
表
hr
作为 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 配置文件中的默认配置文件或您使用ociConfigFile
和
ociProfile
选项指定的替代详细信息与对象存储桶建立连接。有关设置 CLI 配置文件的说明,请参阅
SDK 和 CLI 配置文件。
-
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][低频]
,
''
true
\
csv-unix
[如果]
,
''
false
\
tsv
[CR][低频]
[标签]
''
true
\
笔记方言的回车和换行值与操作系统无关。
如果您使用
linesTerminatedBy
、fieldsTerminatedBy
、fieldsEnclosedBy
、fieldsOptionallyEnclosed
和fieldsEscapedBy
选项,根据命令解释器的转义约定,如果您在选项值中使用反斜杠字符 (\),则可能需要加倍。与带有该
SELECT...INTO OUTFILE
语句的 MySQL 服务器一样,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
) 导出进度信息。默认是true
ifstdout
是一个终端 (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实例支持的。
-
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 配置文件中的配置文件。
MySQL Shell 支持将表导出到与 S3 兼容的存储桶,例如 Amazon Web Services (AWS) S3。
有关支持的服务及其配置要求的信息,请参阅 第 4.7 节“云服务配置”。
-
s3BucketName: "
string
" 要写入导出的 S3 存储桶的名称。默认情况下,位于的文件的配置
default
文件用于 建立与 S3 存储桶的连接。您可以使用和 选项替换连接的替代配置和凭据。有关安装和配置 AWS CLI 的说明,请参阅 AWS CLI 入门。config
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
配置文件。-
s3EndpointOverride: "
string
" -
要使用的端点的 URL 而不是默认值。
连接到 Oracle Cloud Infrastructure S3 兼容性 API 时,端点采用以下格式: . 替换为对象存储命名空间和 您的区域标识符。例如,美国东部(阿什本)区域的区域标识符是。
https://
namespace
.compat.objectstorage.region
.oraclecloud.comnamespace
region
us-ashburn-1
对于美国东部(阿什本)区域中名为 axaxnpcrorw5 的命名空间:
https://axaxnpcrorw5.compat.objectstorage.us-ashburn-1.oraclecloud.com
.