Documentation Home
MySQL 8.0 参考手册  / 第 4 章 MySQL 程序  / 4.5 客户端程序  /  4.5.4 mysqldump——数据库备份程序

4.5.4 mysqldump——数据库备份程序

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

mysqldump至少需要 SELECT转储表、SHOW VIEW转储视图、TRIGGER转储触发器的权限,LOCK TABLES如果 --single-transaction不使用该选项,以及(从 MySQL 5.6.49 开始) PROCESS如果 --no-tablespaces不使用该选项。某些选项可能需要其他权限,如选项说明中所述。

要重新加载转储文件,您必须具有执行它包含的语句所需的权限,例如对 CREATE这些语句创建的对象的适当权限。

mysqldump输出可以包含 ALTER DATABASE更改数据库排序规则的语句。这些可以在转储存储的程序以保留其字符编码时使用。要重新加载包含此类语句的转储文件, ALTER需要受影响数据库的权限。

笔记

在 Windows 上使用 PowerShell 进行输出重定向的转储创建了一个具有 UTF-16 编码的文件:

mysqldump [options] > dump.sql

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

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

性能和可扩展性注意事项

mysqldump优点包括在恢复之前查看甚至编辑输出的便利性和灵活性。您可以为开发和 DBA 工作克隆数据库,或者对现有数据库进行轻微改动以进行测试。它不是用于备份大量数据的快速或可扩展的解决方案。对于大数据量,即使备份步骤花费合理的时间,恢复数据也可能非常慢,因为重放 SQL 语句涉及用于插入、索引创建等的磁盘 I/O。

对于大规模的备份和恢复, 物理备份更为合适,将数据文件复制成可以快速恢复的原始格式:

  • 如果您的表主要是InnoDB 表,或者混合使用InnoDBMyISAM表,请考虑使用 MySQL Enterprise Backup 产品的 mysqlbackup命令。(作为企业订阅的一部分提供。)它InnoDB以最小的中断提供最佳的备份性能;它还可以备份来自 MyISAM其他存储引擎的表;并且它提供了许多方便的选项以适应不同的备份场景。请参阅 第 24.2 节,“MySQL 企业备份概述”

  • 如果您的表主要是MyISAM 表,请考虑改用mysqlhotcopy ,以获得比备份和恢复操作的mysqldump 更好的性能 。请参阅第 4.6.10 节,“mysqlhotcopy — 数据库备份程序”

mysqldump可以逐行检索和转储表内容,或者它可以从表中检索整个内容并在转储之前将其缓冲在内存中。如果要转储大表,内存中的缓冲可能会成为一个问题。要逐行转储表,请使用 --quick选项(或 --opt,启用 --quick)。该 --opt选项(因此 --quick)默认启用,因此要启用内存缓冲,请使用 --skip-quick.

如果您正在使用最新版本的 mysqldump生成要重新加载到非常旧的 MySQL 服务器的转储,请使用该 --skip-opt选项而不是--optor --extended-insert选项。

有关mysqldump的其他信息,请参阅第 7.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支持以下选项,可以在命令行或 选项文件的组中指定[mysqldump][client]有关 MySQL 程序使用的选项文件的信息,请参阅第 4.2.2.2 节,“使用选项文件”

表 4.13 mysqldump 选项

选项名称 描述 介绍
--添加删除数据库 在每个 CREATE DATABASE 语句之前添加 DROP DATABASE 语句
--添加删除表 在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句
--add-drop-trigger 在每个 CREATE TRIGGER 语句之前添加 DROP TRIGGER 语句
--添加锁 用 LOCK TABLES 和 UNLOCK TABLES 语句围绕每个表转储
--所有数据库 转储所有数据库中的所有表
--allow-关键字 允许创建作为关键字的列名
--apply-slave-statements 在 CHANGE MASTER 语句之前包括 STOP SLAVE 并在输出结束时包括 START SLAVE
--绑定地址 使用指定的网络接口连接到 MySQL 服务器
--字符集目录 安装字符集的目录
- 注释 向转储文件添加注释
- 袖珍的 产生更紧凑的输出
- 兼容的 生成与其他数据库系统或旧版 MySQL 服务器更兼容的输出
--complete-插入 使用包含列名的完整 INSERT 语句
- 压缩 压缩客户端和服务器之间发送的所有信息
--创建选项 在 CREATE TABLE 语句中包含所有 MySQL 特定的表选项
--数据库 将所有名称参数解释为数据库名称
--调试 写调试日志
--调试检查 程序退出时打印调试信息
- 调试信息 程序退出时打印调试信息、内存和 CPU 统计信息
--default-auth 要使用的身份验证插件
--默认字符集 指定默认字符集
--defaults-extra-file 除了通常的选项文件外,还读取命名的选项文件
--defaults-文件 只读命名选项文件
--defaults-group-suffix 选项组后缀值
--延迟插入 编写 INSERT DELAYED 语句而不是 INSERT 语句
--delete-master-logs 在复制源服务器上,执行转储操作后删除二进制日志
--disable-keys 对于每个表,用语句包围 INSERT 语句以禁用和启用键
--转储日期 如果给出了 --comments,则将转储日期包含为“转储完成于”注释
--转储奴隶 包括列出副本源的二进制日志坐标的 CHANGE MASTER 语句
--启用明文插件 启用明文身份验证插件 5.6.28
--事件 从转储数据库中转储事件
--扩展插入 使用多行 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 的相应子句含义相同
--刷新日志 在开始转储之前刷新 MySQL 服务器日志文件
--刷新权限 转储 mysql 数据库后发出 FLUSH PRIVILEGES 语句
- 力量 即使在表转储过程中出现 SQL 错误也继续
- 帮助 显示帮助信息并退出
--hex-blob 使用十六进制表示法转储二进制列
- 主持人 MySQL 服务器所在的主机
--忽略表 不要转储给定的表
--include-master-host-port 在使用 --dump-slave 生成​​的 CHANGE MASTER 语句中包含 MASTER_HOST/MASTER_PORT 选项
--插入忽略 编写 INSERT IGNORE 而不是 INSERT 语句
--lines-terminated-by 此选项与 --tab 选项一起使用,与 LOAD DATA 的相应子句含义相同
--lock-all-tables 锁定所有数据库中的所有表
--锁表 在转储之前锁定所有表
--日志错误 将警告和错误附加到命名文件
--登录路径 从 .mylogin.cnf 读取登录路径选项
- 主要的数据 将二进制日志文件名和位置写入输出
--最大允许数据包 发送到服务器或从服务器接收的最大数据包长度
--net-buffer-length TCP/IP 和套接字通信的缓冲区大小
--no-autocommit 在 SET autocommit = 0 和 COMMIT 语句中包含每个转储表的 INSERT 语句
--no-create-db 不要编写 CREATE DATABASE 语句
--no-create-info 不要编写重新创建每个转储表的 CREATE TABLE 语句
- 没有数据 不要转储表内容
--no-defaults 不读取选项文件
--no-set-names 与 --skip-set-charset 相同
--无表空间 不要在输出中写入任何 CREATE LOGFILE GROUP 或 CREATE TABLESPACE 语句
- 选择 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset 的简写
--order-by-primary 转储按主键或第一个唯一索引排序的每个表的行
- 密码 连接到服务器时使用的密码
- 管道 使用命名管道连接到服务器(仅限 Windows)
--插件目录 安装插件的目录
- 港口 用于连接的 TCP/IP 端口号
--print-defaults 打印默认选项
- 协议 使用的传输协议
- 快的 一次从服务器中检索一个表的行
--引用名称 反引号字符中的引号标识符
- 代替 编写 REPLACE 语句而不是 INSERT 语句
--结果文件 直接输出到给定文件
--例程 从转储的数据库中转储存储的例程(过程和函数)
--secure-auth 不要以旧的(pre-4.1)格式向服务器发送密码 5.6.17
--set-字符集 将 SET NAMES default_character_set 添加到输出
--set-gtid-清除 是否在输出中添加 SET @@GLOBAL.GTID_PURGED
--shared-memory-base-name 共享内存连接的共享内存名称(仅限 Windows)
--单笔交易 在从服务器转储数据之前发出 BEGIN SQL 语句
--skip-add-drop-table 不要在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句
--skip-add-locks 不加锁
--跳过评论 不要在转储文件中添加注释
--skip-compact 不要产生更紧凑的输出
--skip-disable-keys 不要禁用键
--skip-extended-insert 关闭扩展插入
--skip-opt 关闭 --opt 设置的选项
--快速跳过 不要一次从服务器一行检索表的行
--skip-quote-names 不要引用标识符
--skip-set-字符集 不要写 SET NAMES 语句
--skip-触发器 不要转储触发器
--skip-tz-utc 关闭 tz-utc
- 插座 要使用的 Unix 套接字文件或 Windows 命名管道
--ssl 启用连接加密
--ssl-ca 包含可信 SSL 证书颁发机构列表的文件
--ssl-capath 包含受信任的 SSL 证书颁发机构证书文件的目录
--ssl证书 包含 X.509 证书的文件
--ssl密码 连接加密的允许密码
--ssl-crl 包含证书吊销列表的文件
--ssl-crlpath 包含证书吊销列表文件的目录
--ssl-密钥 包含 X.509 密钥的文件
--ssl模式 连接到服务器的所需安全状态 5.6.30
--ssl-verify-server-cert 根据服务器证书公用名身份验证主机名
- 标签 生成制表符分隔的数据文件
--表格 覆盖 --databases 或 -B 选项
--触发器 每个转储表的转储触发器
--tz-utc 将 SET TIME_ZONE='+00:00' 添加到转储文件
- 用户 连接到服务器时使用的 MySQL 用户名
--冗长 详细模式
- 版本 显示版本信息并退出
- 在哪里 仅转储给定 WHERE 条件选择的行
--xml 生成 XML 输出

连接选项

mysqldump命令登录到 MySQL 服务器以提取信息 。以下选项指定如何连接到 MySQL 服务器,无论是在同一台机器上还是在远程系统上。

  • --bind-address=ip_address

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

  • --compress,-C

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

  • --default-auth=plugin

    关于使用哪个客户端身份验证插件的提示。请参阅第 6.2.11 节,“可插入身份验证”

  • --enable-cleartext-plugin

    启用mysql_clear_password明文身份验证插件。(请参阅 第 6.4.1.5 节,“客户端明文可插入身份验证”。)

    这个选项是在 MySQL 5.6.28 中添加的。

  • --host=host_name, -h host_name

    从给定主机上的 MySQL 服务器转储数据。默认主机是localhost.

  • --login-path=name

    从登录路径文件中指定的登录路径读取选项 .mylogin.cnf。“ 登录路径是一个选项组,其中包含指定要连接到哪个 MySQL 服务器以及要以哪个帐户进行身份验证的选项要创建或修改登录路径文件,请使用 mysql_config_editor实用程序。请参阅 第 4.6.6 节,“mysql_config_editor — MySQL 配置实用程序”

    有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”

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

    用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果没有给出, mysqldump会提示输入一个。如果给定,则后面 的密码之间 不能有空格。如果未指定密码选项,则默认为不发送密码。 --password=-p

    在命令行上指定密码应该被认为是不安全的。为避免在命令行中提供密码,请使用选项文件。请参阅 第 6.1.2.1 节,“密码安全的最终用户指南”

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

  • --pipe,-W

    在 Windows 上,使用命名管道连接到服务器。仅当服务器启动时 named_pipe启用了支持命名管道连接的系统变量时,此选项才适用。此外,进行连接的用户必须是 named_pipe_full_access_group 系统变量指定的 Windows 组的成员。

  • --plugin-dir=dir_name

    在其中查找插件的目录。如果 --default-auth选项用于指定身份验证插件但 mysqldump找不到它,请指定此选项。请参阅 第 6.2.11 节,“可插入身份验证”

  • --port=port_num, -P port_num

    对于 TCP/IP 连接,要使用的端口号。

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

    用于连接到服务器的传输协议。当其他连接参数通常导致使用您想要的协议以外的协议时,它很有用。有关允许值的详细信息,请参阅 第 4.2.5 节“连接传输协议”

  • --secure-auth

    不要以旧的(pre-4.1)格式向服务器发送密码。这会阻止除使用较新密码格式的服务器之外的连接。默认情况下启用此选项;用于 --skip-secure-auth 禁用它。这个选项是在 MySQL 5.6.17 中添加的。

    笔记

    使用 pre-4.1 哈希方法的密码不如使用本机密码哈希方法的密码安全,应避免使用。4.1 之前的密码已弃用;期望在未来的 MySQL 版本中删除对它们的支持。有关帐户升级说明,请参阅第 6.4.1.3 节,“从 4.1 版之前的密码哈希和 mysql_old_password 插件迁移”

    笔记

    此选项已弃用;希望在未来的版本中将其删除。从 MySQL 5.7.5 开始,它始终处于启用状态,尝试禁用它会产生错误。

  • --socket=path, -S path

    对于与 的连接localhost,要使用的 Unix 套接字文件,或者在 Windows 上,要使用的命名管道的名称。

    在 Windows 上,仅当服务器启动时named_pipe 启用了支持命名管道连接的系统变量时,此选项才适用。此外,进行连接的用户必须是 named_pipe_full_access_group 系统变量指定的 Windows 组的成员。

  • --ssl*

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

  • --user=user_name, -u user_name

    用于连接到服务器的 MySQL 帐户的用户名。

选项文件选项

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

DDL 选项

mysqldump的 使用场景包括建立一个全新的 MySQL 实例(包括数据库表),以及用现有数据库和表替换现有实例中的数据。以下选项允许您通过在转储文件中编码各种 DDL 语句来指定在恢复转储时要拆除和设置的内容。

调试选项

以下选项打印调试信息,在转储文件中对调试信息进行编码,或者让转储操作继续进行而不管潜在的问题。

  • --allow-keywords

    允许创建作为关键字的列名。这通过在每个列名前加上表名来实现。

  • --comments,-i

    在转储文件中写入附加信息,例如程序版本、服务器版本和主机。默认情况下启用此选项。要禁止显示此附加信息,请使用--skip-comments.

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

    写调试日志。典型的 debug_options字符串是 . 默认值为 。 d:t:o,file_named:t:o,/tmp/mysqldump.trace

    仅当 MySQL 是使用 WITH_DEBUG. Oracle 提供的 MySQL 发布二进制文件不是 使用此选项构建的。

  • --debug-check

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

    仅当 MySQL 是使用 WITH_DEBUG. Oracle 提供的 MySQL 发布二进制文件不是 使用此选项构建的。

  • --debug-info

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

    仅当 MySQL 是使用 WITH_DEBUG. Oracle 提供的 MySQL 发布二进制文件不是 使用此选项构建的。

  • --dump-date

    如果--comments给出该选项,mysqldump会在以下形式的转储末尾生成注释:

    -- Dump completed on DATE

    但是,日期会导致在不同时间获取的转储文件看起来不同,即使数据在其他方面是相同的。--dump-date--skip-dump-date 控制日期是否添加到评论中。默认为--dump-date (在注释中包含日期)。 --skip-dump-date 抑制日期打印。

  • --force,-f

    即使在表转储过程中发生 SQL 错误,也要继续。

    此选项的一个用途是使 mysqldump继续执行,即使遇到因定义引用已删除的表而变得无效的视图。如果没有 --forcemysqldump将退出并显示一条错误消息。使用--forcemysqldump会打印错误消息,但它还会将包含视图定义的 SQL 注释写入转储输出并继续执行。

  • --log-error=file_name

    通过将它们附加到命名文件来记录警告和错误。默认是不做日志记录。

  • --skip-comments

    请参阅 --comments选项的说明。

  • --verbose,-v

    详细模式。打印有关程序功能的更多信息。

帮助选项

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

  • --help,-?

    显示帮助信息并退出。

  • --version,-V

    显示版本信息并退出。

国际化选项

以下选项更改 mysqldump命令如何表示具有本地语言设置的字符数据。

复制选项

mysqldump命令经常用于 在复制配置中的副本服务器上创建空实例或包含数据的实例。以下选项适用于在复制源和副本服务器上转储和恢复数据。

  • --apply-slave-statements

    对于使用该 --dump-slave选项生成的副本转储,在 STOP SLAVE语句前添加CHANGE MASTER TO 语句并START SLAVE 在输出末尾添加语句。

  • --delete-master-logs

    PURGE BINARY LOGS 在源复制服务器上,执行转储操作后, 通过向服务器发送语句来删除二进制日志。此选项需要 RELOAD特权以及足以执行该语句的特权。该选项自动启用 --master-data.

  • --dump-slave[=value]

    此选项类似于, --master-data只是它用于转储副本服务器以生成转储文件,该转储文件可用于将另一台服务器设置为与转储服务器具有相同源的副本。它会导致转储输出包含一条CHANGE MASTER TO语句,指示转储副本源的二进制日志坐标(文件名和位置)。这些是副本应从其开始复制的源服务器坐标。

    --dump-slave导致使用来自源的坐标而不是转储服务器的坐标,就像 --master-data选项所做的那样。此外,指定此选项会导致 --master-data选项被覆盖(如果使用)并被有效地忽略。

    选项值的处理方式与 for 相同 --master-data(设置无值或 1 会导致将CHANGE MASTER TO 语句写入转储,设置 2 会导致语句被写入但包含在 SQL 注释中)并且具有与--master-data启用相同的效果或禁用其他选项以及如何处理锁定。

    此选项导致mysqldump在转储之前停止副本 SQL 线程并在转储之后再次重新启动它。

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

    与 一起--dump-slave, 也可以使用 --apply-slave-statements 和 选项。--include-master-host-port

  • --include-master-host-port

    对于CHANGE MASTER TO 使用选项生成的副本转储中的语句 --dump-slave,添加 副本源的主机名MASTER_HOSTMASTER_PORTTCP/IP 端口号的选项。

  • --master-data[=value]

    使用此选项转储源复制服务器以生成可用于将另一台服务器设置为源副本的转储文件。它会导致转储输出包含一条CHANGE MASTER TO 语句,指示转储服务器的二进制日志坐标(文件名和位置)。这些是源服务器坐标,在将转储文件加载到副本后,副本应从这些坐标开始复制。

    如果选项值为 2,则该CHANGE MASTER TO语句将作为 SQL 注释编写,因此仅供参考;重新加载转储文件时它不起作用。如果选项值为 1,则该语句不作为注释写入,并在重新加载转储文件时生效。如果未指定选项值,则默认值为 1。

    --master-data向服务器发送一条 SHOW MASTER STATUS语句以获取信息,因此它需要足够的权限来执行该语句。此选项还需要RELOAD 权限并且必须启用二进制日志。

    --master-data选项会自动关闭--lock-tables。它还会打开 --lock-all-tables,除非 --single-transaction还指定,在这种情况下,全局读锁仅在转储开始时获取很短的时间(请参阅对 的描述 --single-transaction)。在所有情况下,对日志的任何操作都发生在转储的确切时刻。

    也可以通过使用该选项转储源的现有副本来设置副本, 如果同时使用两个选项--dump-slave,该选项将覆盖--master-data并导致它被忽略。

  • --set-gtid-purged=value

    SET @@GLOBAL.gtid_purged此选项通过指示是否向输出添加语句来 控制写入转储文件的全局事务 ID (GTID) 信息 。此选项还可能导致在重新加载转储文件时将语句写入禁用二进制日志记录的输出。

    下表显示了允许的选项值。默认值为AUTO

    价值 意义
    OFF SET不向输出添加语句。
    ON 在输出中添加SET语句。如果服务器上未启用 GTID,则会发生错误。
    AUTO SET如果在服务器上启用了 GTID,则在输出中添加一条语句。

    重新加载转储文件时,该--set-gtid-purged选项对二进制日志记录有以下影响:

    • --set-gtid-purged=OFF:SET @@SESSION.SQL_LOG_BIN=0;不会添加到输出中。

    • --set-gtid-purged=ON:SET @@SESSION.SQL_LOG_BIN=0;添加到输出。

    • --set-gtid-purged=AUTO:SET @@SESSION.SQL_LOG_BIN=0;如果在您正在备份的服务器上启用了 GTID,则添加到输出中(即,如果AUTO 评估为ON)。

    将此选项与选项一起使用 --single-transaction 会导致输出不一致。如果 --set-gtid-purged=ON需要,它可以与 一起使用 --lock-all-tables,但这可以防止 在运行mysqldump时进行并行查询。

    gtid_mode=ON如果您的转储文件包含系统表, 则不建议在服务器 ( ) 上启用 GTID 时加载转储文件。mysqldump为使用非事务性 MyISAM 存储引擎的系统表发出 DML 指令,并且在启用 GTID 时不允许这种组合。另请注意,将转储文件从启用了 GTID 的服务器加载到另一台启用了 GTID 的服务器中,会导致生成不同的事务标识符。

格式选项

以下选项指定如何表示整个转储文件或转储文件中的某些类型的数据。它们还控制是否将某些可选信息写入转储文件。

  • --compact

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

  • --compatible=name

    生成与其他数据库系统或较旧的 MySQL 服务器更兼容的输出。的值 name可以是 ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options, no_table_options, 或 no_field_options。要使用多个值,请用逗号分隔它们。这些值与设置服务器 SQL 模式的相应选项具有相同的含义。请参阅第 5.1.10 节,“服务器 SQL 模式”

    此选项不保证与其他服务器的兼容性。它只启用那些当前可用于使转储输出更兼容的 SQL 模式值。例如,--compatible=oracle不将数据类型映射到 Oracle 类型或使用 Oracle 注释语法。

  • --complete-insert,-c

    INSERT 使用包含列名的 完整语句。

  • --create-options

    在语句中包括所有特定于 MySQL 的表选项 CREATE TABLE

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

    这些选项与 option 一起使用,与 的相应 子句--tab具有相同的含义。请参阅 第 13.2.6 节,“加载数据语句”FIELDSLOAD DATA

  • --hex-blob

    使用十六进制表示法转储二进制列(例如, 'abc'变成 0x616263)。受影响的数据类型是 BINARY, VARBINARY, BLOBtypes, , 所有空间数据类型,以及与 字符集BIT一起使用时的其他非二进制数据类型 。 binary

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

    该选项与选项一起使用,与 对应的 子句--tab意义相同。请参阅 第 13.2.6 节,“加载数据语句”LINESLOAD DATA

  • --quote-names,-Q

    在字符中引用标识符(例如数据库、表和列名称)`。如果 ANSI_QUOTES启用 SQL 模式,则标识符在" 字符内被引用。默认情况下启用此选项。它可以被禁用--skip-quote-names,但是这个选项应该在任何 --compatible可能启用的选项之后给出--quote-names

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

    直接输出到命名文件。即使在生成转储时发生错误,也会创建结果文件并覆盖其先前的内容。

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

  • --tab=dir_name, -T dir_name

    生成制表符分隔的文本格式数据文件。对于每个转储的表,mysqldump创建一个 tbl_name.sql 包含CREATE TABLE创建表的语句的文件,并且服务器写入一个 tbl_name.txt 包含其数据的文件。选项值是写入文件的目录。

    笔记

    仅当mysqldump与mysqld服务器在同一台机器上运行 时才应使用此选项 。因为服务器*.txt在您指定的目录中创建文件,所以该目录必须是服务器可写的,并且您使用的 MySQL 帐户必须具有 FILE权限。因为 mysqldump在同一目录中创建 *.sql,所以它必须对您的系统登录帐户是可写的。

    默认情况下,.txt数据文件的格式是使用列值之间的制表符和每行末尾的换行符。可以使用 和 选项明确指定格式。 --fields-xxx--lines-terminated-by

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

  • --tz-utc

    此选项允许TIMESTAMP 在不同时区的服务器之间转储和重新加载列。mysqldump将其连接时区设置为 UTC 并添加SET TIME_ZONE='+00:00'到转储文件中。如果没有此选项,TIMESTAMP列将在源服务器和目标服务器的本地时区转储和重新加载,如果服务器位于不同的时区,这可能会导致值发生变化。 --tz-utc还可以防止由于夏令时而发生的变化。--tz-utc默认情况下启用。要禁用它,请使用 --skip-tz-utc.

  • --xml,-X

    将转储输出写入格式正确的 XML。

    NULL'NULL'和空值:对于名为 的列column_nameNULL值、空字符串和字符串值'NULL'在此选项生成的输出中相互区分,如下所示。

    价值: XML 表示:
    NULL未知值

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

    ''空字符串

    <field name="column_name"></field>

    'NULL'字符串值

    <field name="column_name">NULL</field>

    使用该选项运行时mysql客户端 的输出--xml也遵循上述规则。(参见 第 4.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

    转储所有数据库中的所有表。这与--databases在命令行上使用选项和命名所有数据库相同。

  • --databases,-B

    转储几个数据库。通常, mysqldump将命令行上的第一个名称参数视为数据库名称,将后面的名称视为表名。使用此选项,它将所有名称参数视为数据库名称。CREATE DATABASEUSE 语句包含在每个新数据库之前的输出中。

    此选项可用于转储 INFORMATION_SCHEMAperformance_schema数据库,即使使用该 --all-databases选项通常也不会转储。(也使用该 --skip-lock-tables 选项。)

  • --events,-E

    在输出中包括转储数据库的事件计划程序事件。此选项需要 EVENT这些数据库的权限。

    通过使用--events containsCREATE EVENT 语句创建事件而生成的输出。但是,这些语句不包括事件创建和修改时间戳等属性,因此在重新加载事件时,创建的时间戳等于重新加载时间。

    如果您需要使用其原始时间戳属性创建事件,请不要使用--events. 相反, mysql.event使用对数据库具有适当权限的 MySQL 帐户直接转储并重新加载表 的内容mysql

  • --ignore-table=db_name.tbl_name

    不要转储给定的表,该表必须使用数据库名和表名指定。要忽略多个表,请多次使用此选项。此选项也可用于忽略视图。

  • --no-data,-d

    Do not write any table row information (that is, do not dump table contents). This is useful if you want to dump only the CREATE TABLE statement for the table (for example, to create an empty copy of the table by loading the dump file).

  • --routines, -R

    Include stored routines (procedures and functions) for the dumped databases in the output. This option requires the SELECT privilege for the mysql.proc table.

    The output generated by using --routines contains CREATE PROCEDURE and CREATE FUNCTION statements to create the routines. However, these statements do not include attributes such as the routine creation and modification timestamps, so when the routines are reloaded, they are created with timestamps equal to the reload time.

    If you require routines to be created with their original timestamp attributes, do not use --routines. Instead, dump and reload the contents of the mysql.proc table directly, using a MySQL account that has appropriate privileges for the mysql database.

  • --tables

    Override the --databases or -B option. mysqldump regards all name arguments following the option as table names.

  • --triggers

    Include triggers for each dumped table in the output. This option is enabled by default; disable it with --skip-triggers.

    To be able to dump a table's triggers, you must have the TRIGGER privilege for the table.

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

    Dump only rows selected by the given WHERE condition. Quotes around the condition are mandatory if it contains spaces or other characters that are special to your command interpreter.

    Examples:

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

Performance Options

The following options are the most relevant for the performance particularly of the restore operations. For large data sets, restore operation (processing the INSERT statements in the dump file) is the most time-consuming part. When it is urgent to restore data quickly, plan and test the performance of this stage in advance. For restore times measured in hours, you might prefer an alternative backup and restore solution, such as MySQL Enterprise Backup for InnoDB-only and mixed-use databases, or mysqlhotcopy for MyISAM-only databases.

Performance is also affected by the transactional options, primarily for the dump operation.

  • --delayed-insert

    For those nontransactional tables that support the INSERT DELAYED syntax, use that statement rather than regular INSERT statements.

    As of MySQL 5.6.6, DELAYED inserts are deprecated; expect this option to be removed in a future release.

  • --disable-keys, -K

    For each table, surround the INSERT statements with /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; and /*!40000 ALTER TABLE tbl_name ENABLE KEYS */; statements. This makes loading the dump file faster because the indexes are created after all rows are inserted. This option is effective only for nonunique indexes of MyISAM tables.

  • --extended-insert, -e

    Write INSERT statements using multiple-row syntax that includes several VALUES lists. This results in a smaller dump file and speeds up inserts when the file is reloaded.

  • --insert-ignore

    Write INSERT IGNORE statements rather than INSERT statements.

  • --max-allowed-packet=value

    The maximum size of the buffer for client/server communication. The default is 24MB, the maximum is 1GB.

  • --net-buffer-length=value

    The initial size of the buffer for client/server communication. When creating multiple-row INSERT statements (as with the --extended-insert or --opt option), mysqldump creates rows up to --net-buffer-length bytes long. If you increase this variable, ensure that the MySQL server net_buffer_length system variable has a value at least this large.

  • --opt

    This option, enabled by default, is shorthand for the combination of --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset. It gives a fast dump operation and produces a dump file that can be reloaded into a MySQL server quickly.

    Because the --opt option is enabled by default, you only specify its converse, the --skip-opt to turn off several default settings. See the discussion of mysqldump option groups for information about selectively enabling or disabling a subset of the options affected by --opt.

  • --quick, -q

    This option is useful for dumping large tables. It forces mysqldump to retrieve rows for a table from the server a row at a time rather than retrieving the entire row set and buffering it in memory before writing it out.

  • --skip-opt

    See the description for the --opt option.

Transactional Options

The following options trade off the performance of the dump operation, against the reliability and consistency of the exported data.

  • --add-locks

    Surround each table dump with LOCK TABLES and UNLOCK TABLES statements. This results in faster inserts when the dump file is reloaded. See Section 8.2.4.1, “Optimizing INSERT Statements”.

  • --flush-logs, -F

    Flush the MySQL server log files before starting the dump. This option requires the RELOAD privilege. If you use this option in combination with the --all-databases option, the logs are flushed for each database dumped. The exception is when using --lock-all-tables, --master-data, or --single-transaction: In this case, the logs are flushed only once, corresponding to the moment that all tables are locked by FLUSH TABLES WITH READ LOCK. If you want your dump and the log flush to happen at exactly the same moment, you should use --flush-logs together with --lock-all-tables, --master-data, or --single-transaction.

  • --flush-privileges

    Add a FLUSH PRIVILEGES statement to the dump output after dumping the mysql database. This option should be used any time the dump contains the mysql database and any other database that depends on the data in the mysql database for proper restoration.

    Because the dump file contains a FLUSH PRIVILEGES statement, reloading the file requires privileges sufficient to execute that statement.

  • --lock-all-tables, -x

    Lock all tables across all databases. This is achieved by acquiring a global read lock for the duration of the whole dump. This option automatically turns off --single-transaction and --lock-tables.

  • --lock-tables, -l

    For each dumped database, lock all tables to be dumped before dumping them. The tables are locked with READ LOCAL to permit concurrent inserts in the case of MyISAM tables. For transactional tables such as InnoDB, --single-transaction is a much better option than --lock-tables because it does not need to lock the tables at all.

    Because --lock-tables locks tables for each database separately, this option does not guarantee that the tables in the dump file are logically consistent between databases. Tables in different databases may be dumped in completely different states.

    Some options, such as --opt, automatically enable --lock-tables. If you want to override this, use --skip-lock-tables at the end of the option list.

  • --no-autocommit

    Enclose the INSERT statements for each dumped table within SET autocommit = 0 and COMMIT statements.

  • --order-by-primary

    Dump each table's rows sorted by its primary key, or by its first unique index, if such an index exists. This is useful when dumping a MyISAM table to be loaded into an InnoDB table, but makes the dump operation take considerably longer.

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

    On Windows, the shared-memory name to use for connections made using shared memory to a local server. The default value is MYSQL. The shared-memory name is case-sensitive.

    This option applies only if the server was started with the shared_memory system variable enabled to support shared-memory connections.

  • --single-transaction

    This option sets the transaction isolation mode to REPEATABLE READ and sends a START TRANSACTION SQL statement to the server before dumping data. It is useful only with transactional tables such as InnoDB, because then it dumps the consistent state of the database at the time when START TRANSACTION was issued without blocking any applications.

    When using this option, you should keep in mind that only InnoDB tables are dumped in a consistent state. For example, any MyISAM or MEMORY tables dumped while using this option may still change state.

    While a --single-transaction dump is in process, to ensure a valid dump file (correct table contents and binary log coordinates), no other connection should use the following statements: ALTER TABLE, CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE. A consistent read is not isolated from those statements, so use of them on a table to be dumped can cause the SELECT that is performed by mysqldump to retrieve the table contents to obtain incorrect contents or fail.

    The --single-transaction option and the --lock-tables option are mutually exclusive because LOCK TABLES causes any pending transactions to be committed implicitly.

    Using --single-transaction together with the --set-gtid-purged option is not recommended; doing so can lead to inconsistencies in the output of mysqldump.

    To dump large tables, combine the --single-transaction option with the --quick option.

Option Groups

  • The --opt option turns on several settings that work together to perform a fast dump operation. All of these settings are on by default, because --opt is on by default. Thus you rarely if ever specify --opt. Instead, you can turn these settings off as a group by specifying --skip-opt, then optionally re-enable certain settings by specifying the associated options later on the command line.

  • The --compact option turns off several settings that control whether optional statements and comments appear in the output. Again, you can follow this option with other options that re-enable certain settings, or turn all the settings on by using the --skip-compact form.

When you selectively enable or disable the effect of a group option, order is important because options are processed first to last. For example, --disable-keys --lock-tables --skip-opt would not have the intended effect; it is the same as --skip-opt by itself.

Examples

To make a backup of an entire database:

mysqldump db_name > backup-file.sql

To load the dump file back into the server:

mysql db_name < backup-file.sql

Another way to reload the dump file:

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

mysqldump is also very useful for populating databases by copying data from one MySQL server to another:

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

You can dump several databases with one command:

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

To dump all databases, use the --all-databases option:

mysqldump --all-databases > all_databases.sql

For InnoDB tables, mysqldump provides a way of making an online backup:

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

This backup acquires a global read lock on all tables (using FLUSH TABLES WITH READ LOCK) at the beginning of the dump. As soon as this lock has been acquired, the binary log coordinates are read and the lock is released. If long updating statements are running when the FLUSH statement is issued, the MySQL server may get stalled until those statements finish. After that, the dump becomes lock free and does not disturb reads and writes on the tables. If the update statements that the MySQL server receives are short (in terms of execution time), the initial lock period should not be noticeable, even with many updates.

For point-in-time recovery (also known as roll-forward, when you need to restore an old backup and replay the changes that happened since that backup), it is often useful to rotate the binary log (see Section 5.4.4, “The Binary Log”) or at least know the binary log coordinates to which the dump corresponds:

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

Or:

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

The --master-data and --single-transaction options can be used simultaneously, which provides a convenient way to make an online backup suitable for use prior to point-in-time recovery if tables are stored using the InnoDB storage engine.

For more information on making backups, see Section 7.2, “Database Backup Methods”, and Section 7.3, “Example Backup and Recovery Strategy”.

Restrictions

默认情况下, mysqldump不会转储 INFORMATION_SCHEMAperformance_schema数据库。要转储其中任何一个,请在命令行上明确命名。您也可以使用 --databases选项命名它。另外,使用该 --skip-lock-tables 选项。

mysqldump不会转储 NDB Cluster ndbinfo信息数据库。

如果由于权限不足而在备份视图时遇到问题,请参阅第 20.9 节“视图限制”以获取解决方法。