客户端实用程序 mysqldump 执行逻辑备份,生成一组 SQL 语句,可以执行以恢复原始数据库对象定义和表数据。它将一个或多个 MySQL 数据库转储以备用或传输到另一个 SQL 服务器。mysqldump 命令也可以生成 CSV、其他分隔文本或 XML 格式的输出。
考虑使用 MySQL Shell 转储实用程序,它提供了并行转储多线程、文件压缩和进度信息显示,以及云功能,如 Oracle Cloud Infrastructure Object Storage 流式传输和 MySQL HeatWave 服务兼容性检查和修改。转储可以轻松导入到 MySQL 服务器实例或 MySQL HeatWave 服务 DB 系统中,使用 MySQL Shell 载入转储实用程序。MySQL Shell 的安装说明可以在 这里 找到。
mysqldump 至少需要转储表的 SELECT
权限,转储视图的 SHOW VIEW
权限,转储触发器的 TRIGGER
权限,LOCK TABLES
权限如果不使用 --single-transaction
选项,PROCESS
权限如果不使用 --no-tablespaces
选项,RELOAD 或 FLUSH_TABLES 权限与 --single-transaction
如果同时使用 gtid_mode=ON 和 --set-gtid=purged=ON|AUTO。
要重新加载转储文件,您必须拥有执行该文件所包含的语句所需的权限,例如创建对象的适当 CREATE
权限。
mysqldump 输出可以包括 ALTER DATABASE
语句,以更改数据库排序规则。这些语句可能用于dump存储程序以保留字符编码。要重新加载包含这些语句的dump文件,需要对受影响的数据库具有 ALTER
权限。
使用 PowerShell 在 Windows 上创建的dump文件具有 UTF-16 编码:
mysqldump [options] > dump.sql
然而,UTF-16 不是允许的连接字符集(见 不允许的客户端字符集),因此dump文件不能正确加载。要解决这个问题,可以使用 --result-file
选项,该选项以 ASCII 格式创建输出:
mysqldump [options] --result-file=dump.sql
不建议在 GTIDs 启用时加载dump文件(gtid_mode=ON
),如果您的dump文件包括系统表。mysqldump 为系统表发出 DML 指令,这些指令使用非事务性 MyISAM 存储引擎,而这种组合在 GTIDs 启用时不允许。
性能和可扩展性考虑
mysqldump
的优点包括查看或编辑输出的便捷性和灵活性,可以克隆数据库以进行开发和 DBA 工作,或者生成现有数据库的轻微变体以进行测试。它不是快速或可扩展的解决方案,以备份大量数据。在大型数据量的情况下,即使备份步骤需要合理的时间,恢复数据也可能非常慢,因为重放 SQL 语句涉及到磁盘 I/O 以进行插入、索引创建等操作。
对于大规模备份和恢复,物理备份更合适,以便快速恢复数据。
如果您的表格主要是 InnoDB
表格,或者您有一个混合的 InnoDB
和 MyISAM
表格,考虑使用 mysqlbackup,它是 MySQL Enterprise 的一部分。该工具提供了高性能的 InnoDB
备份,具有最小的中断;它也可以备份 MyISAM
和其他存储引擎的表格;它还提供了一些便捷的选项来适应不同的备份场景。见 第 32.1 节,“MySQL Enterprise 备份概述”。
mysqldump 可以逐行检索和转储表格内容,或者它可以检索整个表格内容并将其缓存在内存中,然后转储。缓存在内存中可能是一个问题,如果您正在转储大型表格。要逐行转储表格,使用 --quick
选项(或 --opt
,它启用了 --quick
)。 --opt
选项(因此 --quick
)是默认启用的,因此要启用内存缓冲,使用 --skip-quick
。
如果您使用的是 mysqldump 的最新版本来生成要重新加载到非常旧的 MySQL 服务器的dump文件,使用 --skip-opt
选项,而不是 --opt
或 --extended-insert
选项。
有关 mysqldump 的更多信息,请见 第 9.4 节,“使用 mysqldump 进行备份”。
调用语法
这里有三种方式使用 mysqldump ——要么dump一个或多个表,要么dump一个或多个完整的数据库,要么dump整个MySQL服务器,如下所示:
mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases
要dump整个数据库,不要在 db_name
后面指定任何表,或者使用 --databases
或 --all-databases
选项。
要查看您版本的 mysqldump 支持的选项列表,请发出命令 mysqldump --help
。
选项语法 - 字母顺序摘要
mysqldump 支持以下选项,可以在命令行或在 [mysqldump]
和 [client]
组的选项文件中指定。关于 MySQL 程序使用的选项文件的信息,请参阅 第 6.2.2.2 节,“使用选项文件”。
表 6.14 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 | 将每个表dump包围在 LOCK TABLES 和 UNLOCK TABLES 语句中 |
--all-databases | dump所有数据库中的所有表 |
--allow-keywords | 允许创建关键字作为列名 |
--apply-replica-statements | 在输出的末尾包括 STOP REPLICA 语句和 CHANGE REPLICATION SOURCE TO 语句 |
--apply-slave-statements | 在输出的末尾包括 STOP SLAVE 语句和 CHANGE MASTER 语句 |
--bind-address | 使用指定的网络接口连接到 MySQL 服务器 |
--character-sets-dir | 字符集安装的目录 |
--column-statistics | 写入 ANALYZE TABLE 语句以生成统计直方图 |
--comments | 添加注释到dump文件 |
--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服务器所在的主机 |
--ignore-error | 忽略指定的错误 |
--ignore-table | 不转储指定的表 |
--ignore-views | 跳过转储表视图 |
--include-master-host-port | 在使用--dump-slave时,在CHANGE MASTER语句中包括MASTER_HOST/MASTER_PORT选项 |
--include-source-host-port | 在使用--dump-replica时,在CHANGE REPLICATION SOURCE TO语句中包括SOURCE_HOST和SOURCE_PORT选项 |
--init-command | 执行连接或重新连接到 MySQL 服务器后的单个 SQL 语句;重置现有的定义命令 |
--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) |
--plugin-authentication-kerberos-client-mode | 通过 MIT Kerberos 库在 Windows 上允许 GSSAPI 插件身份验证 |
--plugin-dir | 插件安装的目录 |
--port | TCP/IP 端口号用于连接 |
--打印默认值 | 打印默认选项 |
--协议 | 要使用的传输协议 |
--快速 | 从服务器逐行检索表的行 |
--引号名称 | 在反引号字符中引号标识符 |
--replace | 写入REPLACE语句,而不是INSERT语句 |
--结果文件 | 将输出直接写入指定文件 |
--例程 | 从转储数据库中转储存储的例程(过程和函数) |
--服务器公钥路径 | 包含RSA公钥的文件路径 |
--设置字符集 | 将SET NAMES default_character_set添加到输出 |
--设置GTID已清除 | 是否将SET @@GLOBAL.GTID_PURGED添加到输出 |
--共享内存基名 | 共享内存名称(仅限Windows) |
--跳过次要引擎 | 从CREATE TABLE语句中排除SECONDARY ENGINE子句 |
--单个事务 | 在从服务器转储数据之前发出BEGIN SQL语句 |
--跳过添加DROP TABLE | 不添加DROP TABLE语句在每个CREATE TABLE语句之前 |
--跳过添加锁 | 不添加锁 |
--跳过注释 | 不添加注释到转储文件 |
--跳过紧凑 | 不生成紧凑输出 |
--跳过禁用键 | 不禁用键 |
--跳过扩展插入 | 关闭扩展插入 |
--跳过生成的不可见主键 | 不包括生成的不可见主键在转储文件中 |
--跳过优化 | 关闭--opt选项 |
--跳过快速 | 不从服务器逐行检索表的行 |
--跳过引号名称 | 不引号标识符 |
--跳过设置字符集 | 不写入SET NAMES语句 |
--跳过触发器 | 不转储触发器 |
--跳过时区UTC | 关闭时区UTC |
--套接字 | Unix套接字文件或Windows命名管道 |
--源数据 | 将二进制日志文件名和位置写入输出 |
--ssl-ca | 包含受信任的SSL证书颁发机构的文件 |
--ssl-capath | 包含受信任的SSL证书颁发机构证书文件的目录 |
--ssl-cert | 包含X.509证书的文件 |
--ssl-cipher | 连接加密的可接受密码 |
--ssl-crl | 包含证书吊销列表的文件 |
--ssl-crlpath | 包含证书吊销列表文件的目录 |
--ssl-fips模式 | 是否在客户端启用 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-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择用于连接到 MySQL 服务器的接口。
-
--compress
,-C
Command-Line Format --compress[={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=插件
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=
被指定并指定了有效的公钥文件,它将优先于文件名
--get-server-public-key
。关于
caching_sha2_password
插件的信息,见 第 8.4.1.2 节,“caching SHA-2 可插拔身份验证”。 -
--host=
,主机名
-h
主机名
Command-Line Format --host
从指定的 MySQL 服务器主机上转储数据。默认主机是
localhost
。 -
Command-Line Format --login-path=名称
Type 字符串 从命名的登录路径文件中读取选项。
.mylogin.cnf
登录路径文件。一个 “登录路径” 是一个选项组,包含指定要连接的 MySQL 服务器和要身份验证的账户的选项。要创建或修改登录路径文件,请使用 mysql_config_editor 实用程序。见 第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。关于这个和其他选项文件选项的更多信息,见 第 6.2.2.3 节,“命令行选项影响选项文件处理”。
-
Command-Line Format --no-login-paths
跳过从登录路径文件中读取选项。
见
--login-path
有关信息。关于这个和其他选项文件选项的更多信息,见 第 6.2.2.3 节,“命令行选项影响选项文件处理”。
-
--password[=
,密码
]-p[
密码
]Command-Line Format --password[=密码]
Type 字符串 MySQL 帐户用于连接到服务器的密码。密码值是可选的。如果不给出,mysqldump 将提示输入。如果给出,必须在
--password=
或-p
和其后的密码之间没有空格。如果没有指定密码选项,默认情况下不发送密码。在命令行上指定密码应该被认为是不安全的。要避免在命令行上给出密码,请使用选项文件。见 第 8.1.2.1 节,“最终用户密码安全指南”。
要明确指定没有密码并且 mysqldump 不应该提示输入,请使用
--skip-password
选项。 -
MySQL 帐户用于连接到服务器的多因素身份验证因子 1 的密码。密码值是可选的。如果不给出,mysqldump 将提示输入。如果给出,必须在
--password1=
和其后的密码之间没有空格。如果没有指定密码选项,默认情况下不发送密码。在命令行上指定密码应该被认为是不安全的。要避免在命令行上给出密码,请使用选项文件。见 第 8.1.2.1 节,“最终用户密码安全指南”。
要明确指定没有密码并且 mysqldump 不应该提示输入,请使用
--skip-password1
选项。--password1
和--password
是同义的,如同--skip-password1
和--skip-password
。 -
MySQL 帐户用于连接到服务器的多因素身份验证因子 2 的密码。该选项的语义与
--password1
的语义相似;见该选项的描述以获取详细信息。 -
MySQL 帐户用于连接到服务器的多因素身份验证因子 3 的密码。该选项的语义与
--password1
的语义相似;见该选项的描述以获取详细信息。 -
--pipe
,-W
Command-Line Format --pipe
Type String 在 Windows 上,使用命名管道连接到服务器。该选项仅适用于服务器启用了
named_pipe
系统变量以支持命名管道连接。此外,进行连接的用户必须是 Windows 组named_pipe_full_access_group
的成员。 -
--plugin-authentication-kerberos-client-mode=
value
Command-Line Format --plugin-authentication-kerberos-client-mode
Type String Default Value SSPI
Valid Values GSSAPI
在 Windows 上,该
authentication_kerberos_client
认证插件支持该插件选项。它提供了两个可能的值,客户端用户可以在运行时设置:SSPI
和GSSAPI
。客户端插件选项的默认值使用 Security Support Provider Interface (SSPI),该接口能够从 Windows 内存缓存中获取凭据。或者,客户端用户可以选择支持 Generic Security Service Application Program Interface (GSSAPI) 的模式,通过 Windows 上的 MIT Kerberos 库。GSSAPI 能够获取以前使用 kinit 命令生成的缓存凭据。
有关更多信息,请参阅 Windows 客户端的 GSSAPI 模式命令。
-
Command-Line Format --plugin-dir=dir_name
Type 目录名称 要查找插件的目录。如果使用
--default-auth
选项指定认证插件,但 mysqldump 未找到它。请参阅 第 8.2.17 节,“可插拔认证”。 -
--port=
,port_num
-P
port_num
Command-Line Format --port=port_num
Type 数字 Default Value 3306
对于 TCP/IP 连接,使用的端口号。
-
--protocol={TCP|SOCKET|PIPE|MEMORY}
Command-Line Format --protocol=type
Type 字符串 Default Value [见文本]
Valid Values TCP
SOCKET
PIPE
MEMORY
用于连接到服务器的传输协议。当其他连接参数通常导致使用其他协议时,该选项非常有用。有关允许值的详细信息,请参阅 第 6.2.7 节,“连接传输协议”。
-
--server-public-key-path=
file_name
Command-Line Format --server-public-key-path=file_name
Type 文件名 包含服务器所需的公钥文件的路径名,用于 RSA 密钥对基于的密码交换。该选项适用于使用
sha256_password
或caching_sha2_password
认证插件的客户端。如果客户端使用安全连接连接到服务器,该选项将被忽略。如果
--server-public-key-path=
指定了有效的公钥文件,它将优先于file_name
--get-server-public-key
。对于
sha256_password
,该选项仅在 MySQL 使用 OpenSSL 构建时适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅 第 8.4.1.3 节,“SHA-256 可插拔认证” 和 第 8.4.1.2 节,“caching SHA-2 可插拔认证”。 -
--socket=
,path
-S
path
Command-Line Format --socket={file_name|pipe_name}
Type 字符串 对于连接到
localhost
的连接,使用的 Unix 套接字文件名,或者在 Windows 上,命名管道的名称。在 Windows 上,这个选项仅在服务器以
named_pipe
系统变量启用以支持命名管道连接的情况下生效。此外,进行连接的用户必须是 Windows 组named_pipe_full_access_group
系统变量指定的成员。 -
以
--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-fips-mode
选项不同于其他--ssl-
选项,因为它不是用于建立加密连接,而是影响哪些加密操作被允许。请参阅 第 8.8 节,“FIPS 支持”。xxx
这些
--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_OPT_TLS_SNI_SERVERNAME
选项的mysql_options()
。服务器名称不区分大小写。要显示客户端当前会话中指定的服务器名称(如果有),请检查Tls_sni_server_name
状态变量。服务器名称指示(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=
,用户名
-u
用户名
Command-Line Format --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 文件名 在全局选项文件之后但在用户选项文件之前读取该选项文件。如果文件不存在或不可访问,将发生错误。如果
文件名
不是绝对路径名,则相对于当前目录进行解释。有关更多信息,请参阅第6.2.2.3节,“命令行选项影响选项文件处理”。
-
Command-Line Format --defaults-file=文件名
Type 文件名 仅使用给定的选项文件。如果文件不存在或不可访问,将发生错误。如果
文件名
不是绝对路径名,则相对于当前目录进行解释。例外:即使使用
--defaults-file
,客户端程序也将读取.mylogin.cnf
。有关更多信息,请参阅第6.2.2.3节,“命令行选项影响选项文件处理”。
-
Command-Line Format --defaults-group-suffix=str
Type 字符串 不仅读取通常的选项组,还读取具有通常名称和
str
后缀的组。例如,mysqldump通常读取[client]
和[mysqldump]
组。如果给出这个选项作为--defaults-group-suffix=_other
,mysqldump还将读取[client_other]
和[mysqldump_other]
组。有关更多信息,请参阅第6.2.2.3节,“命令行选项影响选项文件处理”。
-
Command-Line Format --不读取默认值
不要读取任何选项文件。如果程序启动失败是由于从选项文件中读取未知选项,
--不读取默认值
可以用于防止它们被读取。唯一的例外是,如果存在,
.mylogin.cnf
文件总是被读取。这允许在命令行上以更安全的方式指定密码,即使使用--不读取默认值
。要创建.mylogin.cnf
,使用 mysql_config_editor 实用程序。见 第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参见 第 6.2.2.3 节,“命令行选项影响选项文件处理”。
-
Command-Line Format --打印默认值
打印程序名称和从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参见 第 6.2.2.3 节,“命令行选项影响选项文件处理”。
DDL 选项
使用场景包括设置整个新的 MySQL 实例(包括数据库表),并将现有实例中的数据替换为现有的数据库和表。以下选项允许您指定在还原转储文件时要破坏和设置的内容,通过在转储文件中编码各种 DDL 语句。
-
Command-Line Format --添加删除数据库
在每个
CREATE DATABASE
语句之前写入一个DROP DATABASE
语句。该选项通常与--所有数据库
或--数据库
选项一起使用,因为没有CREATE DATABASE
语句被写入,除非指定了其中一个选项。 -
Command-Line Format --添加删除表
在每个
CREATE TABLE
语句之前写入一个DROP TABLE
语句。 -
Command-Line Format --添加删除触发器
编写一个
DROP TRIGGER
语句在每个CREATE TRIGGER
语句之前。 -
Command-Line Format --all-tablespaces
将所有 SQL 语句添加到表转储中,以创建任何由
NDB
表所使用的表空间。这信息不包括在 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 将打印错误消息,但也将视图定义写入转储输出并继续执行。如果也给出了
--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
。
复制选项
mysqldump 命令经常用于在复制配置中创建空实例或包含数据的实例。以下选项适用于在复制源服务器和副本服务器上转储和恢复数据。
-
Command-Line Format --apply-replica-statements
Type 布尔值 Default Value FALSE
对于使用
--dump-replica
选项生成的副本转储,添加一个STOP REPLICA
语句在二进制日志坐标语句之前,并在输出的末尾添加一个START REPLICA
语句。 -
Command-Line Format --应用从属语句
Deprecated 是 Type 布尔值 Default Value FALSE
这是一个 deprecated 别名为
--应用副本语句
。 -
Command-Line Format --删除源日志
在复制源服务器上,删除二进制日志通过向服务器发送
PURGE BINARY LOGS
语句来删除二进制日志,执行转储操作后。该选项需要RELOAD
权限以及执行该语句所需的权限。该选项自动启用--源数据
。 -
Command-Line Format --删除主日志
Deprecated 是 这是一个 deprecated 别名为
--删除源日志
。 -
Command-Line Format --转储副本[=值]
Type 数字 Default Value 1
Valid Values 1
2
该选项类似于
--源数据
,except that it's used to dump a 副本服务器以生成一个转储文件,该文件可以用于设置另一个服务器作为副本,该副本具有与被转储服务器相同的源。该选项会导致转储输出包括一个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 节,“复制和交易不一致” 了解更多信息。
--转储副本
使用源坐标,而不是被转储服务器的坐标,如--源数据
所做的那样。此外,指定该选项将覆盖--源数据
选项。Warning--转储副本
不应在要应用转储的服务器使用gtid_mode=ON
和SOURCE_AUTO_POSITION=1
时使用。该选项值的处理方式与
--源数据
相同。设置无值或 1 将导致CHANGE REPLICATION SOURCE TO
语句被写入转储中。设置 2 将导致语句被写入,但被 SQL 注释所包围。它与--源数据
在启用或禁用其他选项和锁定处理方面具有相同的效果。--转储副本
导致 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
选项添加到使用--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
:将副本 SQL 语句使用废弃的术语,如 “slave” 和 “master”,写入输出中,而不是使用 “replica” 和 “source”,如 MySQL 8.0.23 之前的版本。此选项还会对
SHOW CREATE EVENT
的输出产生影响。 -
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的输出。
从 MySQL 8.2.0 版本添加。
-
-
Command-Line Format --source-data[=值]
Type 数字 Default Value 1
Valid Values 1
2
用于将复制源服务器转储到生成一个转储文件,以便在另一个服务器上设置为源服务器的副本。该选项会导致转储输出包括一个
CHANGE REPLICATION SOURCE TO
语句,该语句指示了被转储服务器的二进制日志坐标(文件名和位置),这些坐标将是副本服务器从中开始复制的坐标。如果选项值为 2,则
CHANGE REPLICATION SOURCE TO
语句将作为 SQL 注释写入,从而没有实际效果。当选项值为 1 时,该语句将被写入并生效。如果没有指定选项值,默认值为 1。--source-data
将发送一个SHOW BINARY LOG STATUS
语句到服务器,以获取信息,因此需要执行该语句的权限。此选项还需要RELOAD
权限,并且二进制日志必须启用。--source-data
自动关闭--lock-tables
。它们还打开--lock-all-tables
--single-transaction
也被指定,在这种情况下,仅在转储开始时获取全局读锁(见--single-transaction
的描述)。在所有情况下,日志操作都发生在转储的确切时刻。也可以通过转储现有的源服务器副本来设置副本,使用
--dump-replica
选项,该选项将覆盖--source-data
,使其被忽略。 -
Command-Line Format --set-gtid-purged=值
Type 枚举 Default Value AUTO
Valid Values OFF
ON
AUTO
此选项适用于使用基于GTID的复制的服务器 (
gtid_mode=ON
)。它控制在转储输出中包括一个SET @@GLOBAL.gtid_purged
语句,该语句在服务器上重新加载转储文件时更新gtid_purged
的值,以添加源服务器的gtid_executed
系统变量中的GTID集。gtid_purged
持有服务器上应用的所有事务的GTID,但这些事务不在服务器的任何二进制日志文件中。mysqldump 因此添加了源服务器上执行的事务的GTID,以便目标服务器记录这些事务为已应用,尽管它们不在其二进制日志中。--set-gtid-purged
选项还控制了一个SET @@SESSION.sql_log_bin=0
语句的包括,该语句在重新加载转储文件时禁用二进制日志记录,以防止新的GTID被生成并分配给转储文件中的事务。如果您不设置
--set-gtid-purged
选项,默认情况下,如果服务器启用了GTID,并且gtid_executed
系统变量的全局值不为空,则将在转储输出中包括一个SET @@GLOBAL.gtid_purged
语句。还将包括一个SET @@SESSION.sql_log_bin=0
语句,如果服务器启用了GTID。您可以将
gtid_purged
的值替换为指定的GTID集,或者在语句中添加一个加号 (+) 以将指定的GTID集追加到gtid_purged
的值中。mysqldump 记录的SET @@GLOBAL.gtid_purged
语句包括一个版本特定的注释,以便MySQL将GTID集从转储文件添加到现有的gtid_purged
值中。需要注意的是,mysqldump 为
SET @@GLOBAL.gtid_purged
语句包括的值包括服务器上gtid_executed
集中的所有事务的GTID,即使这些事务更改了数据库的某些部分,或者其他数据库在服务器上没有包括在部分转储中。这可能意味着,在目标服务器上重新加载转储文件后,GTID集将包含不相关的GTID,这些GTID不属于目标服务器上的任何数据。如果您不重新加载其他转储文件到目标服务器上,这些额外的GTID不会对服务器的未来操作造成任何问题,但它们使得在复制拓扑结构中比较或协调GTID集变得更加困难。如果您重新加载了其他转储文件到目标服务器上,其中包含相同的GTID(例如,来自同一源服务器的其他部分转储),那么任何SET @@GLOBAL.gtid_purged
语句在第二个转储文件中将失败。在这种情况下,您可以手动删除语句,然后重新加载转储文件,或者输出转储文件时不包括语句。如果
SET @@GLOBAL.gtid_purged
语句在目标服务器上不产生所需的结果,您可以从输出中排除语句,或者将其注释掉,以便在重新加载转储文件时不自动执行。您也可以包括语句,但手动编辑转储文件以达到所需的结果。以下是
--set-gtid-purged
选项的可能值:-
AUTO
-
默认值。如果服务器启用了GTID,并且
gtid_executed
不为空,则SET @@GLOBAL.gtid_purged
将被添加到输出中,包含gtid_executed
中的GTID集。如果服务器启用了GTID,则SET @@SESSION.sql_log_bin=0
将被添加到输出中。如果服务器没有启用GTID,则语句将不会被添加到输出中。 -
OFF
-
SET @@GLOBAL.gtid_purged
不会添加到输出中,并且SET @@SESSION.sql_log_bin=0
不会添加到输出中。对于不使用 GTIDs 的服务器,使用此选项或AUTO
。仅当您确定目标服务器上的 GTID 集合已经存在于gtid_purged
中且不应更改时,或者您计划手动添加缺少的 GTIDs 时,才使用此选项。 -
ON
-
如果备份服务器上启用了 GTIDs,
SET @@GLOBAL.gtid_purged
将添加到输出中(除非gtid_executed
为空),并且SET @@SESSION.sql_log_bin=0
将添加到输出中。如果您设置了此选项但服务器上未启用 GTIDs,将发生错误。对于启用 GTIDs 的服务器,使用此选项或AUTO
,除非您确定目标服务器上的 GTIDs 在gtid_executed
中不需要。 -
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 节,“服务器 SQL 模式”。 -
Command-Line Format --complete-insert
使用完整的
INSERT
语句,包括列名。 -
Command-Line Format --create-options
包括所有 MySQL 特定表选项在
CREATE TABLE
语句中。 -
--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 语句”。 -
Command-Line Format --hex-blob
使用十六进制表示形式转储二进制列(例如,
'abc'
变为0x616263
)。受影响的数据类型是BINARY
、VARBINARY
、BLOB
类型、BIT
,所有空间数据类型,以及使用binary
字符集 的其他非二进制数据类型。当使用
--tab
时,忽略--hex-blob
选项。 -
Command-Line Format --lines-terminated-by=string
Type 字符串 该选项与
--tab
选项一起使用,具有与LINES
子句相同的含义LOAD DATA
。见 第 15.2.9 节,“LOAD DATA 语句”。 -
--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
回车换行序列。 -
Command-Line Format --显示创建跳过次要引擎
从
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 帐户写入,并且 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'
和空值: 对于一个名为column_name
的列,NULL
值、空字符串和字符串值'NULL'
在输出中是区分开的,如下所示。Value: XML Representation: NULL
(未知值)<field name="
column_name
" xsi:nil="true" />''
(空字符串)<field name="
column_name
"></field>'NULL'
(字符串值)<field name="
column_name
">NULL</field>使用 mysql 客户端时,输出也遵循上述规则。(见 第 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.3 之前,
--routines
和--events
选项对于 mysqldump 和 mysqlpump 不是必需的,以包括存储的例程和事件时使用--all-databases
选项:转储包括mysql
系统数据库,因此也包括mysql.proc
和mysql.event
表,其中包含存储的例程和事件定义。从 MySQL 8.3 开始,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 Scheduler 事件 для转储的数据库。该选项需要对这些数据库具有
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
跳过转储文件中的表视图。该选项添加于 MySQL 8.2.0。
-
Command-Line Format --init-command=str
Type 字符串 在连接到 MySQL 服务器后执行的单个 SQL 语句。该定义重置了由它或
init-command-add
定义的现有语句。该选项添加于 MySQL 8.2.0。 -
Command-Line Format --init-command-add=str
Type 字符串 添加一个额外的 SQL 语句,以在连接或重新连接到 MySQL 服务器后执行。它可以与
--init-command
一起使用,但如果在init-command
之前使用,则无效。该选项添加于 MySQL 8.2.0。 -
--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 节,“生成的不可见主键”。
-
Command-Line Format --tables
覆盖
--databases
或-B
选项。mysqldump 将所有名称参数视为表名,位于该选项之后。 -
Command-Line Format --triggers
Disabled by skip-triggers
在输出中包括每个转储表的触发器。该选项默认启用;使用
--skip-triggers
禁用它。要转储表的触发器,您必须拥有该表的
TRIGGER
权限。允许多个触发器。mysqldump 按激活顺序转储触发器,以便在重新加载转储文件时,触发器以相同的激活顺序创建。然而,如果 mysqldump 转储文件包含多个触发器,用于同一个表的同一个触发事件和操作时间,那么尝试加载转储文件到较旧的服务器时将出现错误,该服务器不支持多个触发器。(有关解决方法,请参阅 降级说明;您可以将触发器转换为与较旧服务器兼容。)
-
--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
-only 和混合使用数据库。
性能也受到 事务选项 的影响,主要是对于转储操作。
-
Command-Line Format --column-statistics
Type 布尔值 Default Value OFF
将
ANALYZE TABLE
语句添加到输出中,以便在重新加载转储文件时生成直方图统计信息。该选项默认禁用,因为大型表的直方图生成可能需要很长时间。 -
--disable-keys
,-K
Command-Line Format --disable-keys
对于每个表,使用
INSERT
语句,surround它们以/*!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的单个数据包超过,无论mysqldump选项的设置如何。 -
--mysqld-long-query-time=
value
Command-Line Format --mysqld-long-query-time=value
Type 数字 Default Value Server 全局设置
设置会话值
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
选项组关于选择性启用或禁用--opt影响的选项的信息。 -
--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 语句”。 -
--刷新日志
,-F
Command-Line Format --刷新日志
在开始转储之前刷新 MySQL 服务器日志文件。该选项需要
RELOAD
权限。如果您将该选项与--所有数据库
选项结合使用,则每个被转储的数据库的日志都会被刷新。except when using--锁定所有表
,--源数据
, 或--单个事务
。在这些情况下,日志仅在所有表被锁定时刷新一次,相应于FLUSH TABLES WITH READ LOCK
的时刻。如果您想让转储和日志刷新同时发生,请使用--刷新日志
与--锁定所有表
,--源数据
, 或--单个事务
。 -
Command-Line Format --刷新权限
将
FLUSH PRIVILEGES
语句添加到转储输出中,在转储mysql
数据库后。这选项应该在转储包含mysql
数据库和任何其他依赖于mysql
数据库数据的数据库时使用。因为转储文件包含
FLUSH PRIVILEGES
语句,因此重新加载文件需要足够的权限来执行该语句。Note对于从旧版本升级到 MySQL 5.7 或更高版本,不要使用
--刷新权限
。对于这种情况的升级说明,请参阅 第 3.5 节,“MySQL 8.3 中的变化”。 -
--锁定所有表
,-x
Command-Line Format --锁定所有表
-
--锁定表
,-l
Command-Line Format --锁定表
对于每个被转储的数据库,锁定要转储的所有表。在转储
MyISAM
表时,使用READ LOCAL
锁以允许并发插入。在转储事务表(如InnoDB
)时,--单个事务
是一个更好的选择,因为它不需要锁定表。因为
--锁定表
对每个数据库单独锁定表,因此该选项不能保证转储文件中的表在不同数据库之间逻辑一致。一些选项,如
--opt
, 自动启用--锁定表
。如果您想覆盖该选项,请在选项列表末尾使用--skip-lock-tables
。 -
Command-Line Format --不自动提交
-
Command-Line Format --按主键排序
将每个表的行排序到其主键,或者如果存在唯一索引,则排序到该索引。这在将
MyISAM
表dump到InnoDB
表时非常有用,但这将使dump操作时间大大增加。 -
Command-Line Format --共享内存基准名称=名称
Platform Specific Windows 在 Windows 上,用于连接到本地服务器的共享内存的名称。默认值是
MYSQL
。共享内存名称区分大小写。该选项仅在服务器启动时启用了
shared_memory
系统变量以支持共享内存连接时生效。 -
Command-Line Format --单个事务
该选项将事务隔离模式设置为
可重复读
,并在dump数据之前向服务器发送START TRANSACTION
SQL 语句。它仅对事务表(如InnoDB
)有用,因为它dump数据库的一致状态,而不阻塞任何应用程序。需要 RELOAD 或 FLUSH_TABLES 权限与
--单个事务
一起使用,如果 gtid_mode=ON 且 --set-gtid=purged=ON|AUTO。使用该选项时,需要注意只有
InnoDB
表被dump到一致状态。例如,任何MyISAM
或MEMORY
表在使用该选项时dump的状态可能仍然会改变。在使用
--单个事务
dump 时,为了确保有效的dump文件(正确的表内容和二进制日志坐标),不应在其他连接中使用以下语句:ALTER TABLE
、CREATE TABLE
、DROP TABLE
、RENAME TABLE
、TRUNCATE TABLE
。一致读取不是从这些语句中隔离的,因此在要dump的表上使用这些语句可能会导致SELECT
语句(由 mysqldump 执行)检索表内容时获得不正确的内容或失败。选项
--单个事务
和--锁定表
是互斥的,因为LOCK TABLES
会隐式提交任何挂起的事务。要dump大型表,请将
--单个事务
选项与--快速
选项结合使用。
选项组
当您选择性地启用或禁用组选项时,顺序很重要,因为选项是从第一到最后处理的。例如, --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 服务器复制数据到另一个 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 服务器可能会等待这些语句完成。 之后,转储将变为锁定免费,不会干扰表的读取和写入。
对于点时间恢复(也称为 “回滚,” 当您需要恢复旧备份并重新播放自该备份以来的更改时),通常需要旋转二进制日志(见 第 7.4.4 节,“二进制日志”)或至少知道转储对应的二进制日志坐标:
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 节,“数据库备份方法” 和 第 9.3 节,“示例备份和恢复策略”。
-
要选择
--opt
的效果,除了某些功能外,使用--skip
选项对于每个功能。要禁用扩展插入和内存缓冲区,使用--opt
--skip-extended-insert
--skip-quick
。(实际上,--skip-extended-insert
--skip-quick
足够,因为--opt
默认启用。) -
要反转
--opt
对于所有功能,除了禁用索引和表锁定,使用--skip-opt
--disable-keys
--lock-tables
。
限制
mysqldump 不会默认转储 performance_schema
或 sys
模式。要转储任何这些,需要在命令行上明确命名它们。您也可以使用 --databases
选项命名它们。对于 performance_schema
,还需要使用 --skip-lock-tables
选项。
mysqldump 不会转储 INFORMATION_SCHEMA
模式。
mysqldump 不会转储 InnoDB
CREATE TABLESPACE
语句。
mysqldump 不会转储 NDB Cluster ndbinfo
信息数据库。
mysqldump 包括重新创建 general_log
和 slow_query_log
表的语句,以便转储 mysql
数据库。日志表内容不会被转储。
如果您在备份视图时遇到权限不足的问题,请参阅 第 27.9 节,“视图限制” 以获取解决方法。