4.5.4 mysqldump - 数据库备份程序
所述的mysqldump的客户实用程序执行 逻辑备份,产生一组能够被执行以再现原始数据库对象定义和表数据的SQL语句。它会转储一个或多个MySQL的数据库以备份或传输到另一台SQL服务器。所述的mysqldump的 命令也可以生成CSV输出,其他分隔符的文本或XML格式。
mysqldump至少需要SELECT
转储表,SHOW VIEW
转储视图,TRIGGER
转储触发器以及未使用LOCK TABLES
该 --single-transaction
选项的 权限。某些选项可能需要其他权限,如选项说明中所述。
要重新加载转储文件,您必须具有执行其包含的语句所需的权限,例如CREATE
由这些语句创建的对象的适当 特权。
mysqldump输出可以包含 ALTER DATABASE
更改数据库排序规则的语句。转储存储的程序以保留字符编码时可以使用这些字符。要重新加载包含这些语句的转储文件,ALTER
需要受影响的数据库的 特权。
在Windows上使用PowerShell进行的具有输出重定向的转储会创建一个具有UTF-16编码的文件:
shell> mysqldump [options] > dump.sql
但是,UTF-16不允许用作连接字符集(请参见第10.4节“连接字符集和归类”),因此转储文件将无法正确加载。要解决此问题,请使用--result-file
以ASCII格式创建输出的 选项:
shell> mysqldump [options] --result-file=dump.sql
性能和可伸缩性注意事项
mysqldump
优点包括在恢复之前查看甚至编辑输出的便利性和灵活性。您可以克隆用于开发和DBA工作的数据库,或者为测试生成现有数据库的轻微变体。它不是用作备份大量数据的快速或可扩展解决方案。对于较大的数据大小,即使备份步骤需要一段合理的时间,恢复数据也可能非常缓慢,因为重播SQL语句涉及用于插入的磁盘I / O,索引创建等。
对于大规模备份和恢复, 物理备份更适合将数据文件复制为可以快速恢复的原始格式:
如果您的表主要是
InnoDB
表,或者如果您有多个表InnoDB
和MyISAM
表,请考虑使用MySQL企业备份产品的 mysqlbackup命令。(作为企业订阅的一部分提供)。它InnoDB
以最小的中断提供最佳的备份性能; 它也可以备份来自MyISAM
其他存储引擎的表格 ; 它提供了许多方便的选项来适应不同的备份方案。请参见 第30.2节“MySQL企业备份概述”。
mysqldump可以逐行检索和转储表内容,或者可以从表中检索整个内容并在转储之前将其缓存在内存中。如果您倾销大型表格,内存中的缓冲可能会成为问题。要逐行转储表,请使用--quick
选项(或 --opt
,启用 --quick
)。该 --opt
选项(因此 --quick
)默认启用,因此要启用内存缓冲,请使用 --skip-quick
。
如果您正在使用最新版本的 mysqldump生成要重新加载到非常旧的MySQL服务器的转储,请使用该 --skip-opt
选项而不是--opt
或 --extended-insert
选项。
有关mysqldump的更多信息,请参见第7.4节“使用mysqldump进行备份”。
调用语法
通常有三种方法可以使用 mysqldump--为了转储一组一个或多个表,一组一个或多个完整数据库或整个MySQL服务器 - 如下所示:
shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases
要转储整个数据库,请不要命名以下任何表 db_name
,或使用 --databases
或 --all-databases
选项。
要查看您的mysqldump版本支持的选项列表 ,请发出命令 mysqldump --help。
选项语法 - 按字母顺序汇总
的mysqldump支持下面的选项,可以在命令行或在指定 [mysqldump]
与[client]
一个选项文件的组。有关MySQL程序使用的选项文件的信息,请参见第4.2.6节“使用选项文件”。
表4.11 mysqldump选项
格式 | 描述 | 介绍 | 删除 |
---|---|---|---|
--add降数据库 | 在每个CREATE DATABASE语句之前添加DROP DATABASE语句 | ||
--add-drop-table在 | 在每个CREATE TABLE语句之前添加DROP TABLE语句 | ||
--add跌落触发 | 在每个CREATE TRIGGER语句前添加DROP TRIGGER语句 | ||
--add锁 | 用LOCK TABLES和UNLOCK TABLES语句环绕每个表转储 | ||
- 全数据库 | 转储所有数据库中的所有表 | ||
--allow-关键字 | 允许创建作为关键字的列名称 | ||
--apply - 从语句 | 在CHANGE MASTER语句之前包含STOP SLAVE,并在输出结束时包含START SLAVE | ||
--bind地址 | 使用指定的网络接口连接到MySQL服务器 | ||
--character集-DIR | 安装字符集的目录 | ||
--column统计 | 编写ANALYZE TABLE语句以生成统计数据直方图 | 8.0.2 | |
- 注释 | 添加注释到转储文件 | ||
- 紧凑 | 产生更紧凑的输出 | ||
- 兼容 | 生成与其他数据库系统或旧版MySQL服务器更兼容的输出 | ||
--complete-插入 | 使用包含列名称的完整INSERT语句 | ||
- 压缩 | 压缩客户端和服务器之间发送的所有信息 | ||
--create选项 | 在CREATE TABLE语句中包含所有MySQL特定的表选项 | ||
--databases | 将所有名称参数解释为数据库名称 | ||
--debug | 编写调试日志 | ||
--debug检查 | 程序退出时打印调试信息 | ||
- 调试信息 | 打印程序退出时的调试信息,内存和CPU统计信息 | ||
--default-AUTH | 身份验证插件使用 | ||
--default-字符集 | 指定默认字符集 | ||
--defaults-额外文件 | 除了通常的选项文件外,还可以读取已命名的选项 | ||
--defaults文件 | 只读取命名的选项文件 | ||
--defaults基团的后缀 | 选项组后缀值 | ||
--delete-主日志 | 在主复制服务器上,执行转储操作后删除二进制日志 | ||
- 禁用键 | 对于每个表,使用语句环绕INSERT语句以禁用和启用键 | ||
自卸日期 | 如果给出--comments,则将转储日期包含为“转储已完成”注释 | ||
自卸奴隶 | 包含列出从站主站的二进制日志坐标的CHANGE MASTER语句 | ||
--enable-明文-插件 | 启用明文身份验证插件 | ||
--events | 转储来自转储数据库的事件 | ||
--extended-插入 | 使用多行INSERT语法 | ||
--fields封闭逐 | 此选项与--tab选项一起使用,其含义与LOAD DATA INFILE的相应子句相同 | ||
--fields转义,由 | 此选项与--tab选项一起使用,其含义与LOAD DATA INFILE的相应子句相同 | ||
--fields-任选封闭逐 | 此选项与--tab选项一起使用,其含义与LOAD DATA INFILE的相应子句相同 | ||
--fields封端逐 | 此选项与--tab选项一起使用,其含义与LOAD DATA INFILE的相应子句相同 | ||
--flush-日志 | 在启动转储之前刷新MySQL服务器日志文件 | ||
--flush-特权 | 转储mysql数据库后发出FLUSH PRIVILEGES语句 | ||
- 力 | 即使在表转储期间发生SQL错误,也要继续 | ||
--get-服务器的公钥 | 从服务器请求RSA公钥 | 8.0.3 | |
- 帮帮我 | 显示帮助信息并退出 | ||
--hex二进制大对象 | 使用十六进制符号转储二进制列 | ||
- 主办 | 主机连接到(IP地址或主机名) | ||
- 忽略错误 | 忽略指定的错误 | ||
- 忽略表 | 不要倾倒给定的桌子 | ||
--include主主机端口 | 在使用--dump-slave生成的CHANGE MASTER语句中包含MASTER_HOST / MASTER_PORT选项 | ||
--insert,忽视 | 写入INSERT IGNORE而不是INSERT语句 | ||
--lines封端逐 | 此选项与--tab选项一起使用,其含义与LOAD DATA INFILE的相应子句相同 | ||
--lock-全表 | 锁定所有数据库的所有表 | ||
--lock桌 | 在转储它们之前锁定所有表格 | ||
--log错误 | 将警告和错误附加到指定文件 | ||
--login路径 | 阅读.mylogin.cnf中的登录路径选项 | ||
- 主要的数据 | 将二进制日志文件的名称和位置写入输出 | ||
--max_allowed_packet | 发送到服务器或从服务器接收的最大数据包长度 | ||
--net_buffer_length | TCP / IP和套接字通信的缓冲区大小 | ||
--network超时 | 增加网络超时以允许更大的表转储 | 8.0.1 | |
--no-自动提交 | 在SET autocommit = 0和COMMIT语句中为每个转储表包含INSERT语句 | ||
--no创建-DB | 不要编写CREATE DATABASE语句 | ||
--no创建-信息 | 不要编写重新创建每个转储表的CREATE TABLE语句 | ||
- 没有数据 | 不要转储表格内容 | ||
--no-默认 | 不读取任何选项文件 | ||
--no-设置名称 | 与--skip-set-charset相同 | ||
--no-表空间 | 不要在输出中写入任何CREATE LOGFILE GROUP或CREATE TABLESPACE语句 | ||
- 选择 | --add-drop-table的简写--add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset。 | ||
--order逐主 | 转储按主键排序的每个表的行,或按其第一个唯一索引排序 | ||
- 密码 | 连接到服务器时使用的密码 | ||
- 管 | 在Windows上,使用命名管道连接到服务器 | ||
--plugin-DIR | 安装插件的目录 | ||
- 港口 | 用于连接的TCP / IP端口号 | ||
--print-默认 | 打印默认选项 | ||
- 协议 | 使用连接协议 | ||
- 快 | 一次从行中的服务器检索表的行 | ||
--quote-名 | 在倒退字符中引用标识符 | ||
- 更换 | 编写REPLACE语句而不是INSERT语句 | ||
- 结果文件 | 直接输出到给定的文件 | ||
--routines | 从转储的数据库中转储存储的例程(过程和函数) | ||
--secure-auth的 | 不要以旧(4.1以前)格式向服务器发送密码 | 8.0.3 | |
--server-公钥路径 | 包含RSA公钥的文件的路径名称 | 8.0.4 | |
--set-字符集 | 将SET NAMES default_character_set添加到输出 | ||
--set-GTID,清除 | 是否添加SET @@ GLOBAL.GTID_PURGED输出 | ||
--shared存储器碱基名 | 用于共享内存连接的共享内存的名称 | ||
--single事务 | 在从服务器转储数据之前发出BEGIN SQL语句 | ||
--skip-分插表 | 不要在每个CREATE TABLE语句之前添加DROP TABLE语句 | ||
--skip-添加锁 | 不要添加锁 | ||
--skip-评论 | 不要将注释添加到转储文件 | ||
--skip-紧凑 | 不要产生更紧凑的输出 | ||
--skip-禁用密钥 | 不要禁用密钥 | ||
--skip扩展嵌 | 关闭扩展插入 | ||
--skip-OPT | 关闭由--opt设置的选项 | ||
--skip-快 | 不要每次从一行中的服务器检索表的行 | ||
--skip-引号名 | 不要引用标识符 | ||
--skip-设置字符集 | 不要写入SET NAMES语句 | ||
--skip-触发器 | 不要倾倒触发器 | ||
--skip-TZ-UTC | 关掉tz-utc | ||
- 插座 | 用于连接到localhost,要使用的Unix套接字文件 | ||
--ssl-CA | 包含可信SSL证书颁发机构列表的文件 | ||
--ssl-capath | 包含可信SSL证书颁发机构证书文件的目录 | ||
--ssl证书 | 包含X509证书的文件 | ||
--ssl-密码 | 允许连接加密的密码列表 | ||
--ssl-CRL | 包含证书吊销列表的文件 | ||
--ssl-crlpath | 包含证书撤销列表文件的目录 | ||
--ssl键 | 包含X509密钥的文件 | ||
--ssl模式 | 连接到服务器的安全状态 | ||
- 标签 | 生成制表符分隔的数据文件 | ||
--tables | 覆盖 - 数据库或-B选项 | ||
--tls版本 | 允许加密连接的协议 | ||
--triggers | 每个转储表的转储触发器 | ||
--tz-UTC | 添加SET TIME_ZONE ='+ 00:00'转储文件 | ||
- 用户 | 连接到服务器时使用的MySQL用户名 | ||
--verbose | 详细模式 | ||
- 版 | 显示版本信息并退出 | ||
- 哪里 | 仅转储由给定的WHERE条件选择的行 | ||
--xml | 生成XML输出 |
连接选项
该mysqldump的命令登录到一个MySQL服务器提取信息。以下选项指定如何连接到MySQL服务器,无论是在同一台机器上还是远程系统上。
在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。
压缩客户端和服务器之间发送的所有信息(如果两者均支持压缩)。
关于使用客户端身份验证插件的提示。请参见第6.3.10节“可插入认证”。
启用
mysql_clear_password
明文身份验证插件。(请参见 第6.5.1.4节“客户端明文可插入验证”。)从服务器请求基于RSA密钥对的密码交换所需的公钥。此选项适用于使用
caching_sha2_password
身份验证插件进行身份验证的客户端 。对于那个插件,除非请求,服务器不会发送公钥。对于不使用该插件进行身份验证的帐户,此选项将被忽略。如果不使用基于RSA的密码交换,它也会被忽略,例如当客户端使用安全连接连接到服务器时。如果 给出并指定了有效的公钥文件,则优先于 。
--server-public-key-path=
file_name
--get-server-public-key
有关该
caching_sha2_password
插件的信息 ,请参见 第6.5.1.3节“缓存SHA-2可插入验证”。--host=
,host_name
-h
host_name
从给定主机上的MySQL服务器转储数据。默认主机是
localhost
。从
.mylogin.cnf
登录路径文件中的指定登录路径读取选项 。阿 “ 登录路径 ”是含有指定要连接到哪个MySQL服务器和选项哪个帐户作为认证选项组。要创建或修改登录路径文件,请使用 mysql_config_editor实用程序。请参见 第4.6.7节“ mysql_config_editor - MySQL配置实用程序”。通过将大表设置
max_allowed_packet
为最大值并将网络读取和写入超时设置为较大值来启用大型表 。该选项默认启用。要禁用它,请使用--skip-network-timeout
。--password[=
,password
]-p[
password
]连接到服务器时使用的密码。如果使用short option form(
-p
), 则在选项和密码之间不能有空格。如果您省略命令行中password
的--password
或-p
选项后面的 值 ,则mysqldump会提示输入一个值。在命令行中指定密码应被视为不安全。请参见 第6.1.2.1节“密码安全的最终用户指南”。您可以使用选项文件来避免在命令行上输入密码。
在Windows上,使用命名管道连接到服务器。该选项仅适用于服务器支持命名管道连接的情况。
在其中查找插件的目录。如果该
--default-auth
选项用于指定身份验证插件,但是 mysqldump未找到该选项,请指定此选项 。请参见 第6.3.10节“可插入认证”。用于连接的TCP / IP端口号。
--protocol={TCP|SOCKET|PIPE|MEMORY}
用于连接到服务器的连接协议。当其他连接参数通常会导致使用的协议不是您想要的协议时,这很有用。有关允许值的详细信息,请参见 第4.2.2节“连接到MySQL服务器”。
这个选项在MySQL 8.0.3中被删除。
--server-public-key-path=
file_name
包含客户端副本的文件的路径名,该副本是服务器为基于RSA密钥对的密码交换所需的。该文件必须采用PEM格式。该选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端 。对于未使用其中一个插件进行身份验证的帐户,此选项将被忽略。如果不使用基于RSA的密码交换,它也会被忽略,例如当客户端使用安全连接连接到服务器时。如果 给出并指定了有效的公钥文件,则优先于 。
--server-public-key-path=
file_name
--get-server-public-key
因为
sha256_password
,只有在使用OpenSSL构建MySQL时,此选项才适用。有关这些
sha256_password
和caching_sha2_password
插件的信息,请参见 第6.5.1.2节“SHA-256可插入验证”和 第6.5.1.3节“缓存SHA-2可插入验证”。连接到
localhost
要使用的Unix套接字文件,或在Windows上使用命名管道的名称。开头的选项
--ssl
指定是否使用SSL连接到服务器,并指出在哪里可以找到SSL密钥和证书。请参见 第6.4.2节“加密连接的命令选项”。客户端允许的加密连接协议。该值是一个包含一个或多个协议名称的逗号分隔列表。可以为这个选项命名的协议取决于用于编译MySQL的SSL库。有关详细信息,请参见 第6.4.6节“加密连接协议和密码”。
--user=
,user_name
-u
user_name
连接到服务器时使用的MySQL用户名。
您还可以使用 语法来设置以下变量 : --
var_name
=value
客户端/服务器通信的最大缓冲区大小。默认值是24MB,最大值是1GB。
用于客户端/服务器通信的缓冲区的初始大小。在创建多行
INSERT
语句时(与--extended-insert
or--opt
选项一样), mysqldump创建长达net_buffer_length
字节的行 。如果你增加这个变量,确保MySQL服务器net_buffer_length
系统变量的值至少有这么大。
选项 - 文件选项
这些选项用于控制要读取的选项文件。
--defaults-extra-file=
file_name
在全局选项文件之后读取此选项文件,但在用户选项文件之前(在Unix上)。如果文件不存在或无法访问,则会发生错误。
file_name
如果作为相对路径名而非完整路径名给出,则相对于当前目录进行解释。只使用给定的选项文件。如果文件不存在或无法访问,则会发生错误。
file_name
如果作为相对路径名而非完整路径名给出,则相对于当前目录进行解释。例外:即使
--defaults-file
读取客户端程序.mylogin.cnf
。不仅要阅读常用选项组,还要阅读具有常用名称和后缀的组
str
。例如, mysqldump通常读取[client]
和[mysqldump]
组。如果--defaults-group-suffix=_other
给出选项,mysqldump也会读取[client_other]
和[mysqldump_other]
组。不要阅读任何选项文件。如果由于从选项文件读取未知选项而导致程序启动失败,
--no-defaults
可用于防止读取它们。例外是
.mylogin.cnf
在任何情况下读取文件(如果存在)。这允许以比使用命令行更安全的方式来指定密码,即使在--no-defaults
使用时 也是如此。(.mylogin.cnf
由mysql_config_editor实用程序创建, 请参见 第4.6.7节“ mysql_config_editor - MySQL配置实用程序”。)打印程序名称以及从选项文件中获取的所有选项。
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的输出中。该选项目前仅与MySQL Cluster表相关,MySQL表不支持MySQL 8.0。CREATE DATABASE
如果给出--databases
or--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
程序退出时打印一些调试信息。
在程序退出时打印调试信息和内存以及CPU使用情况统计信息。
如果
--comments
给出该选项,则mysqldump在以下形式的转储结尾处生成注释:-- Dump completed on DATE
但是,日期导致在不同时间采集的转储文件看起来不同,即使数据在其他方面是相同的。
--dump-date
并--skip-dump-date
控制是否将日期添加到评论中。默认值是--dump-date
(在评论中包括日期)。--skip-dump-date
禁止日期打印。忽略所有错误; 即使在表转储期间发生SQL错误也会继续。
此选项的一个用途是使 mysqldump继续执行,即使它遇到由于定义引用已删除的表而导致无效的视图。没有
--force
,mysqldump退出并显示错误消息。使用时--force
,mysqldump会输出错误消息,但它也会将包含视图定义的SQL注释写入转储输出并继续执行。如果
--ignore-error
还选择忽略特定错误的选项,--force
则优先。通过将警告和错误附加到指定文件来记录警告和错误。默认是不做记录。
请参阅该
--comments
选项的说明 。详细模式。打印关于该程序的更多信息。
帮助选项
以下选项显示有关 mysqldump命令本身的信息。
国际化选项
以下选项更改mysqldump命令如何 用国家语言设置表示字符数据。
安装字符集的目录。请参见 第10.14节“字符集配置”。
--default-character-set=
charset_name
使用
charset_name
作为默认字符集。请参见第10.14节“字符集配置”。如果没有指定字符集, 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
执行转储操作后,通过向服务器发送语句来删除二进制日志。该选项自动启用--master-data
。此选项类似,
--master-data
不同之处在于它用于转储复制从属服务器以生成转储文件,该转储文件可用于将另一台服务器设置为与转储服务器具有相同主服务器的从服务器。它会导致转储输出包含一条CHANGE MASTER TO
语句,该 语句指示被转储的从站主站的二进制日志坐标(文件名和位置)。该CHANGE MASTER TO
语句读取的值Relay_Master_Log_File
,并Exec_Master_Log_Pos
从SHOW SLAVE STATUS
输出,并使用他们MASTER_LOG_FILE
和MASTER_LOG_POS
分别。这些是主机应从其开始复制的主服务器坐标。注意来自中继日志的已执行事务序列中的不一致可能导致使用错误的位置。有关 更多信息,请参见 第18.4.1.34节“复制和事务不一致性”。
--dump-slave
导致使用主站的坐标而不是转储服务器的坐标,如--master-data
选件所做的那样 。此外,指定此选项会导致该--master-data
选项被覆盖(如果使用)并被有效忽略。警告不应该使用这个选项,如果要应用的用途,其中转储会在服务器
gtid_mode=ON
和MASTER_AUTOPOSITION=1
。选项值的处理方式与for相同
--master-data
(设置没有值或1会导致将CHANGE MASTER TO
语句写入转储,设置2会导致语句被写入但包含在SQL注释中),并具有与--master-data
启用或禁用其他选项以及如何处理锁定。该选项会导致mysqldump在转储之前停止从属SQL线程,并在之后重新启动它。
会同
--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。此选项要求
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,则向输出添加语句。来自使用基于GTID的复制的服务器的部分转储需要
--set-gtid-purged={ON|OFF}
指定该 选项。使用ON
如果目的是部署只使用了一些来自倾倒服务器的数据的新的复制奴隶。OFF
如果打算通过在拓扑中复制表来修复表格,请使用 此选项。OFF
如果意图是在不相交的复制拓扑之间复制表并且将保持如此用途,请使用此选项。--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
),则会将其添加到输出中。
注意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服务器更兼容的输出。从MySQL 8.0.11开始,此选项的唯一允许值是
ansi
,它与用于设置服务器SQL模式的对应选项具有相同的含义。请参见第5.1.8节“服务器SQL模式”。使用
INSERT
包含列名的完整语句。在
CREATE TABLE
语句中包含所有MySQL特定的表格选项 。--fields-terminated-by=...
,--fields-enclosed-by=...
,--fields-optionally-enclosed-by=...
,--fields-escaped-by=...
这些选项与选项一起使用,
--tab
并且与相应的FIELDS
条款具有相同的含义LOAD DATA INFILE
。请参见第13.2.7节“LOAD DATA INFILE语法”。使用十六进制符号转储二进制列(例如,
'abc'
变为0x616263
)。受影响的数据类型BINARY
,VARBINARY
的BLOB
类型和BIT
。该选项与该
--tab
选项一起使用,其 含义与相应的LINES
子句相同LOAD DATA INFILE
。请参见第13.2.7节“LOAD DATA INFILE语法”。引用
`
字符中的标识符(例如数据库,表格和列名称)。如果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名称空间,如下所示:
shell> 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
在命令行中使用该选项并命名所有数据库相同。在此之前的MySQL 8.0中,
--routines
并--events
为选项 的mysqldump和 mysqlpump不要求使用时,包括存储例程和事件--all-databases
选项:转储包括mysql
系统数据库,因此也mysql.proc
和mysql.event
表包含存储程序和事件定义。从MySQL 8.0开始,mysql.event
和mysql.proc
表格不被使用。相应对象的定义存储在数据字典表中,但这些表不会被转储。要将存储的例程和事件包含在使用的转储中--all-databases
,请明确使用--routines
和--events
选项。转储几个数据库。通常, mysqldump将命令行中的名字参数视为数据库名称,后面的名称作为表名称。使用此选项,它将所有名称参数视为数据库名称。
CREATE DATABASE
并USE
在每个新数据库之前的输出中包含语句。该选项可用于转储
performace_schema
数据库,即使使用该--all-databases
选项,通常也不会转储该 数据库 。(也使用该--skip-lock-tables
选项。)在输出中包含转储数据库的事件调度程序事件。该选项需要
EVENT
这些数据库的 特权。使用生成的输出
--events
包含CREATE EVENT
用于创建事件的语句。--ignore-error=
error[,error]...
忽略指定的错误。选项值是以逗号分隔的错误编号列表,指定mysqldump执行期间要忽略的错误。如果
--force
还选择忽略所有错误,--force
则优先。--ignore-table=
db_name.tbl_name
不要转储给定的表,它必须使用数据库名和表名来指定。要忽略多个表格,请多次使用此选项。这个选项也可以用来忽略视图。
不要写任何表行信息(即不要转储表内容)。如果要仅转储
CREATE TABLE
表的语句(例如,通过加载转储文件来创建表的空副本),这非常有用 。在输出中包含转储数据库的存储例程(过程和函数)。该选项需要全局
SELECT
特权。使用生成的输出
--routines
包含CREATE PROCEDURE
和CREATE FUNCTION
语句来创建例程。覆盖
--databases
或-B
选项。mysqldump 将选项后面的所有名称参数视为表名。在输出中包含每个转储表的触发器。该选项默认启用; 禁用它
--skip-triggers
。为了能够转储表的触发器,您必须拥有
TRIGGER
该表的 特权。多个触发器是允许的。 mysqldump以激活顺序转储触发器,以便在重新加载转储文件时,以相同的激活顺序创建触发器。但是,如果 mysqldump转储文件包含具有相同触发事件和操作时间的表的多个触发器,则会尝试将转储文件加载到不支持多个触发器的较旧服务器时发生错误。(有关解决方法,请参见 第2.10.2.1节“影响从MySQL 8.0降级的更改” ;您可以将触发器转换为与旧服务器兼容。)
--where='
,where_condition
'-w '
where_condition
'仅转储给定
WHERE
条件所选的行 。如果条件中包含对命令解释器特殊的空格或其他字符,则该条件是强制性的。例子:
--where="user='jimf'" -w"userid>1" -w"userid<1"
性能选项
以下选项与恢复操作的性能最相关。对于大型数据集,恢复操作(处理INSERT
转储文件中的语句)是最耗时的部分。在急需恢复数据时,提前计划和测试该阶段的性能。对于以小时计量的恢复时间,您可能更愿意使用其他备份和恢复解决方案,如MySQL Enterprise Backup for InnoDB
-only和混合使用数据库。
性能也受交易选项的影响 ,主要用于转储操作。
ANALYZE TABLE
在重新加载转储文件时,将语句 添加到输出以生成转储表的直方图统计信息。此选项在默认情况下处于禁用状态,因为大型表格的直方图生成可能需要很长时间。对于每个表,围绕
INSERT
语句 和语句。这使得加载转储文件的速度更快,因为索引是在所有行插入后创建的。该选项仅对表格的非唯一索引有效。/*!40000 ALTER TABLE
tbl_name
DISABLE KEYS */;/*!40000 ALTER TABLE
tbl_name
ENABLE KEYS */;MyISAM
INSERT
使用包含多个VALUES
列表的多行语法 编写语句 。这会导致更小的转储文件并在重新加载文件时加快插入速度。编写
INSERT IGNORE
语句而不是INSERT
语句。此选项默认启用,是组合的简写 。它提供了一个快速转储操作,并生成一个可以快速重新加载到MySQL服务器的转储文件。
--add-drop-table
--add-locks
--create-options
--disable-keys
--extended-insert
--lock-tables
--quick
--set-charset
由于该
--opt
选项默认启用,因此只能指定其选项,--skip-opt
以关闭几个默认设置。有关选择性启用或禁用受影响选项的子集的信息, 请参阅mysqldump
选项组的讨论--opt
。此选项对于转储大型表格很有用。它强制 mysqldump每次从服务器的行中检索表的行,而不是在将其写出之前检索整个行集并将其缓存在内存中。
请参阅该
--opt
选项的说明 。
交易选项
以下选项会对转储操作的性能与导出数据的可靠性和一致性进行权衡。
使用
LOCK TABLES
和UNLOCK TABLES
语句环绕每个表转储。这会在转储文件重新加载时导致更快的插入。请参见 第8.2.5.1节“优化INSERT语句”。在开始转储之前刷新MySQL服务器日志文件。该选项需要
RELOAD
特权。如果将此选项与该--all-databases
选项结合使用 ,则会为每个转储的数据库刷新日志。例外情况是使用--lock-all-tables
,,--master-data
或--single-transaction
:在这种情况下,日志只刷新一次,对应于所有表被锁定的时刻FLUSH TABLES WITH READ LOCK
。如果你希望你的转储和刷新日志到恰好在同一时刻发生,你应该使用--flush-logs
同在一起--lock-all-tables
,--master-data
或--single-transaction
。FLUSH PRIVILEGES
转储mysql
数据库后, 将语句添加到转储输出 。只要转储包含mysql
数据库和任何其他依赖于数据库中数据的mysql
数据库以进行正确恢复,就应该使用此选项。注意对于从旧版本升级到MySQL 5.7.2或更高版本,请勿使用
--flush-privileges
。有关这种情况下的升级说明,请参见 第2.10.1.2节“影响升级到MySQL 8.0的更改”。锁定所有数据库的所有表。这是通过获取整个转储期间的全局读锁来实现的。该选项会自动关闭
--single-transaction
并--lock-tables
。对于每个转储的数据库,锁定所有要转储的表之前进行转储。表被锁定
READ LOCAL
以允许在MyISAM
表格的情况下同时插入。对于像这样的事务表而言InnoDB
,--single-transaction
是一个更好的选择,--lock-tables
因为它根本不需要锁定表。由于分别
--lock-tables
锁定每个数据库的表,因此此选项不保证转储文件中的表在逻辑上与数据库之间保持一致。不同数据库中的表可能会以完全不同的状态倾倒。一些选项,如
--opt
自动启用--lock-tables
。如果您想覆盖此--skip-lock-tables
选项,请使用选项列表的末尾。如果存在这样的索引,请转储按主键排序的每个表的行,或按其第一个唯一索引排序。在将
MyISAM
表加载到InnoDB
表中时这很有用,但是使转储操作花费更长时间。--shared-memory-base-name=
name
在Windows上,使用共享内存名称,用于使用共享内存连接到本地服务器。默认值是
MYSQL
。共享内存名称区分大小写。必须启动服务器,
--shared-memory
并启用共享内存连接选项。此选项将事务隔离模式设置为
REPEATABLE READ
并START TRANSACTION
在转储数据之前将SQL语句发送到服务器。它仅适用于诸如事务性表格InnoDB
,因为它在START TRANSACTION
发布时不会阻塞任何应用程序就会转储数据库的一致状态 。使用此选项时,请记住只有
InnoDB
表格以一致的状态倾倒。例如,在使用此选项时转储的任何表MyISAM
或MEMORY
表可能仍会更改状态。虽然
--single-transaction
转储过程,以确保有效的转储文件(正确的表的内容和二进制日志坐标),没有其他的连接应使用以下语句:ALTER TABLE
,CREATE TABLE
,DROP TABLE
,RENAME TABLE
,TRUNCATE TABLE
。一致的读取并不是与这些语句隔离的,因此在转储的表上使用它们会导致SELECT
由mysqldump执行的 读取表中的内容以获取不正确的内容或失败。该
--single-transaction
选项和--lock-tables
选项是相互排斥的,因为LOCK TABLES
会导致任何未决事务隐式提交。要转储大型表格,请将
--single-transaction
选项与--quick
选项结合 使用 。
选项组
当您有选择地启用或禁用组选项的效果时,顺序非常重要,因为选项首先被处理。例如, 没有预期的效果; 它 本身就是一样的。 --disable-keys
--lock-tables
--skip-opt
--skip-opt
例子
要对整个数据库进行备份:
shell> mysqldump db_name > backup-file.sql
要将转储文件加载回服务器:
shell> mysql db_name < backup-file.sql
重新加载转储文件的另一种方法是:
shell> mysql -e "source /path-to-backup/backup-file.sql" db_name
通过将数据从一台MySQL服务器复制到另一台服务器, mysqldump对于填充数据库也非常有用:
shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
您可以使用一个命令来转储多个数据库:
shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
要转储所有数据库,请使用以下 --all-databases
选项:
shell> mysqldump --all-databases > all_databases.sql
对于InnoDB
表, mysqldump提供了一种进行在线备份的方法:
shell> mysqldump --all-databases --master-data --single-transaction > all_databases.sql
此备份FLUSH TABLES WITH READ LOCK
在转储的开始处获取所有表(使用)上的全局读取锁定 。一旦获得该锁,就会读取二进制日志坐标并释放锁。如果在FLUSH
发布语句时长时间更新语句正在运行 ,MySQL服务器可能会停滞,直到这些语句完成。之后,转储变为锁定空闲状态,不会干扰读取和写入表格。如果MySQL服务器接收到的更新语句很短(就执行时间而言),即使进行了许多更新,初始锁定期也不应该引起注意。
对于时间点恢复(也称为 “前滚 ”,当您需要恢复旧备份并重放自该备份以来发生的更改时),旋转二进制日志通常很有用(请参见 第5.4节)。 4,“二进制日志”)或至少知道转储对应的二进制日志坐标:
shell> mysqldump --all-databases --master-data=2 > all_databases.sql
要么:
shell> mysqldump --all-databases --flush-logs --master-data=2
> all_databases.sql
在--master-data
和 --single-transaction
选项可以同时使用,其提供了一个方便的方法,使在线备份适于在使用前以指向-in-time恢复如果表被使用所存储的 InnoDB
存储引擎。北大青鸟
有关进行备份的更多信息,请参见 第7.2节“数据库备份方法”和 第7.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的所有游戏用于重新创建³³ 数据库转储general_log
状语从句: slow_query_log
表的 语句 mysql
。日志表内容不会被转储。
如果由于权限不足而导致备份视图时遇到问题,参阅请第C.5节“对视图的限制” 以获得解决方法。学什么技术好