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
表,或者混合使用InnoDB
和MyISAM
表,请考虑使用 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
选项而不是--opt
or
--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 服务器,无论是在同一台机器上还是在远程系统上。
在具有多个网络接口的计算机上,使用此选项来选择用于连接到 MySQL 服务器的接口。
如果可能,压缩客户端和服务器之间发送的所有信息。请参阅 第 4.2.6 节,“连接压缩控制”。
关于使用哪个客户端身份验证插件的提示。请参阅第 6.2.11 节,“可插入身份验证”。
启用
mysql_clear_password
明文身份验证插件。(请参阅 第 6.4.1.5 节,“客户端明文可插入身份验证”。)这个选项是在 MySQL 5.6.28 中添加的。
--host=
,host_name
-h
host_name
从给定主机上的 MySQL 服务器转储数据。默认主机是
localhost
.从登录路径文件中指定的登录路径读取选项
.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
选项。在 Windows 上,使用命名管道连接到服务器。仅当服务器启动时
named_pipe
启用了支持命名管道连接的系统变量时,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的 Windows 组的成员。在其中查找插件的目录。如果
--default-auth
选项用于指定身份验证插件但 mysqldump找不到它,请指定此选项。请参阅 第 6.2.11 节,“可插入身份验证”。对于 TCP/IP 连接,要使用的端口号。
--protocol={TCP|SOCKET|PIPE|MEMORY}
用于连接到服务器的传输协议。当其他连接参数通常导致使用您想要的协议以外的协议时,它很有用。有关允许值的详细信息,请参阅 第 4.2.5 节“连接传输协议”。
不要以旧的(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 开始,它始终处于启用状态,尝试禁用它会产生错误。
对于与 的连接
localhost
,要使用的 Unix 套接字文件,或者在 Windows 上,要使用的命名管道的名称。在 Windows 上,仅当服务器启动时
named_pipe
启用了支持命名管道连接的系统变量时,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的 Windows 组的成员。以 开头的选项
--ssl
指定是否使用加密连接到服务器并指示在哪里可以找到 SSL 密钥和证书。请参阅 加密连接的命令选项。--user=
,user_name
-u
user_name
用于连接到服务器的 MySQL 帐户的用户名。
选项文件选项
这些选项用于控制要读取的选项文件。
--defaults-extra-file=
file_name
在全局选项文件之后但(在 Unix 上)在用户选项文件之前读取此选项文件。如果该文件不存在或无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
仅使用给定的选项文件。如果该文件不存在或无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录。例外:即使有
--defaults-file
,客户端程序也会读取.mylogin.cnf
.有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
不仅要阅读通常的选项组,还要阅读具有通常名称和后缀
str
. 例如, mysqldump通常读取[client]
和[mysqldump]
组。如果此选项作为 给出--defaults-group-suffix=_other
, mysqldump还会读取[client_other]
和[mysqldump_other]
组。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
不要读取任何选项文件。如果程序启动因从选项文件中读取未知选项而失败,
--no-defaults
可用于防止它们被读取。例外情况是
.mylogin.cnf
文件在所有情况下都会被读取(如果存在)。这允许以比在命令行上更安全的方式指定密码,即使在--no-defaults
使用 时也是如此。要创建.mylogin.cnf
,请使用 mysql_config_editor实用程序。请参阅 第 4.6.6 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
打印程序名称和它从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
DDL 选项
mysqldump的 使用场景包括建立一个全新的 MySQL 实例(包括数据库表),以及用现有数据库和表替换现有实例中的数据。以下选项允许您通过在转储文件中编码各种 DDL 语句来指定在恢复转储时要拆除和设置的内容。
DROP DATABASE
在每个陈述之前 写一个CREATE DATABASE
陈述。此选项通常与--all-databases
or--databases
选项结合使用,因为CREATE DATABASE
除非指定其中一个选项,否则不会写入任何语句。DROP TABLE
在每个陈述之前 写一个CREATE TABLE
陈述。DROP TRIGGER
在每个陈述之前 写一个CREATE TRIGGER
陈述。将创建表使用的任何表空间所需的所有 SQL 语句添加到表转储
NDB
。此信息未包含在mysqldump的输出中。此选项当前仅与 NDB Cluster 表相关。如果给出了or 选项 ,则 抑制以
CREATE DATABASE
其他方式包含在输出中的语句 。--databases
--all-databases
不要编写
CREATE TABLE
创建每个转储表的语句。笔记此选项不排除从 mysqldump输出中创建日志文件组或表空间的语句;但是,您可以
--no-tablespaces
为此目的使用该选项。该选项抑制mysqldump
CREATE LOGFILE GROUP
输出中的所有和CREATE TABLESPACE
语句 。
调试选项
以下选项打印调试信息,在转储文件中对调试信息进行编码,或者让转储操作继续进行而不管潜在的问题。
允许创建作为关键字的列名。这通过在每个列名前加上表名来实现。
在转储文件中写入附加信息,例如程序版本、服务器版本和主机。默认情况下启用此选项。要禁止显示此附加信息,请使用
--skip-comments
.--debug[=
,debug_options
]-# [
debug_options
]写调试日志。典型的
debug_options
字符串是 . 默认值为 。d:t:o,
file_name
d:t:o,/tmp/mysqldump.trace
仅当 MySQL 是使用
WITH_DEBUG
. Oracle 提供的 MySQL 发布二进制文件不是 使用此选项构建的。程序退出时打印一些调试信息。
仅当 MySQL 是使用
WITH_DEBUG
. Oracle 提供的 MySQL 发布二进制文件不是 使用此选项构建的。程序退出时打印调试信息以及内存和 CPU 使用统计信息。
仅当 MySQL 是使用
WITH_DEBUG
. Oracle 提供的 MySQL 发布二进制文件不是 使用此选项构建的。如果
--comments
给出该选项,mysqldump会在以下形式的转储末尾生成注释:-- Dump completed on DATE
但是,日期会导致在不同时间获取的转储文件看起来不同,即使数据在其他方面是相同的。
--dump-date
并--skip-dump-date
控制日期是否添加到评论中。默认为--dump-date
(在注释中包含日期)。--skip-dump-date
抑制日期打印。即使在表转储过程中发生 SQL 错误,也要继续。
此选项的一个用途是使 mysqldump继续执行,即使遇到因定义引用已删除的表而变得无效的视图。如果没有
--force
,mysqldump将退出并显示一条错误消息。使用--force
, mysqldump会打印错误消息,但它还会将包含视图定义的 SQL 注释写入转储输出并继续执行。通过将它们附加到命名文件来记录警告和错误。默认是不做日志记录。
请参阅
--comments
选项的说明。详细模式。打印有关程序功能的更多信息。
帮助选项
以下选项显示有关 mysqldump命令本身的信息。
国际化选项
以下选项更改 mysqldump命令如何表示具有本地语言设置的字符数据。
安装字符集的目录。请参阅 第 10.15 节,“字符集配置”。
--default-character-set=
charset_name
用作
charset_name
默认字符集。请参阅第 10.15 节,“字符集配置”。如果没有指定字符集, mysqldump使用utf8
.关闭
--set-charset
设置,与指定 相同--skip-set-charset
。写入 输出。默认情况下启用此选项。要禁止该 语句,请使用 .
SET NAMES
default_character_set
SET NAMES
--skip-set-charset
复制选项
mysqldump命令经常用于 在复制配置中的副本服务器上创建空实例或包含数据的实例。以下选项适用于在复制源和副本服务器上转储和恢复数据。
对于使用该
--dump-slave
选项生成的副本转储,在STOP SLAVE
语句前添加CHANGE MASTER TO
语句并START SLAVE
在输出末尾添加语句。PURGE BINARY LOGS
在源复制服务器上,执行转储操作后, 通过向服务器发送语句来删除二进制日志。此选项需要RELOAD
特权以及足以执行该语句的特权。该选项自动启用--master-data
.此选项类似于,
--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
对于
CHANGE MASTER TO
使用选项生成的副本转储中的语句--dump-slave
,添加 副本源的主机名MASTER_HOST
和MASTER_PORT
TCP/IP 端口号的选项。使用此选项转储源复制服务器以生成可用于将另一台服务器设置为源副本的转储文件。它会导致转储输出包含一条
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 @@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 的服务器中,会导致生成不同的事务标识符。
格式选项
以下选项指定如何表示整个转储文件或转储文件中的某些类型的数据。它们还控制是否将某些可选信息写入转储文件。
产生更紧凑的输出。此选项启用
--skip-add-drop-table
、--skip-add-locks
、--skip-comments
、--skip-disable-keys
和--skip-set-charset
选项。生成与其他数据库系统或较旧的 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 注释语法。INSERT
使用包含列名的 完整语句。在语句中包括所有特定于 MySQL 的表选项
CREATE TABLE
。--fields-terminated-by=...
,--fields-enclosed-by=...
,--fields-optionally-enclosed-by=...
,--fields-escaped-by=...
这些选项与 option 一起使用,与 的相应 子句
--tab
具有相同的含义。请参阅 第 13.2.6 节,“加载数据语句”。FIELDS
LOAD DATA
使用十六进制表示法转储二进制列(例如,
'abc'
变成0x616263
)。受影响的数据类型是BINARY
,VARBINARY
,BLOB
types, , 所有空间数据类型,以及与 字符集BIT
一起使用时的其他非二进制数据类型 。binary
该选项与选项一起使用,与 对应的 子句
--tab
意义相同。请参阅 第 13.2.6 节,“加载数据语句”。LINES
LOAD DATA
在字符中引用标识符(例如数据库、表和列名称)
`
。如果ANSI_QUOTES
启用 SQL 模式,则标识符在"
字符内被引用。默认情况下启用此选项。它可以被禁用--skip-quote-names
,但是这个选项应该在任何--compatible
可能启用的选项之后给出--quote-names
。--result-file=
,file_name
-r
file_name
直接输出到命名文件。即使在生成转储时发生错误,也会创建结果文件并覆盖其先前的内容。
此选项应该在 Windows 上使用,以防止换行符
\n
被转换为\r\n
回车/换行符序列。生成制表符分隔的文本格式数据文件。对于每个转储的表,mysqldump创建一个
包含tbl_name
.sqlCREATE TABLE
创建表的语句的文件,并且服务器写入一个
包含其数据的文件。选项值是写入文件的目录。tbl_name
.txt笔记仅当mysqldump与mysqld服务器在同一台机器上运行 时才应使用此选项 。因为服务器
*.txt
在您指定的目录中创建文件,所以该目录必须是服务器可写的,并且您使用的 MySQL 帐户必须具有FILE
权限。因为 mysqldump在同一目录中创建*.sql
,所以它必须对您的系统登录帐户是可写的。默认情况下,
.txt
数据文件的格式是使用列值之间的制表符和每行末尾的换行符。可以使用 和 选项明确指定格式。--fields-
xxx
--lines-terminated-by
列值转换为
--default-character-set
选项指定的字符集。此选项允许
TIMESTAMP
在不同时区的服务器之间转储和重新加载列。mysqldump将其连接时区设置为 UTC 并添加SET TIME_ZONE='+00:00'
到转储文件中。如果没有此选项,TIMESTAMP
列将在源服务器和目标服务器的本地时区转储和重新加载,如果服务器位于不同的时区,这可能会导致值发生变化。--tz-utc
还可以防止由于夏令时而发生的变化。--tz-utc
默认情况下启用。要禁用它,请使用--skip-tz-utc
.将转储输出写入格式正确的 XML。
NULL
、'NULL'
和空值:对于名为 的列column_name
,NULL
值、空字符串和字符串值'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
子句从表数据中过滤行。
转储所有数据库中的所有表。这与
--databases
在命令行上使用选项和命名所有数据库相同。转储几个数据库。通常, mysqldump将命令行上的第一个名称参数视为数据库名称,将后面的名称视为表名。使用此选项,它将所有名称参数视为数据库名称。
CREATE DATABASE
和USE
语句包含在每个新数据库之前的输出中。此选项可用于转储
INFORMATION_SCHEMA
和performance_schema
数据库,即使使用该--all-databases
选项通常也不会转储。(也使用该--skip-lock-tables
选项。)在输出中包括转储数据库的事件计划程序事件。此选项需要
EVENT
这些数据库的权限。通过使用
--events
containsCREATE EVENT
语句创建事件而生成的输出。但是,这些语句不包括事件创建和修改时间戳等属性,因此在重新加载事件时,创建的时间戳等于重新加载时间。如果您需要使用其原始时间戳属性创建事件,请不要使用
--events
. 相反,mysql.event
使用对数据库具有适当权限的 MySQL 帐户直接转储并重新加载表 的内容mysql
。--ignore-table=
db_name.tbl_name
不要转储给定的表,该表必须使用数据库名和表名指定。要忽略多个表,请多次使用此选项。此选项也可用于忽略视图。
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).Include stored routines (procedures and functions) for the dumped databases in the output. This option requires the
SELECT
privilege for themysql.proc
table.The output generated by using
--routines
containsCREATE PROCEDURE
andCREATE 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 themysql.proc
table directly, using a MySQL account that has appropriate privileges for themysql
database.Override the
--databases
or-B
option. mysqldump regards all name arguments following the option as table names.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.
For those nontransactional tables that support the
INSERT DELAYED
syntax, use that statement rather than regularINSERT
statements.As of MySQL 5.6.6,
DELAYED
inserts are deprecated; expect this option to be removed in a future release.For each table, surround the
INSERT
statements with/*!40000 ALTER TABLE
andtbl_name
DISABLE KEYS */;/*!40000 ALTER TABLE
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 oftbl_name
ENABLE KEYS */;MyISAM
tables.Write
INSERT
statements using multiple-row syntax that includes severalVALUES
lists. This results in a smaller dump file and speeds up inserts when the file is reloaded.Write
INSERT IGNORE
statements rather thanINSERT
statements.The maximum size of the buffer for client/server communication. The default is 24MB, the maximum is 1GB.
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 servernet_buffer_length
system variable has a value at least this large.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 ofmysqldump
option groups for information about selectively enabling or disabling a subset of the options affected by--opt
.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.
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.
Surround each table dump with
LOCK TABLES
andUNLOCK TABLES
statements. This results in faster inserts when the dump file is reloaded. See Section 8.2.4.1, “Optimizing INSERT Statements”.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 byFLUSH 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
.Add a
FLUSH PRIVILEGES
statement to the dump output after dumping themysql
database. This option should be used any time the dump contains themysql
database and any other database that depends on the data in themysql
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 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
.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 ofMyISAM
tables. For transactional tables such asInnoDB
,--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.Enclose the
INSERT
statements for each dumped table withinSET autocommit = 0
andCOMMIT
statements.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 anInnoDB
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.This option sets the transaction isolation mode to
REPEATABLE READ
and sends aSTART TRANSACTION
SQL statement to the server before dumping data. It is useful only with transactional tables such asInnoDB
, because then it dumps the consistent state of the database at the time whenSTART 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, anyMyISAM
orMEMORY
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 theSELECT
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 becauseLOCK 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”.
To select the effect of
--opt
except for some features, use the--skip
option for each feature. To disable extended inserts and memory buffering, use--opt
--skip-extended-insert
--skip-quick
. (Actually,--skip-extended-insert
--skip-quick
is sufficient because--opt
is on by default.)To reverse
--opt
for all features except index disabling and table locking, use--skip-opt
--disable-keys
--lock-tables
.
Restrictions
默认情况下, mysqldump不会转储
INFORMATION_SCHEMA
或
performance_schema
数据库。要转储其中任何一个,请在命令行上明确命名。您也可以使用
--databases
选项命名它。另外,使用该
--skip-lock-tables
选项。
mysqldump不会转储 NDB Cluster
ndbinfo
信息数据库。
如果由于权限不足而在备份视图时遇到问题,请参阅第 20.9 节“视图限制”以获取解决方法。