6.5.4 mysqlimport — 数据导入程序
MySQL客户端工具mysqldump执行逻辑备份,生成一组SQL语句,这些语句可以执行以重现原始数据库对象定义和表数据。它用于备份或将一个或多个MySQL数据库转移到另一个SQL服务器。mysqldump命令还可以生成CSV、其他分隔文本或XML格式的输出。
考虑使用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=ON
和 gtid_purged=ON|AUTO
。某些选项可能需要其他权限,如选项描述中所提到的。
要重新加载一个备份文件,您必须具有执行该文件包含的语句所需的权限,例如适当的 CREATE
权限,以创建由这些语句创建的对象。
mysqldump 输出可能包含改变数据库排序规则的 ALTER DATABASE
语句,这些语句用于在导出存储程序时保留它们的字符编码。要重新加载包含这些语句的备份文件,需要对受影响数据库的 ALTER
权限。
使用 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
表,或者您有混合的InnoDB
和MyISAM
表,考虑使用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服务器,可能是在同一台机器上或远程系统。
-
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节,“连接压缩控制”。
-
Command-Line Format --default-auth=plugin
Type 字符串 关于哪个客户端认证插件的提示。请参阅第8.2.17节,“可插拔认证”。
-
Command-Line Format --enable-cleartext-plugin
Type 布尔值 Default Value FALSE
启用
mysql_clear_password
清文本认证插件。请参阅第8.4.1.4节,“客户端可插拔清文本认证”。 -
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
。 -
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”。
-
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
选项。 -
用于连接到服务器的MySQL帐户的多因素认证第一个因素的密码。密码值是可选的。如果不给出,mysqldump 会提示输入一个。如果给出,那么在
--password1=
后面不能有空格。如果没有指定密码选项,默认情况下不会发送密码。在命令行上指定密码应该被认为是不安全的。为了避免在命令行上输入密码,使用选项文件。请参阅第8.1.2.1节,“用户密码安全指南”。
如果要明确指定没有密码,并且mysqldump 不应该提示输入密码,请使用
--skip-password1
选项。--password1
和--password
是同义词,--skip-password1
和--skip-password
也是同义词。 -
MySQL账户用于连接服务器的多因素认证第二因素密码。该选项的语义与
--password1
的语义相似;请参阅该选项的描述以获取详细信息。 -
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
认证插件支持此插件选项。它提供了两个可能的值供客户端用户在运行时设置:SSPI
和GSSAPI
。默认情况下,用于客户端侧插件选项的值使用安全支持提供程序接口(SSPI),它能够从Windows内存缓存中获取凭据。或者,客户端用户可以选择一个模式,该模式通过MIT Kerberos库在Windows上支持通用安全服务应用程序程序接口(GSSAPI)。GSSAPI能够从以前使用kinit命令生成的缓存凭据中获取。
有关更多信息,请参阅Windows客户端在GSSAPI模式下的命令。
-
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节,“连接传输协议”。
-
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-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
设置为ON
或STRICT
将导致客户端在启动时产生一个警告,并以非 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实现仅限客户端。
-
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
权限。 -
Command-Line Format --zstd-compression-level=数字
Type 整数
用于连接到服务器的
zstd
压缩算法的压缩级别。允许的级别从1到22,较大的值表示更高的压缩水平。默认的zstd
压缩级别为3。压缩级别设置对不使用zstd
压缩算法的连接没有影响。有关更多信息,请参阅
第6.2.8节,“连接压缩控制”
。
这些选项用于控制要读取的选项文件。
-
Command-Line Format --defaults-extra-file=文件名
Type 文件名
在全局选项文件之后读取,但在(在Unix上)用户选项文件之前。如果文件不存在或无法访问,会发生错误。如果
文件名
不是绝对路径名,它将相对于当前目录解释。有关此和其他影响选项文件处理的命令行选项的更多信息,请参阅
第6.2.2.3节,“影响选项文件处理的命令行选项”
。 -
Command-Line Format --defaults-file=文件名
Type 文件名
只使用给定的选项文件。如果文件不存在或无法访问,会发生错误。如果
文件名
不是绝对路径名,它将相对于当前目录解释。例外情况:即使有
--defaults-file
,客户端程序仍然读取.mylogin.cnf
。有关此和其他影响选项文件处理的命令行选项的更多信息,请参阅
第6.2.2.3节,“影响选项文件处理的命令行选项”
。 -
Command-Line Format --defaults-group-suffix=字符串
Type 字符串
除了常规的选项组外,还要阅读那些带有常规名称和一个后缀的
str
的选项组。例如,mysqldump 通常会读取[client]
和[mysqldump]
组。如果给出这样的选项--defaults-group-suffix=_other
,mysqldump 也会读取[client_other]
和[mysqldump_other]
组。关于这个和其他影响选项文件处理的命令行选项的更多信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
Command-Line Format --no-defaults
不要读取任何选项文件。如果程序启动失败,因为从选项文件中读取了未知的选项,
--no-defaults
可以用来防止它们被读取。唯一的例外是
.mylogin.cnf
文件总是在所有情况下都被读取,如果它存在。这允许在使用--no-defaults
时安全地指定密码。要创建.mylogin.cnf
,请使用 mysql_config_editor 工具。参阅第 6.6.7 节,“mysql_config_editor — MySQL 配置编辑器”。关于这个和其他选项文件选项的更多信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
Command-Line Format --print-defaults
打印程序名称及其来自选项文件的所有选项。
关于这个和其他选项文件选项的更多信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
mysqldump 的使用场景包括设置整个新 MySQL 实例(包括数据库表),以及用现有数据库和表替换现有实例中的数据。以下选项允许您在恢复备份时指定要清理或创建的内容,通过将各种 DDL 语句编码到备份文件中。
-
Command-Line Format --add-drop-database
在每个
CREATE DATABASE
语句之前写入一个DROP DATABASE
语句。这项选项通常与--all-databases
或--databases
选项一起使用,因为否则不会写入任何CREATE DATABASE
语句,除非指定了其中一种选项。Note在 MySQL 8.4 中,
mysql
架构被认为是一个系统架构,它不能由普通用户删除。如果使用--add-drop-database
选项与--all-databases
或--databases
选项一起使用,并且要导出的架构列表包括mysql
,那么生成的备份文件中包含一个DROP DATABASE `mysql`
语句,这在重新加载备份文件时会导致错误。因此,要使用
--add-drop-database
,请使用--databases
选项,并且在要导出的架构列表中排除mysql
。 -
Command-Line Format --add-drop-table
在每个
CREATE TABLE
语句之前写入一个DROP TABLE
语句。 -
Command-Line Format --add-drop-trigger
在每个
CREATE TRIGGER
语句之前写入一个DROP TRIGGER
语句。 -
Command-Line Format --all-tablespaces
将所有用于一个
NDB
表的SQL语句添加到表格中。这些信息不在mysqldump输出中。这项选项目前仅适用于NDB 集群表。 -
--no-create-db
,-n
Command-Line Format --no-create-db
抑制否则在输出中包含的
CREATE DATABASE
语句,如果给出了--databases
或--all-databases
选项。 -
--no-create-info
,-t
Command-Line Format --no-create-info
不要写入
CREATE TABLE
语句,这些语句创建了每个导出的表。Note这项选项不排除mysqldump输出中的日志文件组或表空间创建语句;然而,您可以使用
--no-tablespaces
选项来实现这一目的。 -
--no-tablespaces
,-y
Command-Line Format --no-tablespaces
这项选项抑制了
CREATE LOGFILE GROUP
和CREATE TABLESPACE
语句在mysqldump输出中。 -
Command-Line Format --replace
以下选项将打印调试信息,将调试信息编码到备份文件中,或者让备份操作继续进行,即使存在潜在问题。
-
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 发行版是 不 使用此选项构建的。 -
Command-Line Format --debug-check
Type 布尔值 Default Value FALSE
在程序退出时打印一些调试信息。
这项选项仅在 MySQL 使用
WITH_DEBUG
构建时可用。Oracle 提供的 MySQL 发行版是 不 使用此选项构建的。 -
Command-Line Format --debug-info
Type 布尔值 Default Value FALSE
在程序退出时打印调试信息和内存和 CPU 使用情况统计。
这项选项仅在 MySQL 使用
WITH_DEBUG
构建时可用。Oracle 提供的 MySQL 发行版是 不 使用此选项构建的。 -
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 继续执行,即使遇到一个因为定义中引用了已被删除的表而变得无效的视图。没有
--force
,mysqldump 会因为错误消息而退出。有--force
,mysqldump 打印错误消息,但它也将 SQL 评论写入备份输出中,包含视图定义,并继续执行。如果同时给出
--ignore-error
选项来忽略特定错误,--force
优先级更高。 -
Command-Line Format --log-error=file_name
Type 文件名 将警告和错误追加到命名的文件中。默认情况下,不进行日志记录。
-
Command-Line Format --skip-comments
查看
--comments
选项的描述。 -
--verbose
,-v
Command-Line Format --verbose
详细模式。打印更多关于程序做什么的信息。
以下选项显示了关于 mysqldump 命令本身的信息。
以下选项改变了mysqldump命令如何表示字符数据的国家语言设置。
-
Command-Line Format --character-sets-dir=dir_name
Type 目录名称 字符集安装的目录。请参阅第12.15节,“字符集配置”。
-
--default-character-set=
charset_name
Command-Line Format --default-character-set=charset_name
Type 字符串 Default Value utf8
使用
charset_name
作为默认字符集。请参阅第12.15节,“字符集配置”。如果没有指定字符集,mysqldump使用utf8mb4
。 -
--no-set-names
,-N
Command-Line Format --no-set-names
Deprecated 是的 禁用
--set-charset
设置,相当于指定--skip-set-charset
。 -
Command-Line Format --set-charset
Disabled by skip-set-charset
将
SET NAMES
写入输出。这一选项默认启用。要抑制default_character_set
SET NAMES
语句,请使用--skip-set-charset
。
复制 Options
mysqldump命令经常用于创建一个空实例,或者包含数据的实例,在复制配置中在源服务器和副本服务器之间进行数据迁移。以下选项适用于在复制源服务器和副本服务器上导出和还原数据。
-
Command-Line Format --apply-replica-statements
Type 布尔值 Default Value FALSE
对于使用
--dump-replica
选项生成的副本备份,这个选项在输出中添加一个STOP REPLICA
语句,位于二进制日志坐标的语句之前,并在输出结束时添加一个START REPLICA
语句。 -
Command-Line Format --apply-slave-statements
Deprecated 是的 Type 布尔值 Default Value FALSE
这是
--apply-replica-statements
的过时别名。 -
Command-Line Format --delete-source-logs
在复制源服务器上,删除二进制日志文件,通过向服务器发送
PURGE BINARY LOGS
语句来完成备份操作。这项选项需要RELOAD
权限以及执行该语句所需的其他权限。此外,这个选项自动启用--source-data
。 -
Command-Line Format --delete-master-logs
Deprecated 是的 这是
--delete-source-logs
的过时别名。 -
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_File
和Exec_Master_Log_Pos
的值,并将它们用于SOURCE_LOG_FILE
和SOURCE_LOG_POS
。这些是从副本开始复制的源服务器的坐标。Note从中继日志执行的事务序列不一致可能导致错误地使用位置。有关更多信息,请参阅第19.5.1.34节,“复制和事务不一致性”。
--dump-replica
会使用源的坐标,而不是被导出的服务器的坐标,这与--source-data
选项相同。此外,指定此选项将覆盖--source-data
选项。Warning在应用备份到使用
gtid_ mode=ON
和SOURCE_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
一起使用。 -
Command-Line Format --dump-slave[=value]
Deprecated 是的 Type 数值型 Default Value 1
Valid Values 1
2
这是一项过时的别名,用于
--dump-replica
。 -
Command-Line Format --include-source-host-port
Type 布尔值 Default Value FALSE
将
SOURCE_HOST
和SOURCE_PORT
选项添加到复制源的主机名和 TCP/IP 端口号码,用于在使用--dump-replica
选项时生成的复制副本中的CHANGE REPLICATION SOURCE TO
语句。 -
Command-Line Format --include-master-host-port
Deprecated 是的 Type 布尔值 Default Value FALSE
这是一项过时的别名,用于
--include-source-host-port
。 -
Command-Line Format --master-data[=value]
Deprecated 是的 Type 数值型 Default Value 1
Valid Values 1
2
这是一项过时的别名,用于
--source-data
。 -
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
的输出。 -
-
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-数据
。 -
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
集的使用,或者通过自动化进行控制。例如,您可能希望这样做,如果您正在将数据迁移到另一个服务器,该服务器已经有不同的活动数据库。
-
以下选项指定如何在备份文件中表示整个备份文件或某些类型的数据,以及是否写入备份文件中的可选信息。
-
Command-Line Format --compact
生成更紧凑的输出。这项选项启用了
--skip-add-drop-table
、--skip-add-locks
、--skip-comments
、--skip-disable-keys
和--skip-set-charset
选项。 -
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”。 -
Command-Line Format --complete-insert
使用完整的
INSERT
语句,这些语句包括列名。 -
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”。 -
Command-Line Format --hex-blob
使用十六进制表示法导出二进制列(例如,
'abc'
变为0x616263
)。影响的数据类型包括BINARY
、VARBINARY
、BLOB
类型、BIT
、所有空间数据类型以及其他非二进制数据类型,尤其是当与binary
字符集一起使用时。--hex-blob
选项在使用--tab
时被忽略。 -
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
.sqlCREATE TABLE
语句,以及服务器写入一个以
为扩展名的文件,该文件包含表的数据。选项值是要写入文件的目录。tbl_name
.txtNote这项选项应仅在mysqldump运行在与mysqld服务器相同的机器上时使用。因为服务器会在您指定的目录中创建*.txt文件,这个目录必须对服务器可写,并且您用于MySQL账户必须具有
FILE
权限。因为mysqldump会在同一目录中创建*.sql文件,它必须对您的系统登录账户可写。默认情况下,
.txt
数据文件使用制表符字符分隔列值,并且每行以换行符结束。格式可以通过--fields-xxx和--lines-terminated-by
选项来指定。列值将被指定由
--default-character-set
选项指定的字符集转换。 -
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.proc
和mysql.event
表,含有存储程序和事件定义。从 MySQL 8.4 开始,mysql.event
和mysql.proc
表不再使用。对应对象的定义现在存储在数据字典表中,但那些表不会被导出。要将存储的程序和事件包括在使用--all-databases
选项生成的备份中,必须显式地使用--routines
和--events
选项。 -
--databases
,-B
Command-Line Format --databases
导出多个数据库。通常,mysqldump 会将命令行中的第一个参数解释为数据库名称,后面的参数解释为表名称。使用这个选项,它会将所有的参数都解释为数据库名称。
CREATE DATABASE
和USE
语句会在每个新数据库之前包含在输出中。这个选项可以用来导出
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 字符串 不要导出给定的表,这个表必须使用数据库和表的名称指定。要忽略多个表,可以重复使用这个选项。这也可以用来忽略视图。
-
Command-Line Format --ignore-views
Type 布尔值 Default Value FALSE
在备份文件中跳过视图表。
-
Command-Line Format --init-command=str
Type 字符串 连接到MySQL服务器后执行的单个SQL语句。定义重置了由其或
init-command-add
定义的现有语句。 -
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 PROCEDURE
和CREATE 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”。
-
Command-Line Format --tables
覆盖
--databases
或-B
选项。mysqldump将所有跟随该选项的名称参数视为表名。 -
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引擎的数据库或混合用途数据库。
性能还受到事务选项的影响,主要是对备份操作。
-
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
语句。这可以加快加载备份文件的速度,因为索引在所有行都插入后才被创建。这个选项对MyISAM表的非唯一索引有效。tbl_name
ENABLE KEYS */; -
Command-Line Format --extended-insert
Disabled by skip-extended-insert
使用多行语法的INSERT语句,其中包括几个
VALUES
列表。这可以减小备份文件的大小,并在重新加载时加快插入操作。 -
Command-Line Format --insert-ignore
将INSERT IGNORE语句写入,而不是INSERT语句。
-
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的查询。 -
Command-Line Format --net-buffer-length=value
Type 数字 Default Value 16384
客户端/服务器通信的初始缓冲区大小。当创建多行
INSERT
语句(如同使用--extended-insert
或--opt
选项)时,mysqldump 创建的行最长可达--net-buffer-length
字节。若您增加这个变量,请确保MySQL服务器net_buffer_length
系统变量的值至少为此大小。 -
Command-Line Format --network-timeout[={0|1}]
Type 布尔值 Default Value TRUE
启用大表的导出,请将
--max-allowed-packet
设置为其最大值,并且网络读取和写入超时设置为较大值。这项选项默认启用。要禁用它,请使用--skip-network-timeout
。 -
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从服务器中按行逐一检索表格的数据,而不是一次性检索所有数据并在内存中缓冲后再写出。这样可以减少内存使用量,特别是当处理大型表格时。
-
Command-Line Format --skip-opt
请参阅
--opt
选项的描述。
以下几种选项之间存在一个权衡:它们可以在备份操作中提高性能,但可能会牺牲数据的一致性和完整性。
-
Command-Line Format --add-locks
在每个表格的备份前后分别添加
LOCK TABLES
和UNLOCK 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
一起使用。 -
Command-Line Format --flush-privileges
在导出
mysql
数据库时,添加一个FLUSH PRIVILEGES
语句到 dump 输出。这一选项应该在 dump 文件包含mysql
数据库以及任何依赖于mysql
数据库数据的其他数据库时使用,以确保正确恢复。由于 dump 文件包含了一个
FLUSH PRIVILEGES
语句,重新加载文件需要具有执行该语句的权限。 -
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
。 -
Command-Line Format --no-autocommit
-
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
系统变量。 -
Command-Line Format --single-transaction
这个选项将事务隔离模式设置为
REPEATABLE READ
,并在导出数据之前向服务器发送一个START TRANSACTION
SQL 语句。它对于只包含事务表的数据库(如InnoDB
)非常有用,因为这样可以在不阻塞任何应用程序的情况下导出一致的数据库状态,直到START TRANSACTION
被发出时。在使用
--single-transaction
时,需要拥有RELOAD
或FLUSH_TABLES
的权限,如果同时启用了gtid_ mode=ON
和gtid_purged=ON|AUTO
。使用这个选项时,请注意,只有
InnoDB
表在一致的状态下被导出。例如,使用此选项导出的任何MyISAM
或MEMORY
表可能仍然会改变其状态。在执行一个
--single-transaction
备份时,为了确保生成的备份文件(正确的表内容和二进制日志坐标)有效,不应该在同一时间内使用其他连接执行以下语句:ALTER TABLE
,CREATE TABLE
,DROP TABLE
,RENAME TABLE
,TRUNCATE 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”。
-
要选择
--opt
的效果,但排除某些特性,请使用--skip
选项来为每个特性禁用。要禁用扩展插入和内存缓冲,使用--opt
--skip-extended-insert
--skip-quick
。(实际上,--skip-extended-insert
--skip-quick
就足够了,因为--opt
默认情况下是开启的。) -
要取消所有特性的反向操作,除了禁用索引和表锁定外,请使用
--skip-opt
--disable-keys
--lock-tables
。
mysqldump 不会默认备份performance_ schema或sys架构。要备份这些架构,请在命令行中明确指定它们,也可以使用--databases
选项。对于performance_ schema,还需要使用--skip-lock-tables
选项。
mysqldump 不会备份INFORMATION_ SCHEMA架构。
mysqldump 不会备份CREATE TABLESPACE
语句。
mysqldump 不会备份NDB集群ndbinfo
信息数据库。
mysqldump 包含了创建general_ log和slow_query_log表的语句,用于备份mysql数据库。日志表中的内容不会被备份。
如果您在备份视图时遇到权限不足的问题,请查看Section 27.9, “Restrictions on Views”
以获取解决方案。