11.3 表导出实用程序

2024年 4月 16日 63.1k 0

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.csvutil.exportTable("schema.table", "dump.csv", {"partitions" : ["p1", "p2"]}

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

    为导出的数据文件的格式指定一组字段和行处理选项。您可以使用选定的方言作为进一步自定义的基础,还可以指定 linesTerminatedByfieldsTerminatedByfieldsEnclosedByfieldsOptionallyEnclosedfieldsEscapedBy选项中的一个或多个来更改设置。默认方言生成的数据文件 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\ 笔记方言的回车和换行值与操作系统无关。如果您使用linesTerminatedByfieldsTerminatedByfieldsEnclosedByfieldsOptionallyEnclosedfieldsEscapedBy选项,根据命令解释器的转义约定,如果您在选项值中使用反斜杠字符 (\),则可能需要加倍反斜杠字符 (\)。与使用该语句的 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 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),还是仅包围具有字符串数据类型(如CHARBINARYTEXTENUM( true))的字段。默认值是指定的方言,或者 false省略方言选项。该选项使该fieldsEnclosedBy 选项等同于FIELDS OPTIONALLY ENCLOSED BYSELECT...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_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"})

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论