Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  mysqldump — A Database Backup Program

6.5.4 mysqlimport — 数据导入程序

MySQL客户端工具mysqldump执行逻辑备份,生成一组SQL语句,这些语句可以执行以重现原始数据库对象定义和表数据。它用于备份或将一个或多个MySQL数据库转移到另一个SQL服务器。mysqldump命令还可以生成CSV、其他分隔文本或XML格式的输出。

Tip

考虑使用MySQL Shell dump utilities,它们提供多线程并行导出、文件压缩和进度信息显示,以及云功能,如Oracle Cloud Infrastructure Object Storage流式传输以及MySQL HeatWave Service兼容性检查和修改。可以轻松将导出的数据导入到MySQL Server实例或MySQL HeatWave Service DB System中使用MySQL Shell load dump utilities。MySQL Shell的安装说明可以在这里找到。

mysqldump 需要至少具有对导出的表的 SELECT 权限,对于导出的视图有 SHOW VIEW 权限,对于导出的触发器有 TRIGGER 权限,对于使用 --single-transaction 选项时的锁定表有 LOCK TABLES 权限,对于不使用 --no-tablespaces 选项时的进程权限,以及对于使用 --single-transaction 时的重载或刷新表的权限,且在 GTID 模式为 ON 并且 GTID 已经被清理时,还需要 gtid_mode=ONgtid_purged=ON|AUTO。某些选项可能需要其他权限,如选项描述中所提到的。

要重新加载一个备份文件,您必须具有执行该文件包含的语句所需的权限,例如适当的 CREATE 权限,以创建由这些语句创建的对象。

mysqldump 输出可能包含改变数据库排序规则的 ALTER DATABASE 语句,这些语句用于在导出存储程序时保留它们的字符编码。要重新加载包含这些语句的备份文件,需要对受影响数据库的 ALTER 权限。

Note

使用 PowerShell 在 Windows 上创建的备份文件具有 UTF-16 编码:

mysqldump [options] > dump.sql

然而,UTF-16 不被允许作为连接字符集(请参阅不允许的客户端字符集),因此无法正确加载该文件。要解决这个问题,请使用 --result-file 选项,该选项创建 ASCII 格式的输出:

mysqldump [options] --result-file=dump.sql

在服务器上启用 GTIDs(gtid_mode=ON)时,不建议加载包含系统表的备份文件。 mysqldump 对于系统表使用非事务性 MyISAM 存储引擎的 DML 语句,这种组合在 GTIDs 启用时是不允许的。

mysqldump 的优点包括方便性和灵活性,可以在备份后查看或编辑输出内容。您可以克隆数据库用于开发和DBA工作,也可以根据需要对现有数据库进行轻微变更以进行测试。这不是为大量数据提供快速或可扩展的备份解决方案,即使备份步骤耗时合理,恢复数据也可能非常慢,因为重新播放SQL语句涉及到磁盘I/O操作,如插入、索引创建等。

对于大规模的备份和恢复,物理备份更为适宜,可以直接复制原始格式的数据文件,以便快速恢复。

如果您的表主要是InnoDB表,或者您有混合的InnoDBMyISAM表,考虑使用MySQL Enterprise提供的mysqlbackup工具。这款工具为InnoDB备份提供了高性能且对业务影响最小的方式,还可以备份来自MyISAM和其他存储引擎的表。它还提供了多种便捷选项来适应不同的备份场景。请参阅第32.1节,“MySQL Enterprise Backup概述”

mysqldump可以按行检索和导出表格内容,或者它可以一次性检索整个表格并在内存中缓冲后导出。内存缓冲可能会成为问题,如果您正在导出大量的表格。要按行导出表格,请使用--quick选项(或者启用--opt,它会自动启用--quick)。--opt选项(以及因此--quick)默认启用,因此要启用内存缓冲,请使用--skip-quick

如果您正在使用最近的版本的mysqldump来生成一个将被装载到非常旧的MySQL服务器上的备份,请在--skip-opt选项中使用而不是--opt--extended-insert选项。

有关mysqldump的更多信息,请参阅第9.4节,“使用mysqldump进行备份”

使用 mysqldump 有三种主要的方式,可以导出一个或多个表、一个或多个完整数据库,或者整个 MySQL 服务器,如下所示:

mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases

要导出整个数据库,不要在 db_ name 后面跟任何表名,或者使用 --databases 或者 --all- databases 选项。

要查看您版本的 mysqldump 支持的选项,请运行命令 mysqldump --help

mysqldump 支持以下选项,这些选项可以在命令行或 option 文件的 [mysqldump][client] 组中指定。有关 MySQL 程序使用 option 文件的信息,请参阅第 6.2.2.2 节,“Using Option Files”

表 6.13 mysqldump 选项

Option Name Description
--add-drop-database 在每个 CREATE DATABASE 语句之前添加一个 DROP DATABASE 语句
--add-drop-table 在每个 CREATE TABLE 语句之前添加一个 DROP TABLE 语句
--add-drop-trigger 在每个 CREATE TRIGGER 语句之前添加一个 DROP TRIGGER 语句
--add-locks 在每个表导出周围使用 LOCK TABLES 和 UNLOCK TABLES 语句
--all- databases 导出所有表在所有数据库中
--allow-keywords 允许创建的列名是关键字
--apply- replica-statements 在输出中包括 STOP REPLICA 在 CHANGE REPLICATION SOURCE TO 语句之前,并在结束时包括 START REPLICA
--apply-slave-statements 在输出中包括 STOP SLAVE 在 CHANGE MASTER 语句之前,并在结束时包括 START SLAVE
--bind- address 使用指定的网络接口连接到 MySQL 服务器
--character-sets- dir 字符集安装目录
--column-statistics 生成统计信息直方图的ANALYZE TABLE语句
--comments 在备份文件中添加注释
--compact 生成更紧凑的输出
--compatible 生成与其他数据库系统或旧版本MySQL服务器兼容的输出
--complete-insert 使用完整的INSERT语句,包括列名
--compress 压缩客户端和服务器之间传输的所有信息
--compression-algorithms 允许的压缩算法列表
--create-options 在CREATE TABLE语句中包含所有MySQL特定的表选项
--databases 将所有名称参数解释为数据库名
--debug 记录调试日志
--debug-check 在程序退出时打印调试信息
--debug-info 在程序退出时打印调试信息、内存和CPU统计信息
--default-auth 使用的身份验证插件
--default-character-set 指定默认字符集
--defaults-extra-file 读取额外的选项文件
--defaults-file 只读取指定的选项文件
--defaults-group-suffix 选项组后缀值
--delete-master-logs 在复制源服务器上删除二进制日志文件
--delete-source-logs 在复制源服务器上删除二进制日志文件
--disable-keys 为每个表,INSERT语句周围添加禁用和启用键的语句
--dump-date 如果提供了--comments选项,则在备份文件中包含备份日期作为“备份完成于”注释
--dump-replica 包括CHANGE REPLICATION SOURCE TO语句,该语句列出了复制源的二进制日志坐标
--dump-slave 包含CHANGE MASTER语句,该语句列出了复制源的二进制日志坐标
--enable-cleartext-plugin 启用清文本认证插件
--events 从导出的数据库中导出事件
--extended-insert 使用多行INSERT语法
--fields-enclosed-by 这个选项与--tab选项一起使用,含义与LOAD DATA对应的子句相同
--fields-escaped-by 这个选项与--tab选项一起使用,含义与LOAD DATA对应的子句相同
--fields-optionally-enclosed-by 这个选项与--tab选项一起使用,含义与LOAD DATA对应的子句相同
--fields-terminated-by 这个选项与--tab选项一起使用,含义与LOAD DATA对应的子句相同
--flush-logs 在开始备份之前清空MySQL服务器日志文件
--flush-privileges 在导出mysql数据库后发出一个FLUSH PRIVILEGES语句
--force 即使在表备份过程中发生SQL错误,也继续执行
--get-server-public-key 从服务器请求RSA公钥
--help 显示帮助信息并退出
--hex-blob 使用十六进制表示来导出二进制列
--host MySQL服务器所在主机的名称或IP地址
--ignore-error 忽略指定的错误代码
--ignore-table 不导出指定的表
--ignore-views 跳过导出视图
--include-master-host-port 在CHANGE MASTER语句中包含MASTER_HOST/MASTER_PORT选项
--include-source-host-port 在CHANGE REPLICATION SOURCE TO语句中包含SOURCE_HOST和SOURCE_PORT选项
--init-command 单个SQL语句,用于在连接或重新连接到MySQL服务器后执行;重置现有定义的命令
--init-command-add 在连接或重新连接到MySQL服务器后执行额外的SQL语句
--insert-ignore 使用INSERT IGNORE而不是INSERT语句
--lines-terminated-by 这个选项与--tab选项一起使用,含义与LOAD DATA对应的子句相同
--lock-all-tables 锁定所有表,跨越所有数据库
--lock-tables 在导出它们之前锁定所有表
--log-error 将警告和错误附加到指定的文件中
--login-path 从~/.mylogin.cnf读取登录路径选项
--master-data 将二进制日志文件名和位置写入输出中
--max-allowed-packet 发送到或从服务器接收的最大数据包长度
--mysqld-long-query-time 慢查询阈值的会话值
--net-buffer-length TCP/IP和套接字通信的缓冲区大小
--network-timeout 增加网络超时,以允许更大的表导出
--no-autocommit 将每个导出的表的INSERT语句包围在SET autocommit = 0和COMMIT语句中
--no-create-db 不写入CREATE DATABASE语句
--no-create-info 不写入重新创建每个导出的表的CREATE TABLE语句
--no-data 不要导出表内容
--no-defaults 不读取任何选项文件
--no-login-paths 不要从登录路径文件中读取登录路径
--no-set-names 与--skip-set-charset相同
--no-tablespaces 不写入任何CREATE LOGFILE GROUP或CREATE TABLESPACE语句到输出中
--opt 简写命令:--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset
--order-by-primary 按每个表的主键或第一个唯一索引对表的行进行排序
--output-as-version 确定复制和事件术语在备份中使用;用于与旧版本的兼容性
--password 连接到服务器时使用的密码
--password1 连接到服务器时使用的第一个多因素认证密码
--password2 连接到服务器时使用的第二个多因素认证密码
--password3 连接到服务器时使用的第三个多因素认证密码
--pipe 使用命名管道(Windows-only)连接到服务器
--plugin-authentication-kerberos-client-mode 允许通过MIT Kerberos库在Windows上进行GSSAPI插件认证
--plugin-dir 插件安装目录
--port TCP/IP端口号
--print-defaults 打印默认选项
--protocol 使用的传输协议
--quick 从服务器一个行记录一个行记录地检索表的行
--quote-names 在反引号字符中引用标识符
--replace 使用REPLACE语句而不是INSERT语句
--result-file 将输出直接写入给定的文件
--routines 从备份的数据库中导出存储的程序(过程和函数)
--server-public-key-path 包含RSA公钥的文件路径名
--set-charset 将输出中添加SET NAMES default_character_集
--set-gtid-purged 是否在输出中添加SET @@GLOBAL.GTID_PURGED
--shared-memory-base-name 共享内存名称(Windows-only)用于共享内存连接
--show-create-skip-secondary-engine 排除 SECONDARY ENGINE 子句从 CREATE TABLE 语句中
--single-transaction 在服务器上以单个事务的方式导出数据
--skip-add-drop-table 不在每个 CREATE TABLE 语句前添加一个 DROP TABLE 语句
--skip-add-locks 不在导出文件中添加锁定信息
--skip-comments 不在导出文件中包含注释
--skip-compact 不产生紧凑的输出
--skip-disable-keys 不禁用索引
--skip-extended-insert 关闭扩展插入功能
--skip-generated-invisible-primary-key 不在导出文件中包含生成的不可见主键
--skip-opt 关闭由 --opt 设置的选项
--skip-quick 不逐行从服务器检索表格数据
--skip-quote-names 不引用标识符
--skip-set-charset 不在导出文件中包含 SET NAMES 语句
--skip-triggers 不导出触发器
--skip-tz-utc 关闭 tz-utc 功能
--socket 要使用的 Unix 套接字文件或 Windows 命名管道
--source-data 将二进制日志文件的名称和位置写入输出中
--ssl-ca 包含信任 SSL 证书授权机构的文件
--ssl-capath 包含信任 SSL 证书授权机构证书文件的目录
--ssl-cert 包含 X.509 证书的文件
--ssl-cipher 用于连接加密的可接受密码
--ssl-crl 包含证书撤销列表的文件
--ssl-crlpath 包含证书撤销-列表文件的目录
--ssl-fips-mode 是否启用FIPS模式在客户端
--ssl-key 包含X.509密钥的文件
--ssl-mode 连接到服务器时期望的安全状态
--ssl-session-data 包含SSL会话数据的文件
--ssl-session-data-continue-on-failed-reuse 如果会话重用失败是否建立连接
--tab 生成以制表符分隔的数据文件
--tables 覆盖--databases或-B选项
--tls-ciphersuites 用于加密连接的TLSv1.3密码套件
--tls-sni-servername 由客户端提供的服务器名称
--tls-version 用于加密连接的TLS协议
--triggers 为每个导出的表导出触发器
--tz-utc 将SET TIME_ZONE='+00:00'添加到导出文件中
--user 用于连接到服务器的MySQL用户名
--verbose 详细模式
--version 显示版本信息并退出
--where 根据给定的WHERE条件仅导出行
--xml 生成XML输出
--zstd-compression-level 用于连接到服务器的ZSTD压缩级别

命令mysqldump将信息导出到MySQL服务器。以下选项指定如何连接到MySQL服务器,可能是在同一台机器上或远程系统。

  • --bind-address=ip_地址

    Command-Line Format --bind-地址=ip_地址

    在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。

  • --compress, -C

    Command-Line Format --压缩[={OFF|ON}]
    Deprecated
    Type 布尔值
    Default Value OFF

    如果可能,压缩客户端和服务器之间发送的所有信息。请参阅第6.2.8节,“连接压缩控制”

    这个选项已经过时。预计将来版本的MySQL中会移除它。请参阅配置遗留连接压缩

  • --compression-algorithms=value

    Command-Line Format --compression-algorithms=value
    Type 设置
    Default Value uncompressed
    Valid Values

    zlib

    zstd

    uncompressed

    用于连接到服务器的允许压缩算法。可用的算法与protocol_compression_algorithms系统变量相同。默认值为uncompressed

    更多信息,请参阅第6.2.8节,“连接压缩控制”

  • --default-auth=plugin

    Command-Line Format --default-auth=plugin
    Type 字符串

    关于哪个客户端认证插件的提示。请参阅第8.2.17节,“可插拔认证”

  • --enable-cleartext-plugin

    Command-Line Format --enable-cleartext-plugin
    Type 布尔值
    Default Value FALSE

    启用mysql_clear_password清文本认证插件。请参阅第8.4.1.4节,“客户端可插拔清文本认证”

  • --get-server-public-key

    Command-Line Format --get-server-public-key
    Type 布尔值

    从服务器请求用于RSA密钥对密码交换所需的公钥。这选项适用于使用caching_sha2_password认证插件进行身份验证的客户端。对于该插件,服务器不会发送公钥,除非被请求。此选项对于不使用RSA密码交换或连接时使用安全连接的账户会被忽略。这意味着如果客户端直接连接到服务器,而不是通过代理服务器,那么这个选项将被忽略。

    如果给定了--server-public-key-path=file_name并且它指定了一个有效的公钥文件,那么它将优先于--get-server-public-key

    关于caching_sha2_password插件的信息,请参阅Section 8.4.1.2, “Caching SHA-2 Pluggable Authentication”

  • --host=host_name, -h host_name

    Command-Line Format --host

    从MySQL服务器上导出数据,指定的主机。默认主机是localhost

  • --login-path=name

    Command-Line Format --login-path=name
    Type 字符串

    从命名的登录路径中读取选项,位于.mylogin.cnf登录路径文件中。一个登录路径”是一个包含指定MySQL服务器连接到的选项和用于身份验证的帐户的选项组。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。参见Section 6.6.7, “mysql_config_editor — MySQL Configuration Utility”

    关于此和其他选项文件选项的更多信息,请参阅Section 6.2.2.3, “Command-Line Options that Affect Option-File Handling”

  • --no-login-paths

    Command-Line Format --no-login-paths

    跳过读取登录路径文件中的选项。

    有关此选项的相关信息,请参阅--login-path

    关于此和其他选项文件选项的更多信息,请参阅Section 6.2.2.3, “Command-Line Options that Affect Option-File Handling”

  • --password[=password], -p[password]

    Command-Line Format --password[=password]
    Type 字符串

    MySQL服务器连接用的帐户密码。密码值是可选的。如果不给出,mysqldump 会提示输入一个。如果给出,那么在--password=-p后面不能有空格。如果没有指定密码选项,默认情况下不会发送密码。

    在命令行上指定密码应该被认为是不安全的。为了避免在命令行上输入密码,使用选项文件。请参阅第8.1.2.1节,“用户密码安全指南”

    如果要明确指定没有密码,并且mysqldump 不应该提示输入密码,请使用--skip-password选项。

  • --password1[=pass_val]

    用于连接到服务器的MySQL帐户的多因素认证第一个因素的密码。密码值是可选的。如果不给出,mysqldump 会提示输入一个。如果给出,那么在--password1=后面不能有空格。如果没有指定密码选项,默认情况下不会发送密码。

    在命令行上指定密码应该被认为是不安全的。为了避免在命令行上输入密码,使用选项文件。请参阅第8.1.2.1节,“用户密码安全指南”

    如果要明确指定没有密码,并且mysqldump 不应该提示输入密码,请使用--skip-password1选项。

    --password1--password是同义词,--skip-password1--skip-password也是同义词。

  • --password2[=pass_val]

    MySQL账户用于连接服务器的多因素认证第二因素密码。该选项的语义与--password1的语义相似;请参阅该选项的描述以获取详细信息。

  • --password3[=pass_val]

    MySQL账户用于连接服务器的多因素认证第三因素密码。该选项的语义与--password1的语义相似;请参阅该选项的描述以获取详细信息。

  • --pipe, -W

    Command-Line Format --pipe
    Type 字符串

    在Windows上,使用命名管道连接到服务器。这一选项仅适用于服务器以支持命名管道连接的方式启动,并且执行连接的用户必须是由named_ pipe_full_access_group系统变量指定的Windows组成员。

  • --plugin-authentication-kerberos-client-mode=value

    Command-Line Format --plugin-authentication-kerberos-client-mode
    Type 字符串
    Default Value SSPI
    Valid Values GSSAPI

    在Windows上,authentication_ kerberos_client认证插件支持此插件选项。它提供了两个可能的值供客户端用户在运行时设置:SSPIGSSAPI

    默认情况下,用于客户端侧插件选项的值使用安全支持提供程序接口(SSPI),它能够从Windows内存缓存中获取凭据。或者,客户端用户可以选择一个模式,该模式通过MIT Kerberos库在Windows上支持通用安全服务应用程序程序接口(GSSAPI)。GSSAPI能够从以前使用kinit命令生成的缓存凭据中获取。

    有关更多信息,请参阅Windows客户端在GSSAPI模式下的命令

  • --plugin-dir=dir_name

    Command-Line Format --plugin-dir=dir_name
    Type 目录名称

    指定插件目录。只有当使用--default-auth选项指定了认证插件,但mysqldump无法找到它时,需要指定这个选项。请参阅第8.2.17节,“可插拔认证”

  • --port=端口号, -P 端口号

    Command-Line Format --port=端口号
    Type 数字
    Default Value 3306

    用于TCP/IP连接的端口号。

  • --protocol={TCP|SOCKET|PIPE|MEMORY}

    Command-Line Format --protocol=类型
    Type 字符串
    Default Value [请参阅文本]
    Valid Values

    TCP

    SOCKET

    PIPE

    MEMORY

    用于连接到服务器的传输协议。它在其他连接参数通常导致使用不同于您想要的协议时非常有用。在可接受值的详细信息,请参阅第6.2.7节,“连接传输协议”

  • --server-public-key-path=文件名

    Command-Line Format --server-public-key-path=文件名
    Type 文件名

    包含服务器端公钥的PEM格式文件路径。这个选项适用于使用--server-public-key-path=文件名的客户端。这个选项对于不使用RSA密钥对密码交换的账户是被忽略的。这也适用于当客户端连接到服务器时使用安全连接时,RSA-基于密码交换不被使用的情况。

    如果给出了--server-public-key-path=文件名并指定了有效的公钥文件,它将优先于--get-server-public-key

    对于--server-public-key-path=文件名,这个选项仅适用于使用OpenSSL构建的MySQL版本。

    关于 sha256_密码缓存_sha2_密码 插件的信息,请参阅第 8.4.1.3 节,“SHA-256 可插拔认证”,以及第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”

  • --socket=路径, -S 路径

    Command-Line Format --socket={文件名|管道名}
    Type 字符串

    对于连接到 localhost 的情况,Unix 套接字文件路径,或在 Windows 上,用于命名管道的名称。

    在 Windows 上,这个选项仅适用于服务器以支持命名管道启动时启用。另外,尝试连接的用户必须是由 named_pipe 系统变量指定的 Windows 组中的成员。

  • --ssl*

    --ssl 开头的选项指定是否使用加密连接,并指示在哪里找到 SSL 密钥和证书。请参阅命令选项:加密连接

  • --ssl-fips-mode={OFF|ON|STRICT}

    Command-Line Format --ssl-fips-mode={OFF|ON|STRICT}
    Deprecated
    Type 枚举
    Default Value OFF
    Valid Values

    OFF

    ON

    STRICT

    控制客户端是否启用 FIPS 模式。与其他以 --ssl-xxx 开头的选项不同,--ssl-fips-mode 选项不是用于建立加密连接的,而是用来影响哪些加密操作被允许。请参阅第 8.8 节,“FIPS 支持”

    这些 --ssl-fips-mode 值是允许的:

    • OFF:禁用 FIPS 模式。

    • ON:启用 FIPS 模式。

    • STRICT:启用“严格”FIPS 模式。

    Note

    如果 OpenSSL FIPS 对象模块不可用,唯一允许的 --ssl-fips-mode 的值是 OFF。在这种情况下,将 --ssl-fips-mode 设置为 ONSTRICT 将导致客户端在启动时产生一个警告,并以非 FIPS 模式运行。

    这个选项已经过时。预计将来版本的 MySQL 中会移除它。

  • --tls-ciphersuites=ciphersuite_list

    Command-Line Format --tls-ciphersuites=ciphersuite_list
    Type 字符串

    用于TLSv1.3加密连接的允许密码套件。值是一个由一个或多个冒号分隔的密码套件名称列表。可以为此选项命名的密码套件取决于用来编译 MySQL 的 SSL 库。有关详细信息,请参阅第 8.3.2 节,“加密连接的TLS协议和密码套件”

  • --tls-sni-servername=server_name

    Command-Line Format --tls-sni-servername=server_name
    Type 字符串

    当指定时,该名称将传递给 libmysqlclient C API 库,使用 mysql_options()MYSQL_ OPT_TLS_SNI_SERVERNAME 选项。服务器名称不区分大小写。要查看客户端为当前会话指定的服务器名称(如果有),请检查Tls_sni_server_name状态变量。

    Server Name Indication (SNI) 是对TLS协议的扩展(OpenSSL必须使用TLS扩展编译以使此选项功能)。MySQL SNI实现仅限客户端。

  • --tls-version=protocol_list

    Command-Line Format --tls-version=protocol_list
    Type 字符串
    Default Value

    TLSv1, TLSv1.1, TLSv1.2, TLSv1.3 (OpenSSL 1.1.1 或更高版本)

    TLSv1, TLSv1.1, TLSv1.2 (否则)

    加密连接的允许TLS协议。值是一个由一个或多个逗号分隔的协议名称列表。可以为此选项命名的协议取决于用来编译 MySQL 的 SSL 库。有关详细信息,请参阅第 8.3.2 节,“加密连接的TLS协议和密码套件”

  • --user=user_name, -u user_name

    Command-Line Format --user=user_名
    Type 字符串

    要用于连接到服务器的MySQL账户名称。

    如果您正在使用Rewriter插件,您应该授予该用户SKIP_QUERY_REWRITE权限。

  • --zstd-compression-level=级别

    Command-Line Format --zstd-compression-level=数字
    Type 整数

    用于连接到服务器的zstd压缩算法的压缩级别。允许的级别从1到22,较大的值表示更高的压缩水平。默认的zstd压缩级别为3。压缩级别设置对不使用zstd压缩算法的连接没有影响。

    有关更多信息,请参阅第6.2.8节,“连接压缩控制”

这些选项用于控制要读取的选项文件。

mysqldump 的使用场景包括设置整个新 MySQL 实例(包括数据库表),以及用现有数据库和表替换现有实例中的数据。以下选项允许您在恢复备份时指定要清理或创建的内容,通过将各种 DDL 语句编码到备份文件中。

以下选项将打印调试信息,将调试信息编码到备份文件中,或者让备份操作继续进行,即使存在潜在问题。

  • --allow-keywords

    Command-Line Format --allow-keywords

    允许创建以关键字命名的列。这种方法是通过在每个列名前加上表名来实现的。

  • --comments, -i

    Command-Line Format --comments

    在备份文件中添加额外信息,如程序版本、服务器版本和主机。这项选项默认启用。要抑制这些额外信息,请使用 --skip-comments

  • --debug[=debug_options], -# [debug_options]

    Command-Line Format --debug[=debug_options]
    Type 字符串
    Default Value d:t:o,/tmp/mysqldump.trace

    生成调试日志。一个典型的 debug_options 字符串是 d:t:o,file_name。默认值为 d:t:o,/tmp/mysqldump.trace

    这项选项仅在 MySQL 使用 WITH_DEBUG 构建时可用。Oracle 提供的 MySQL 发行版是 使用此选项构建的。

  • --debug-check

    Command-Line Format --debug-check
    Type 布尔值
    Default Value FALSE

    在程序退出时打印一些调试信息。

    这项选项仅在 MySQL 使用 WITH_DEBUG 构建时可用。Oracle 提供的 MySQL 发行版是 使用此选项构建的。

  • --debug-info

    Command-Line Format --debug-info
    Type 布尔值
    Default Value FALSE

    在程序退出时打印调试信息和内存和 CPU 使用情况统计。

    这项选项仅在 MySQL 使用 WITH_DEBUG 构建时可用。Oracle 提供的 MySQL 发行版是 使用此选项构建的。

  • --dump-date

    Command-Line Format --dump-date
    Type 布尔值
    Default Value TRUE

    如果给出了 --comments 选项,mysqldump 在备份的末尾添加以下形式的注释:

    -- Dump completed on DATE

    然而,日期会导致在不同时间创建的备份文件看起来不同,即使数据本身是相同的。--dump-date--skip-dump-date 控制是否在评论中添加日期。默认情况下是 --dump-date(包括日期在评论中)。--skip-dump-date 忽略日期打印。

  • --force, -f

    Command-Line Format --force

    忽略所有错误;即使在表格备份期间发生 SQL 错误,也继续执行。

    这个选项的一个用途是让 mysqldump 继续执行,即使遇到一个因为定义中引用了已被删除的表而变得无效的视图。没有 --forcemysqldump 会因为错误消息而退出。有 --forcemysqldump 打印错误消息,但它也将 SQL 评论写入备份输出中,包含视图定义,并继续执行。

    如果同时给出 --ignore-error 选项来忽略特定错误,--force 优先级更高。

  • --log-error=file_name

    Command-Line Format --log-error=file_name
    Type 文件名

    将警告和错误追加到命名的文件中。默认情况下,不进行日志记录。

  • --skip-comments

    Command-Line Format --skip-comments

    查看 --comments 选项的描述。

  • --verbose, -v

    Command-Line Format --verbose

    详细模式。打印更多关于程序做什么的信息。

以下选项显示了关于 mysqldump 命令本身的信息。

  • --help, -?

    Command-Line Format --help

    显示帮助消息并退出。

  • --version, -V

    Command-Line Format --version

    显示版本信息并退出。

以下选项改变了mysqldump命令如何表示字符数据的国家语言设置。

复制 Options

mysqldump命令经常用于创建一个空实例,或者包含数据的实例,在复制配置中在源服务器和副本服务器之间进行数据迁移。以下选项适用于在复制源服务器和副本服务器上导出和还原数据。

  • --apply-replica-statements

    Command-Line Format --apply-replica-statements
    Type 布尔值
    Default Value FALSE

    对于使用--dump-replica选项生成的副本备份,这个选项在输出中添加一个STOP REPLICA语句,位于二进制日志坐标的语句之前,并在输出结束时添加一个START REPLICA语句。

  • --apply-slave-statements

    Command-Line Format --apply-slave-statements
    Deprecated 是的
    Type 布尔值
    Default Value FALSE

    这是--apply-replica-statements的过时别名。

  • --delete-source-logs

    Command-Line Format --delete-source-logs

    在复制源服务器上,删除二进制日志文件,通过向服务器发送PURGE BINARY LOGS语句来完成备份操作。这项选项需要RELOAD权限以及执行该语句所需的其他权限。此外,这个选项自动启用--source-data

  • --delete-master-logs

    Command-Line Format --delete-master-logs
    Deprecated 是的

    这是--delete-source-logs的过时别名。

  • --dump-replica[=value]

    Command-Line Format --dump-replica[=value]
    Type 数值
    Default Value 1
    Valid Values

    1

    2

    这项选项与--source-data类似,但用于将复制服务器导出,以生成一个可以用来设置另一个服务器作为具有相同源的副本的备份文件。该选项会导致导出的输出包含一个CHANGE REPLICATION SOURCE TO语句,该语句指示被导出副本的源服务器的二进制日志坐标(文件名和位置)。该CHANGE REPLICATION SOURCE TO语句会从SHOW REPLICA STATUS的输出中读取Relay_Master_Log_FileExec_Master_Log_Pos的值,并将它们用于SOURCE_LOG_FILESOURCE_LOG_POS。这些是从副本开始复制的源服务器的坐标。

    Note

    从中继日志执行的事务序列不一致可能导致错误地使用位置。有关更多信息,请参阅第19.5.1.34节,“复制和事务不一致性”

    --dump-replica会使用源的坐标,而不是被导出的服务器的坐标,这与--source-data选项相同。此外,指定此选项将覆盖--source-data选项。

    Warning

    在应用备份到使用gtid_ mode=ONSOURCE_AUTO_POSITION=1的服务器时,不应该使用--dump-replica选项。

    该选项值与--source-data相同。设置无值或1会导致在备份中写入一个CHANGE REPLICATION SOURCE TO语句。设置为2会将语句写入备份,但以SQL注释的形式包围它。这与--source-data在启用或禁用其他选项以及锁定处理方面具有相同效果。

    --dump-replica会导致mysqldump在导出之前停止复制的SQL线程,并在导出后重新启动它。

    --dump-replica会向服务器发送一个SHOW REPLICA STATUS语句以获取信息,因此需要足够的权限来执行该语句。

    --apply-replica-statements--include-source-host-port 选项可以与 --dump-replica 一起使用。

  • --dump-slave[=value]

    Command-Line Format --dump-slave[=value]
    Deprecated 是的
    Type 数值型
    Default Value 1
    Valid Values

    1

    2

    这是一项过时的别名,用于 --dump-replica

  • --include-source-host-port

    Command-Line Format --include-source-host-port
    Type 布尔值
    Default Value FALSE

    SOURCE_HOSTSOURCE_PORT 选项添加到复制源的主机名和 TCP/IP 端口号码,用于在使用 --dump-replica 选项时生成的复制副本中的 CHANGE REPLICATION SOURCE TO 语句。

  • --include-master-host-port

    Command-Line Format --include-master-host-port
    Deprecated 是的
    Type 布尔值
    Default Value FALSE

    这是一项过时的别名,用于 --include-source-host-port

  • --master-data[=value]

    Command-Line Format --master-data[=value]
    Deprecated 是的
    Type 数值型
    Default Value 1
    Valid Values

    1

    2

    这是一项过时的别名,用于 --source-data

  • --output-as-version=value

    Command-Line Format --output-as-version=value
    Type 枚举值
    Default Value SERVER
    Valid Values

    BEFORE_8_0_23

    BEFORE_8_2_0

    确定用于描述副本和事件语句的术语级别,使得可以创建与不接受新术语的更旧版本MySQL兼容的备份。这项选项可以采用以下任何一种值,效果如所列:

    • SERVER:读取服务器版本并使用与该版本兼容的最新语句。这是默认值。

    • BEFORE_8_0_23:使用在MySQL 8.0.23之前版本中已弃用的术语,如“slave”和“master”,将其替换为“replica”和“source”,以便与更早的MySQL版本兼容。

      此选项还会在SHOW CREATE EVENT输出中复制BEFORE_8_2_0的效果。

    • BEFORE_8_2_0:此选项会使SHOW CREATE EVENT反映在MySQL 8.2.0之前版本中事件将如何创建,显示DISABLE ON SLAVE而不是DISABLE ON REPLICA

    此选项会影响--events--dump-replica--source-data--apply-replica-statements--include-source-host-port的输出。

  • --source-data[=value]

    Command-Line Format --source-data[=value]
    Type 数值
    Default Value 1
    Valid Values

    1

    2

    用于将复制源服务器的备份导出,以产生一个可以用来为另一个服务器设置其为源服务器副本的备份文件。选项会导致输出中包含一个CHANGE REPLICATION SOURCE TO语句,该语句指示了被导出的服务器的二进制日志坐标(文件名和位置),这些是副本从哪个源服务器开始复制的坐标,用户在将备份文件加载到副本中时会使用。

    如果选项值为2,则CHANGE REPLICATION SOURCE TO语句作为SQL注释写入,因此在重新加载备份文件时没有效果;如果选项值为1,则该语句不作为注释写入,在重新加载备份文件时会生效;如果未指定选项值,默认值为1。

    --source-数据 发送一个SHOW BINARY LOG STATUS 语句到服务器以获取信息,因此它们需要足够的权限来执行该语句。此外,这个选项还需要RELOAD 权限,并且二进制日志必须被启用。

    --source-数据 自动关闭--lock-tables。它们还打开--lock-all-tables,除非同时指定了--single-transaction,在这种情况下,会在导出开始时对全局读锁进行短暂的获取(请参阅--single-transaction 的描述)。无论哪种情况,任何日志操作都在导出时发生。

    还可以通过使用--dump-replica 选项来设置副本,忽略--source-数据

  • --set-gtid-purged=value

    Command-Line Format --set-gtid-purged=value
    Type 枚举
    Default Value AUTO
    Valid Values

    OFF

    ON

    AUTO

    这个选项是为使用GTID-基于复制的服务器(gtid_模式=ON)设计的。它控制在导出输出中包含一个SET @@GLOBAL.gtid_purged 语句,该语句在将导出文件重新加载到服务器时更新gtid_executed 系统变量的值,来自源服务器的gtid_purged 系统变量。mysqldump 因此添加了源服务器上执行的交易的GTID,以便目标服务器记录这些交易为已应用,但它不在其二进制日志中。--set-gtid-purged 还控制在导出文件重新加载时包含一个SET @@SESSION.sql_log_bin=0 语句,该语句禁用二进制日志记录,防止在导出文件中执行的交易生成新的GTID并分配给它们,以便使用原始的GTID。

    如果您没有设置 --set-gtid-purged 选项,mysqldump 将在备份输出中包含一个 SET @@GLOBAL.gtid_purged 语句,如果服务器启用了GTID,并且全局变量 gtid_executed 中的 GTID 集合不为空。此外,如果服务器启用了GTID,mysqldump 还将包含一个 SET @@SESSION.sql_log_bin=0 语句。

    您可以通过指定一个特定的 GTID 集合来替换 gtid_purged 的值,或者在语句中添加一个加号 (+) 来将指定的 GTID 集合追加到已经由 gtid_purged 持有的 GTID 集合中。mysqldump 记录的 SET @@GLOBAL.gtid_purged 语句包括一个版本特定的注释,mysqldump 将在备份文件中添加来自 dump 文件的 GTID 集合到现有 gtid_purged 值中。

    重要的是要注意,mysqldump 为 SET @@GLOBAL.gtid_purged 语句包含了服务器上所有在 gtid_executed 集合中的事务的 GTIDs,包括那些改变了被抑制的数据库部分或其他服务器上的数据库(即使这些数据库未包含在部分备份中)。这意味着当 dump 文件在目标服务器上重放时,gtid_purged 值可能会更新,但在目标服务器上没有任何关联数据的 GTIDs 会存在。如果您不在目标服务器上重放进一步的 dump 文件,这些额外的 GTIDs 不会导致任何问题,但它们会使在不同服务器上的 GTID 集合比较或一致性检查更加困难。如果您在目标服务器上重放包含相同 GTIDs 的另一个部分备份(例如,来自同一源服务器),第二个 dump 文件中的 SET @@GLOBAL.gtid_purged 语句将失败。在这种情况下,您可以手动删除该语句,或在重放 dump 文件之前从输出中排除它。

    如果 SET @@GLOBAL.gtid_purged 语句在目标服务器上没有预期的效果,您可以排除该语句,或者将其包含但注释掉,以便不会自动执行。您还可以将该语句包含,但手动编辑 dump 文件以实现所需的结果。

    --set-gtid-purged 选项的可能值如下:

    AUTO

    默认值。如果服务器上启用了GTIDs并且gtid_executed不为空,输出中会添加SET @@GLOBAL.gtid_purged,其值来自gtid_executed。如果启用了GTIDs,输出中会添加SET @@SESSION.sql_log_bin=0。如果服务器上未启用GTIDs,该语句不会出现在输出中。

    OFF

    SET @@GLOBAL.gtid_purged不会出现在输出中,SET @@SESSION.sql_log_bin=0也不会出现在输出中。在GTIDs不使用的服务器上,使用这个选项或AUTO。只在确保目标服务器上的gtid_purged中包含所需的GTID集且不需要更改,或者计划手动识别并添加任何缺失的GTIDs时,才在启用了GTIDs的服务器上使用这个选项。

    ON

    如果服务器上启用了GTIDs,输出中会添加SET @@GLOBAL.gtid_purged(除非gtid_executed为空),并且输出中会添加SET @@SESSION.sql_log_bin=0。如果设置了这个选项但服务器上未启用GTIDs,将发生错误。在使用GTIDs的服务器上,使用这个选项或AUTO,除非确定gtid_executed中的GTIDs在目标服务器上不需要使用。

    COMMENTED

    如果服务器上启用了GTIDs,输出中会添加SET @@GLOBAL.gtid_purged(除非gtid_executed为空),但它会被注释掉。这意味着gtid_executed的值在输出中可用,但不会自动执行任何操作,当将备份文件重新加载时。输出中会添加SET @@SESSION.sql_log_bin=0,并且不会被注释掉。使用COMMENTED可以控制gtid_executed集的使用,或者通过自动化进行控制。例如,您可能希望这样做,如果您正在将数据迁移到另一个服务器,该服务器已经有不同的活动数据库。

以下选项指定如何在备份文件中表示整个备份文件或某些类型的数据,以及是否写入备份文件中的可选信息。

  • --compact

    Command-Line Format --compact

    生成更紧凑的输出。这项选项启用了--skip-add-drop-table--skip-add-locks--skip-comments--skip-disable-keys--skip-set-charset 选项。

  • --compatible=name

    Command-Line Format --compatible=name[,name,...]
    Type 字符串
    Default Value ''
    Valid Values

    ansi

    mysql323

    mysql40

    postgresql

    oracle

    mssql

    db2

    maxdb

    no_key_options

    no_table_options

    no_key_options

    生成与其他数据库系统或更老的 MySQL 服务器兼容的输出。该选项唯一允许的值为 ansi,它的含义与用于设置服务器 SQL 模式的对应选项相同。请参阅第 7.1.11 节,“Server SQL Modes”

  • --complete-insert, -c

    Command-Line Format --complete-insert

    使用完整的INSERT语句,这些语句包括列名。

  • --create-options

    Command-Line Format --create-options

    CREATE TABLE语句中包含所有 MySQL 特有的表选项。

  • --fields-terminated-by=..., --fields-enclosed-by=..., --fields-optionally-enclosed-by=..., --fields-escaped-by=...

    Command-Line Format --fields-terminated-by=string
    Type 字符串
    Command-Line Format --fields-enclosed-by=string
    Type 字符串
    Command-Line Format --fields-optionally-enclosed-by=string
    Type 字符串
    Command-Line Format --fields-escaped-by
    Type 字符串

    这些选项与--tab选项一起使用,其含义与对应的FIELDS子句相同,用于LOAD DATA。请参阅第15.2.9节,“LOAD DATA Statement”

  • --hex-blob

    Command-Line Format --hex-blob

    使用十六进制表示法导出二进制列(例如,'abc'变为0x616263)。影响的数据类型包括BINARYVARBINARYBLOB类型、BIT、所有空间数据类型以及其他非二进制数据类型,尤其是当与binary字符集一起使用时。

    --hex-blob选项在使用--tab时被忽略。

  • --lines-terminated-by=...

    Command-Line Format --lines-terminated-by=string
    Type 字符串

    这个选项与--tab一起使用,其含义与对应的LINES子句相同,用于LOAD DATA。请参阅第15.2.9节,“LOAD DATA Statement”

  • --quote-names, -Q

    Command-Line Format --quote-names
    Disabled by skip-quote-names

    在`字符中引用标识符(如数据库、表和列名)。如果启用了ANSI_QUOTES SQL 模式,标识符将以“字符引起来。这个选项默认是启用的,可以通过--skip-quote-names禁用,但应该在任何可能启用--quote-names的选项(如--compatible)之后给出。

  • --result-file=file_name, -r file_name

    Command-Line Format --result-file=file_name
    Type 文件名

    将输出直接写入指定的文件中。即使在生成备份时发生错误,结果文件也会被创建,并且其之前的内容会被覆盖。

    在Windows上使用此选项可以防止换行符\n字符被转换为\r\n回车/换行序列。

  • --show-create-skip-secondary-engine=value

    Command-Line Format --show-create-skip-secondary-engine

    CREATE TABLE语句中排除SECONDARY ENGINE子句。它通过为备份操作的整个持续时间启用show_create_table_skip_secondary_engine系统变量来实现这一点,或者在使用mysqldump之前启用show_create_table_skip_secondary_engine系统变量。

  • --tab=dir_name, -T dir_name

    Command-Line Format --tab=dir_name
    Type 目录名

    生成以制表符分隔的文本格式数据文件。对于每个导出的表,mysqldump 创建一个以tbl_name.sql为扩展名的文件,该文件包含创建表的CREATE TABLE语句,以及服务器写入一个以tbl_name.txt为扩展名的文件,该文件包含表的数据。选项值是要写入文件的目录。

    Note

    这项选项应仅在mysqldump运行在与mysqld服务器相同的机器上时使用。因为服务器会在您指定的目录中创建*.txt文件,这个目录必须对服务器可写,并且您用于MySQL账户必须具有FILE权限。因为mysqldump会在同一目录中创建*.sql文件,它必须对您的系统登录账户可写。

    默认情况下,.txt数据文件使用制表符字符分隔列值,并且每行以换行符结束。格式可以通过--fields-xxx--lines-terminated-by选项来指定。

    列值将被指定由--default-character-set选项指定的字符集转换。

  • --tz-utc

    Command-Line Format --tz-utc
    Disabled by skip-tz-utc

    这项选项允许TIMESTAMP列在不同时间区间的服务器之间导出和重新加载。mysqldump将其连接时间区设置为UTC,并在备份文件中添加SET TIME_ZONE='+00:00'。没有这项选项,TIMESTAMP列在源和目标服务器的本地时间区间之间导出和重新加载,这可能导致值发生变化,如果服务器位于不同时间区。--tz-utc还保护了因夏令时而引起的变化。--tz-utc默认启用,可以通过使用--skip-tz-utc来禁用它。

  • --xml, -X

    Command-Line Format --xml

    以良好格式的XML输出备份。

    NULL, 'NULL', and Empty Values:对于名为column_name的列,在输出中,NULL值、空字符串和字符串值'NULL'之间有所区分。这个选项生成的输出如下所示。

    Value: XML Representation:
    NULL (unknown value)

    <field name="column_name" xsi:nil="true" />

    '' (空字符串)

    <field name="列名"></field>

    'NULL' (字符串值)

    <field name="列名">NULL</field>

    使用mysql客户端时,带有--xml选项的输出遵循前述规则。 (参见第 6.5.1.1 节,“mysql 客户端选项”。)

    使用mysqldump生成的 XML 输出还包括 XML 命名空间,如下所示:

    $> mysqldump --xml -u root world City
    <?xml version="1.0"?>
    <mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <database name="world">
    <table_structure name="City">
    <field Field="ID" Type="int(11)" Null="NO" Key="PRI" Extra="auto_increment" />
    <field Field="Name" Type="char(35)" Null="NO" Key="" Default="" Extra="" />
    <field Field="CountryCode" Type="char(3)" Null="NO" Key="" Default="" Extra="" />
    <field Field="District" Type="char(20)" Null="NO" Key="" Default="" Extra="" />
    <field Field="Population" Type="int(11)" Null="NO" Key="" Default="0" Extra="" />
    <key Table="City" Non_unique="0" Key_name="PRIMARY" Seq_in_index="1" Column_name="ID"
    Collation="A" Cardinality="4079" Null="" Index_type="BTREE" Comment="" />
    <options Name="City" Engine="MyISAM" Version="10" Row_format="Fixed" Rows="4079"
    Avg_row_length="67" Data_length="273293" Max_data_length="18858823439613951"
    Index_length="43008" Data_free="0" Auto_increment="4080"
    Create_time="2007-03-31 01:47:01" Update_time="2007-03-31 01:47:02"
    Collation="latin1_swedish_ci" Create_options="" Comment="" />
    </table_structure>
    <table_data name="City">
    <row>
    <field name="ID">1</field>
    <field name="Name">Kabul</field>
    <field name="CountryCode">AFG</field>
    <field name="District">Kabol</field>
    <field name="Population">1780000</field>
    </row>
    
    ...
    
    <row>
    <field name="ID">4079</field>
    <field name="Name">Rafah</field>
    <field name="CountryCode">PSE</field>
    <field name="District">Rafah</field>
    <field name="Population">92020</field>
    </row>
    </table_data>
    </database>
    </mysqldump>

以下选项控制哪些类型的架构对象被写入到备份文件中:按类别,例如触发器或事件;按名称,例如选择要导出的数据库和表;或者甚至使用WHERE子句来过滤表数据中的行。

  • --all-databases, -A

    Command-Line Format --all-databases

    导出所有数据库中的所有表。这与在命令行上列出所有数据库并使用--databases选项相同。

    Note

    查看--add-drop-database的描述以了解该选项与--all-databases不兼容的信息。

    在 MySQL 8.4 之前,使用--routines--events选项的mysqldump时,不需要使用--all-databases选项来包括存储的程序和事件:备份包含了 mysql 系统数据库,因此也包含了 mysql.procmysql.event 表,含有存储程序和事件定义。从 MySQL 8.4 开始,mysql.eventmysql.proc 表不再使用。对应对象的定义现在存储在数据字典表中,但那些表不会被导出。要将存储的程序和事件包括在使用--all-databases选项生成的备份中,必须显式地使用--routines--events选项。

  • --databases, -B

    Command-Line Format --databases

    导出多个数据库。通常,mysqldump 会将命令行中的第一个参数解释为数据库名称,后面的参数解释为表名称。使用这个选项,它会将所有的参数都解释为数据库名称。CREATE DATABASEUSE 语句会在每个新数据库之前包含在输出中。

    这个选项可以用来导出 performance_schema 数据库,这通常不会被导出,即使使用了 --all-databases 选项。(也要使用 --skip-lock-tables 选项。)

    Note

    查看 --add-drop-database 描述信息,了解该选项与 --databases 选项的不兼容性。

  • --events, -E

    Command-Line Format --events

    将事件调度器的事件包含在输出中。这个选项需要对这些数据库有 EVENT 权限。

    使用 --events 生成的输出包含了 CREATE EVENT 语句来创建事件。

  • --ignore-error=error[,error]...

    Command-Line Format --ignore-error=error[,error]...
    Type 字符串

    忽略指定的错误。这个选项的值是一个以逗号分隔的错误编号列表,用于指定在 mysqldump 执行过程中要忽略的错误。如果同时给出了 --force 选项来忽略所有错误,--force 将优先考虑。

  • --ignore-table=db_name.tbl_name

    Command-Line Format --ignore-table=db_name.tbl_name
    Type 字符串

    不要导出给定的表,这个表必须使用数据库和表的名称指定。要忽略多个表,可以重复使用这个选项。这也可以用来忽略视图。

  • --ignore-views=boolean

    Command-Line Format --ignore-views
    Type 布尔值
    Default Value FALSE

    在备份文件中跳过视图表。

  • --init-command=str

    Command-Line Format --init-command=str
    Type 字符串

    连接到MySQL服务器后执行的单个SQL语句。定义重置了由其或init-command-add定义的现有语句。

  • --init-command-add=str

    Command-Line Format --init-command-add=str
    Type 字符串

    在连接或重新连接到MySQL服务器后执行的额外SQL语句。它可以单独使用,但没有效果,如果在--init-command之前使用,因为init-command重置要调用的命令列表。

  • --no-data, -d

    Command-Line Format --no-data

    不写入任何表行信息(即,不备份表内容)。这对于只想备份表的CREATE TABLE语句有用(例如,创建一个空白副本的表以加载备份文件)。

  • --routines, -R

    Command-Line Format --routines

    在输出中包含存储的程序(过程和函数)以备份数据库。该选项需要全局SELECT权限。

    使用--routines生成的输出包含CREATE PROCEDURECREATE FUNCTION语句,以创建程序。

  • --skip-generated-invisible-primary-key

    Command-Line Format --skip-generated-invisible-primary-key
    Type 布尔值
    Default Value FALSE

    这项选项会导致生成的不可见主键在输出中被排除。有关更多信息,请参阅第15.1.20.11节,“Generated Invisible Primary Keys”

  • --tables

    Command-Line Format --tables

    覆盖--databases-B选项。mysqldump将所有跟随该选项的名称参数视为表名。

  • --triggers

    Command-Line Format --triggers
    Disabled by skip- triggers

    在输出中包含每个导出的表的触发器。这项选项默认启用,可以通过--skip-triggers禁用。

    为了能够导出一个表的触发器,您必须对该表拥有TRIGGER权限。

    允许多个触发器。mysqldump以激活顺序导出触发器,因此当导出的文件重新加载时,触发器将以相同的激活顺序创建。但是,如果一个mysqldump导出的文件包含多个对同一事件和动作时间的触发器,对于尝试将该文件加载到不支持多个触发器的旧服务器时,将会出现错误。有关解决方案,请参阅Downgrade Notes;您可以将触发器转换为兼容旧服务器的方式。

  • --where='where_ condition', -w 'where_condition'

    Command-Line Format --where='where_condition'

    仅导出符合给定WHERE条件的行。条件周围的引号是必需的,如果它包含空格或其他特殊字符,这些字符对您的命令解释器来说具有特殊含义。

    示例:

    --where="user='jimf'"
    -w"userid>1"
    -w"userid<1"

以下选项对于恢复操作的性能尤为重要。对于大型数据集,恢复操作(处理导出文件中的INSERT语句)是最耗时的部分。当急需快速恢复数据时,在进行此类操作之前应计划和测试其性能。在需要小时级别恢复时间的情况下,您可能会倾向于使用替代备份和恢复解决方案,如MySQL Enterprise Backup,用于仅包含InnoDB引擎的数据库或混合用途数据库。

性能还受到事务选项的影响,主要是对备份操作。

  • --column-statistics

    Command-Line Format --column-statistics
    Type 布尔值
    Default Value OFF

    ANALYZE TABLE语句添加到输出中,以便在重新加载备份文件时生成表的直方图统计信息。由于对大型表进行直方图生成可能需要很长时间,这个选项默认是禁用的。

  • --disable-keys, -K

    Command-Line Format --disable-keys

    对于每个表,使用INSERT语句包围它,并在其前后添加/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句。这可以加快加载备份文件的速度,因为索引在所有行都插入后才被创建。这个选项对MyISAM表的非唯一索引有效。

  • --extended-insert, -e

    Command-Line Format --extended-insert
    Disabled by skip-extended-insert

    使用多行语法的INSERT语句,其中包括几个VALUES列表。这可以减小备份文件的大小,并在重新加载时加快插入操作。

  • --insert-ignore

    Command-Line Format --insert-ignore

    INSERT IGNORE语句写入,而不是INSERT语句。

  • --max-allowed-packet=value

    Command-Line Format --max-allowed-packet=value
    Type 数字
    Default Value 25165824

    客户端/服务器通信的最大缓冲区大小。默认值为24MB,最大值为1GB。

    Note

    该选项的值特定于mysqldump,且不应与MySQL服务器的max_allowed_packet系统变量混淆;服务器值不能被单个从mysqldump发送的数据包超过,无论该选项设置为多少,即使后者更大。

  • --mysqld-long-query-time=value

    Command-Line Format --mysqld-long-query-time=value
    Type 数字
    Default Value 服务器全局设置

    设置long_ query_time系统变量的会话值。使用此选项,如果您希望增加从mysqldump的查询被记录到慢查询日志文件之前允许的时间。由于mysqldump执行全表扫描,其查询往往会超过有助于普通查询的全局long_ query_time设置。默认的全局设置为10秒。

    您可以使用--mysqld-long-query-time指定会话值,从0(意味着从mysqldump发送的所有查询都被记录到慢查询日志)到31536000(365天以秒为单位)。对于mysqldump的选项,您只能指定整秒。若不指定此选项,服务器的全局设置将应用于mysqldump的查询。

  • --net-buffer-length=value

    Command-Line Format --net-buffer-length=value
    Type 数字
    Default Value 16384

    客户端/服务器通信的初始缓冲区大小。当创建多行INSERT语句(如同使用--extended-insert--opt选项)时,mysqldump 创建的行最长可达--net-buffer-length字节。若您增加这个变量,请确保MySQL服务器net_buffer_length系统变量的值至少为此大小。

  • --network-timeout, -M

    Command-Line Format --network-timeout[={0|1}]
    Type 布尔值
    Default Value TRUE

    启用大表的导出,请将--max-allowed-packet设置为其最大值,并且网络读取和写入超时设置为较大值。这项选项默认启用。要禁用它,请使用--skip-network-timeout

  • --opt

    Command-Line Format --opt
    Disabled by skip-opt

    这项选项,默认启用,是--add-drop-table--add-locks--create-options--disable-keys--extended-insert--lock-tables--quick--set-charset的快捷方式。它提供了一个快速的导出操作,并且生成的备份文件可以迅速重新加载到MySQL服务器中。

    由于--opt选项默认启用,您只需指定其对应的选项,即--skip-opt来关闭多个默认设置。有关如何选择性地启用或禁用由mysqldump 选项组控制的选项的讨论,请参阅mysqldump 选项组

  • --quick, -q

    Command-Line Format --quick
    Disabled by skip-quick

    这项选项对于备份大型表格非常有用。它强制mysqldump从服务器中按行逐一检索表格的数据,而不是一次性检索所有数据并在内存中缓冲后再写出。这样可以减少内存使用量,特别是当处理大型表格时。

  • --skip-opt

    Command-Line Format --skip-opt

    请参阅--opt选项的描述。

以下几种选项之间存在一个权衡:它们可以在备份操作中提高性能,但可能会牺牲数据的一致性和完整性。

  • --add-locks

    Command-Line Format --add-locks

    在每个表格的备份前后分别添加LOCK TABLESUNLOCK TABLES语句。这可以在将备份文件重新加载到服务器时加快插入操作的速度。请参阅第10.2.5.1节,“优化INSERT语句”

  • --flush-logs, -F

    Command-Line Format --flush-logs

    在开始备份之前清空MySQL服务器的日志文件。这项选项需要RELOAD权限。如果您同时使用了--all-databases选项,日志将在每个备份的数据库中清空。除非使用--lock-all-tables--source-data--single-transaction选项,在这种情况下,日志只会在所有表格被FLUSH TABLES WITH READ LOCK锁定时清空一次。如果您希望备份和日志清空同时发生,您应该将--flush-logs--lock-all-tables--source-data--single-transaction一起使用。

  • --flush-privileges

    Command-Line Format --flush-privileges

    在导出 mysql 数据库时,添加一个 FLUSH PRIVILEGES 语句到 dump 输出。这一选项应该在 dump 文件包含 mysql 数据库以及任何依赖于 mysql 数据库数据的其他数据库时使用,以确保正确恢复。

    由于 dump 文件包含了一个 FLUSH PRIVILEGES 语句,重新加载文件需要具有执行该语句的权限。

  • --lock-all-tables, -x

    Command-Line Format --lock-all-tables

    锁定所有表,跨越所有数据库。这通过获取一个全局读锁来实现,以保持整个 dump 的持续时间。这个选项自动关闭 --single-transaction--lock-tables

  • --lock-tables, -l

    Command-Line Format --lock-tables

    对于每个被导出的数据库,锁定所有将要导出的表在导出之前。这些表以 READ LOCAL 锁定,以允许对 MyISAM 表进行并发插入。在事务性表(如 InnoDB)上,--single-transaction--lock-tables 更好,因为它不需要锁定表。

    由于 --lock-tables 对于每个数据库单独锁定表,这一选项不能保证 dump 文件中的表在不同数据库之间是逻辑上的一致状态。来自不同数据库的表可能会以完全不同的状态被导出。

    一些选项,如 --opt,自动启用 --lock-tables。如果您想要覆盖这一点,请在选项列表的末尾使用 --skip-lock-tables

  • --no-autocommit

    Command-Line Format --no-autocommit

    将每个导出的表的 INSERT 语句包围在 SET autocommit = 0COMMIT 语句中。

  • --order-by-primary

    Command-Line Format --order-by-primary

    将每个表的行按照其主键或第一个唯一索引排序,这对于将 MyISAM 表导出到 InnoDB 表非常有用,但会显著延长导出操作的时间。

  • --shared-memory-base-name=name

    Command-Line Format --shared-memory-base-name=name
    Platform Specific Windows

    在 Windows 上,用于通过共享内存连接到本地服务器的共享内存名称。默认值为 MYSQL。共享内存名称不区分大小写。

    这个选项只适用于服务器以支持共享内存连接的方式启动时启用了 shared_ memory 系统变量。

  • --single-transaction

    Command-Line Format --single-transaction

    这个选项将事务隔离模式设置为 REPEATABLE READ,并在导出数据之前向服务器发送一个 START TRANSACTION SQL 语句。它对于只包含事务表的数据库(如 InnoDB)非常有用,因为这样可以在不阻塞任何应用程序的情况下导出一致的数据库状态,直到 START TRANSACTION 被发出时。

    在使用 --single-transaction 时,需要拥有 RELOADFLUSH_TABLES 的权限,如果同时启用了 gtid_ mode=ONgtid_purged=ON|AUTO

    使用这个选项时,请注意,只有 InnoDB 表在一致的状态下被导出。例如,使用此选项导出的任何 MyISAMMEMORY 表可能仍然会改变其状态。

    在执行一个--single-transaction备份时,为了确保生成的备份文件(正确的表内容和二进制日志坐标)有效,不应该在同一时间内使用其他连接执行以下语句:ALTER TABLECREATE TABLEDROP TABLERENAME TABLETRUNCATE TABLE。一致的读取不是隔离这些语句,因此在备份要包含的表上执行这些语句可能会导致SELECT语句(由mysqldump执行)无法正确获取表内容或失败。

    --single-transaction选项和--lock-tables选项是互斥的,因为LOCK TABLES会隐式提交任何挂起的事务。

    为了备份大型表,结合使用--quick选项。

  • --opt选项会启用多个设置,它们共同工作以执行快速备份操作。所有这些设置默认都是打开的,因为--opt默认是打开的。因此,你几乎从不需要指定--opt,而是可以通过在命令行上指定相关选项来关闭这些设置,然后再次打开某些设置。或者,你可以使用--skip-opt的形式来关闭所有设置。

  • --compact选项会关闭控制输出中是否包含可选语句和注释的几个设置。同样,你可以在这个选项后面跟随其他选项来重新启用某些设置,或者使用--skip-compact的形式来打开所有设置。

当你选择性地启用或禁用一个组选项时,顺序很重要,因为选项会按先后顺序处理。例如,--disable-keys --lock-tables --skip-opt 将不会产生预期的效果;它与单独使用--skip-opt相同。

为了备份整个数据库:

mysqldump db_name > backup-file.sql

为了将备份文件加载回服务器:

mysql db_name < backup-file.sql

另一种重新加载备份文件的方法:

mysql -e "source /path-to-backup/backup-file.sql" db_name

mysqldump 也非常有用,用于通过从一个 MySQL 服务器复制数据来填充数据库:

mysqldump --opt db_name | mysql --host=remote_host -C db_name

您可以使用单个命令备份多个数据库:

mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql

要备份所有数据库,请使用 --all-databases 选项:

mysqldump --all-databases > all_databases.sql

对于 InnoDB 表格,mysqldump 提供了一种在线备份的方式:

mysqldump --all-databases --source-data --single-transaction > all_databases.sql

这项备份在导出开始时对所有表格获得一个全局读锁(使用 FLUSH TABLES WITH READ LOCK)。一旦获得这个锁,二进制日志的坐标被读取,然后释放锁。如果在导出时有长更新语句正在运行,当 FLUSH 语句发出时,MySQL 服务器可能会被阻塞,直到这些语句完成。之后,导出就不会再锁定读写操作,并且不会干扰表格的读写操作。如果 MySQL 服务器接收到的更新语句短(以执行时间为度量),初始锁定的期限应该不会显著,即使有许多更新操作。

对于点时恢复(也称为 回滚,” 当您需要恢复一个旧备份并重新播放自该备份以来的所有更改),通常很有用的是旋转二进制日志(见 第 7.4.4 节,“The Binary Log”)或至少知道导出的二进制日志坐标:

mysqldump --all-databases --source-data=2 > all_databases.sql

或者:

mysqldump --all-databases --flush-logs --source-data=2 > all_databases.sql

可以同时使用 --source-data 选项和 --single-transaction 选项,这提供了一个在线备份的便捷方式,适用于在使用 InnoDB 存储引擎存储表格之前进行点时恢复。

有关备份方法的更多信息,请参阅 第 9.2 节,“Database Backup Methods”第 9.3 节,“Example Backup and Recovery Strategy”

mysqldump 不会默认备份performance_ schemasys架构。要备份这些架构,请在命令行中明确指定它们,也可以使用--databases选项。对于performance_ schema,还需要使用--skip-lock-tables选项。

mysqldump 不会备份INFORMATION_ SCHEMA架构。

mysqldump 不会备份CREATE TABLESPACE语句。

mysqldump 不会备份NDB集群ndbinfo信息数据库。

mysqldump 包含了创建general_ logslow_query_log表的语句,用于备份mysql数据库。日志表中的内容不会被备份。

如果您在备份视图时遇到权限不足的问题,请查看Section 27.9, “Restrictions on Views”以获取解决方案。