MySQL Shell 的表导出实用程序 util.exportTable()
将 MySQL 关系表导出到数据文件,该文件可以位于本地服务器上,也可以位于 Oracle Cloud Infrastructure 对象存储桶中。然后,可以使用 MySQL Shell 的并行表导入实用程序 util.importTable()
(请参阅 第 11.4 节,“并行表导入实用程序”)将数据上传到目标 MySQL 服务器上的表,该实用程序使用并行连接为大型数据文件提供快速数据导入。数据文件还可用于将数据导入到其他应用程序中,或者用作单个数据表的轻量级逻辑备份。
默认情况下,表导出实用程序以 MySQL Shell 的并行表导入实用程序的默认格式生成数据文件。提供了预设选项来导出适用于 DOS 或 UNIX 系统的 CSV 文件以及 TSV 文件。表导出实用程序无法生成 JSON 数据。您还可以设置字段和行处理选项,如 SELECT...INTO OUTFILE
语句中所述,以创建任意格式的数据文件。
util.exportTable()
可与分区表和子分区表一起使用,但不会对它们进行任何特殊处理。无论发行版版本如何,此实用程序始终为每个表创建一个文件。
选择表导出文件的目标时,请注意,对于导入到 HeatWave Service DB 系统,运行并行表导入实用程序的 MySQL Shell 实例必须安装在具有访问 HeatWave Service DB 系统权限的 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 模式下),用户使用默认方言从 hr
模式导出 employees
表。该文件写入用户主目录中的 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 模式下),用户将 hr
模式中的 employees
表导出为 TSV 格式的文件,并将其存储在 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 配置文件。
-
其中:“
string
” -
用于过滤要导出的数据的有效 SQL 条件表达式。
注意只有在执行时才会验证 SQL。如果您要导出许多表,则只会看到任何与 SQL 语法相关的错误。因此,建议您在将 SQL 条件用于长时间运行的导出过程之前对其进行测试。
在以下示例中,
where
将仅导出sakila.actor
表中actor_id
值大于 150 的那些行,并将它们导出到名为dump.csv
的文件util.exportTable("sakila.actor", "dump.csv", {"where" : "actor_id > 150"})
-
partitions: ["
string
","string
",..] -
有效分区名称的列表,它将导出限制为指定的分区。
以下示例将
schema.table
中的分区 p1 和 p2 导出到名为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
[LF]
[TAB]
[empty]
false
\
csv
[CR][LF]
,
''
true
\
csv-unix
[LF]
,
''
false
\
tsv
[CR][LF]
[TAB]
''
true
\
注意这些方言的回车符和换行符值与操作系统无关。
如果您使用
linesTerminatedBy
、fieldsTerminatedBy
、fieldsEnclosedBy
、fieldsOptionallyEnclosed
和fieldsEscapedBy
选项,则根据命令解释器的转义约定,如果在选项值中使用反斜杠字符 (\\),则可能需要将其加倍。与使用
SELECT...INTO OUTFILE
语句的 MySQL 服务器一样,MySQL Shell 不会验证您指定的字段和行处理选项。选择这些选项不当会导致数据被部分或错误地导出。始终在开始导出之前验证您的设置,并在导出后验证结果。
-
linesTerminatedBy: "
characters
" 一个或多个字符(或空字符串),用于在导出的数据文件中终止每一行。默认值为指定的方言,如果省略方言选项,则为换行符(
\n
)。此选项等效于SELECT...INTO OUTFILE
语句的LINES TERMINATED BY
选项。请注意,该实用程序未提供与SELECT...INTO OUTFILE
语句的LINES STARTING BY
选项等效的功能,该选项设置为空字符串。-
fieldsTerminatedBy: "
characters
" 一个或多个字符(或空字符串),用于在导出的数据文件中终止每个字段。默认值为指定的方言,如果省略方言选项,则为制表符(
\t
)。此选项等效于SELECT...INTO OUTFILE
语句的FIELDS TERMINATED BY
选项。-
fieldsEnclosedBy: "
character
" 单个字符(或空字符串),用于在导出的数据文件中包围每个字段。默认值为指定的方言,如果省略方言选项,则为空字符串。此选项等效于
SELECT...INTO OUTFILE
语句的FIELDS ENCLOSED BY
选项。-
fieldsOptionallyEnclosed: [ true | false ]
对于
fieldsEnclosedBy
中给定的字符,是否将包围导出的数据文件中的所有字段(false
),还是仅在字段具有字符串数据类型(例如CHAR
、BINARY
、TEXT
或ENUM
)时包围字段(true
)。默认值为指定的方言,如果省略方言选项,则为false
。此选项使fieldsEnclosedBy
选项等效于SELECT...INTO OUTFILE
语句的FIELDS OPTIONALLY ENCLOSED BY
选项。-
fieldsEscapedBy: "
character
" 在导出的数据文件中启动转义序列的字符。默认值为指定的方言,如果省略方言选项,则为反斜杠(\)。此选项等效于
SELECT...INTO OUTFILE
语句的FIELDS ESCAPED BY
选项。如果将此选项设置为空字符串,则不会转义任何字符,这是不建议的,因为SELECT...INTO OUTFILE
使用的特殊字符必须转义。-
maxRate: "
string
" 导出期间数据读取吞吐量每个线程每秒的最大字节数。可以使用单位后缀
k
表示千字节、M
表示兆字节和G
表示吉字节(例如,设置100M
将吞吐量限制为每个线程每秒 100 兆字节)。设置为0
(这是默认值),或将选项设置为空字符串,表示不设置限制。-
showProgress: [ true | false ]
显示(
true
)或隐藏(false
)导出的进度信息。默认情况下,如果stdout
是终端(tty
)(例如,当 MySQL Shell 处于交互模式时),则为true
,否则为false
。进度信息包括估计的总导出行数、已导出的行数、完成百分比以及每秒的行和字节吞吐量。-
compression: "
string
;level=n
" -
写入导出的数据文件时要使用的压缩类型和压缩级别。以下压缩选项可用
none
: 默认值。不应用压缩。-
gzip
: 使用 gzip 压缩库。压缩级别可以设置为 0 到 9。默认压缩级别为 1。例如"compression": "gzip;level=4"
-
zstd
: 使用 zstd 压缩库。压缩级别可以设置为 1 到 22。默认压缩级别为 1。例如"compression": "zstd;level=15"
-
defaultCharacterSet: "
string
" 在 MySQL Shell 打开到服务器的导出会话连接期间使用的字符集。默认值为
utf8mb4
。系统变量character_set_client
、character_set_connection
和character_set_results
的会话值对于每个连接都设置为此值。字符集必须由character_set_client
系统变量允许,并受 MySQL 实例支持。
-
osBucketName: "
string
" 要写入导出的数据文件的 Oracle 云基础设施对象存储桶的名称。默认情况下,使用位于
~/.oci/config
的 Oracle 云基础设施 CLI 配置文件中的[DEFAULT]
配置文件来建立与存储桶的连接。您可以使用ociConfigFile
和ociProfile
选项替换用于连接的备用配置文件。有关设置 CLI 配置文件的说明,请参见SDK 和 CLI 配置文件。-
osNamespace: "
string
" 对象存储桶的 Oracle 云基础设施命名空间,其中包含由
osBucketName
命名的对象存储桶。对象存储桶的命名空间显示在 Oracle 云基础设施控制台中存储桶详细信息页面的“存储桶信息”选项卡中,或者可以使用 Oracle 云基础设施命令行界面获取。-
ociConfigFile: "
string
" 包含用于连接的配置文件的 Oracle 云基础设施 CLI 配置文件,而不是默认位置
~/.oci/config
中的配置文件。-
ociProfile: "
string
" 用于连接的 Oracle 云基础设施配置文件的配置文件名称,而不是用于连接的 Oracle 云基础设施 CLI 配置文件中
[DEFAULT]
配置文件。
MySQL Shell 支持将表导出到与 S3 兼容的存储桶,例如 Amazon Web Services (AWS) S3。
-
s3BucketName: "
string
" 要写入导出的 S3 存储桶的名称。默认情况下,使用位于
~/.aws/
的config
和credentials
文件中的default
配置文件来建立与 S3 存储桶的连接。您可以使用s3ConfigFile
和s3CredentialsFile
选项替换用于连接的备用配置和凭据。有关安装和配置 AWS CLI 的说明,请参见AWS CLI 入门。-
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 云基础设施 S3 兼容性 API 时,端点采用以下格式:
https://
。将namespace
.compat.objectstorage.region
.oraclecloud.comnamespace
替换为对象存储命名空间,将region
替换为您的区域标识符。例如,美国东部(阿什本)区域的区域标识符为us-ashburn-1
。对于美国东部(阿什本)区域的命名空间 axaxnpcrorw5
https://axaxnpcrorw5.compat.objectstorage.us-ashburn-1.oraclecloud.com
.
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"})