所述的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作为连接字符集(请参阅 不允许的客户端字符集),因此转储文件将无法正确加载。要解决此问题,请使用--result-file以ASCII格式创建输出的选项:
shell> mysqldump [options] --result-file=dump.sql
性能和可伸缩性注意事项
mysqldump优点包括在恢复之前查看甚至编辑输出的便利性和灵活性。您可以克隆数据库以进行开发和DBA工作,或者生成现有数据库的轻微变体以进行测试。它不是用于备份大量数据的快速或可扩展的解决方案。对于大数据大小,即使备份步骤花费了合理的时间,恢复数据也会非常慢,因为重放SQL语句涉及用于插入,索引创建等的磁盘I / O.
对于大规模备份和还原, 物理备份更合适,以原始格式复制数据文件,可以快速恢复:
-
如果你的表是主要InnoDB 的表,或者如果你有一个混合InnoDB 和MyISAM表,可以考虑使用 mysqlbackup MySQL企业备份产品的命令。(作为企业订阅的一部分提供。)它InnoDB以最小的中断为备份提供最佳性能; 它还可以备份来自MyISAM其他存储引擎的表格 ; 它提供了许多方便的选项,以适应不同的备份方案。请参见 第25.2节“MySQL企业备份概述”。
-
如果您的表主要是MyISAM 表,请考虑使用mysqlhotcopy ,以获得比mysqldump备份和还原操作更好的性能 。请参见第4.6.10节“ mysqlhotcopy - 数据库备份程序”。
mysqldump可以逐行检索和转储表内容,或者它可以从表中检索整个内容并在转储之前将其缓冲在内存中。如果要转储大型表,则在内存中缓冲可能会出现问题。要逐行转储表,请使用 --quick选项(或 --opt启用 --quick)。的 --opt选项(因此 --quick)是默认启用,因此,以使存储器缓冲,使用 --skip-quick。
如果您使用最新版本的 mysqldump生成要重新加载到非常旧的MySQL服务器的转储,请使用该 --skip-opt选项而不是--opt或 --extended-insert选项。
有关mysqldump的其他信息,请参见第7.4节“使用mysqldump进行备份”。
调用语法
通常有三种方法可以使用 mysqldump -in order来转储一组一个或多个表,一组一个或多个完整的数据库,或整个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.2.2节“使用选项文件”。
表4.13 mysqldump选项
选项名称 | 描述 | 介绍 |
在每个CREATE DATABASE语句之前添加DROP DATABASE语句 |
| |
在每个CREATE TABLE语句之前添加DROP TABLE语句 |
| |
在每个CREATE TRIGGER语句之前添加DROP TRIGGER语句 |
| |
使用LOCK TABLES和UNLOCK TABLES语句环绕每个表转储 |
| |
转储所有数据库中的所有表 |
| |
允许创建作为关键字的列名 |
| |
在CHANGE MASTER语句之前包括STOP SLAVE,在输出结束时包括START SLAVE |
| |
使用指定的网络接口连接到MySQL服务器 | 5.6.1 | |
安装字符集的目录 |
| |
添加注释到转储文件 |
| |
产生更紧凑的输出 |
| |
生成与其他数据库系统或旧MySQL服务器更兼容的输出 |
| |
使用包含列名的完整INSERT语句 |
| |
压缩客户端和服务器之间发送的所有信息 |
| |
在CREATE TABLE语句中包含所有特定于MySQL的表选项 |
| |
将所有名称参数解释为数据库名称 |
| |
写调试日志 |
| |
程序退出时打印调试信息 |
| |
程序退出时打印调试信息,内存和CPU统计信息 |
| |
要使用的身份验证插件 |
| |
指定默认字符集 |
| |
除常用选项文件外,还可以读取命名选项文件 |
| |
只读命名选项文件 |
| |
选项组后缀值 |
| |
编写INSERT DELAYED语句而不是INSERT语句 |
| |
在主复制服务器上,执行转储操作后删除二进制日志 |
| |
对于每个表,使用语句环绕INSERT语句以禁用和启用键 |
| |
如果给出了--comments,则将转储日期包括为“转储已完成”评论 |
| |
包含CHANGE MASTER语句,列出slave的master的二进制日志坐标 |
| |
启用明文身份验证插件 | 28年6月5日 | |
转储转储数据库中的事件 |
| |
使用多行INSERT语法 |
| |
此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同 |
| |
此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同 |
| |
此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同 |
| |
此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同 |
| |
在开始转储之前刷新MySQL服务器日志文件 |
| |
转储mysql数据库后发出FLUSH PRIVILEGES语句 |
| |
即使在表转储期间发生SQL错误,也要继续 |
| |
显示帮助消息并退出 |
| |
使用十六进制表示法转储二进制列 |
| |
MySQL服务器所在的主机 |
| |
不要转储给定的表 |
| |
在使用--dump-slave生成的CHANGE MASTER语句中包含MASTER_HOST / MASTER_PORT选项 |
| |
编写INSERT IGNORE而不是INSERT语句 |
| |
此选项与--tab选项一起使用,其含义与LOAD DATA的相应子句相同 |
| |
锁定所有数据库中的所有表 |
| |
在转储它们之前锁定所有表 |
| |
将警告和错误附加到命名文件 |
| |
从.mylogin.cnf中读取登录路径选项 | 5.6.6 | |
将二进制日志文件名和位置写入输出 |
| |
发送到服务器或从服务器接收的最大数据包长度 |
| |
TCP / IP和套接字通信的缓冲区大小 |
| |
在SET autocommit = 0和COMMIT语句中包含每个转储表的INSERT语句 |
| |
不要编写CREATE DATABASE语句 |
| |
不要编写重新创建每个转储表的CREATE TABLE语句 |
| |
不要转储表内容 |
| |
不读选项文件 |
| |
与--skip-set-charset相同 |
| |
不要在输出中编写任何CREATE LOGFILE GROUP或CREATE TABLESPACE语句 |
| |
-add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset的简写。 |
| |
转储按主键或第一个唯一索引排序的每个表的行 |
| |
连接到服务器时使用的密码 |
| |
使用命名管道连接到服务器(仅限Windows) |
| |
安装插件的目录 |
| |
用于连接的TCP / IP端口号 |
| |
打印默认选项 |
| |
要使用的连接协议 |
| |
一次从服务器一行检索表的行 |
| |
在反引号字符中引用标识符 |
| |
编写REPLACE语句而不是INSERT语句 |
| |
直接输出到给定文件 |
| |
从转储的数据库转储存储的例程(过程和函数) |
| |
不要以旧的(4.1之前的)格式向服务器发送密码 | 5.6.17 | |
将SET NAMES default_character_set添加到输出 |
| |
是否将SET @@ GLOBAL.GTID_PURGED添加到输出中 | 5.6.9 | |
用于共享内存连接的共享内存的名称 |
| |
在从服务器转储数据之前发出BEGIN SQL语句 |
| |
不要在每个CREATE TABLE语句之前添加DROP TABLE语句 |
| |
不要添加锁 |
| |
不要向转储文件添加注释 |
| |
不要产生更紧凑的输出 |
| |
不要禁用密钥 |
| |
关闭扩展插入 |
| |
关闭--opt设置的选项 |
| |
不要一次从服务器一行检索表的行 |
| |
不要引用标识符 |
| |
不要写SET NAMES语句 |
| |
不要转储触发器 |
| |
关掉tz-utc |
| |
Unix套接字文件或Windows命名管道使用 |
| |
启用连接加密 |
| |
包含受信任的SSL证书颁发机构列表的文件 |
| |
包含受信任的SSL证书颁发机构证书文件的目录 |
| |
包含X.509证书的文件 |
| |
用于连接加密的允许密码 |
| |
包含证书吊销列表的文件 | 5.6.3 | |
包含证书吊销列表文件的目录 | 5.6.3 | |
包含X.509密钥的文件 |
| |
期望的与服务器连接的安全状态 | 30年6月5日 | |
根据服务器证书Common Name身份验证主机名 |
| |
生成制表符分隔的数据文件 |
| |
覆盖 - 数据库或-B选项 |
| |
转储每个转储表的触发器 |
| |
将SET TIME_ZONE ='+ 00:00'添加到转储文件 |
| |
连接到服务器时使用的MySQL用户名 |
| |
详细模式 |
| |
显示版本信息并退出 |
| |
仅转储由给定WHERE条件选择的行 |
| |
生成XML输出 |
|
连接选项
该mysqldump的命令登录到一个MySQL服务器提取信息。以下选项指定如何在同一台计算机或远程系统上连接MySQL服务器。
-
在具有多个网络接口的计算机上,使用此选项可选择用于连接MySQL服务器的接口。
-
--compress, -C
压缩客户端和服务器之间发送的所有信息(如果可能)。请参见 第4.2.5节“连接压缩控制”。
-
--default-auth=plugin
关于使用哪个客户端身份验证插件的提示。请参见第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 选项。
-
--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.4节“使用命令选项连接到MySQL服务器”。
-
不要以旧的(4.1之前的)格式向服务器发送密码。这可以防止除使用较新密码格式的服务器之外的连接。默认情况下启用此选项; 使用 --skip-secure-auth 禁用它。MySQL 5.6.17中添加了此选项。
注意
使用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连接到服务器,并指明在何处查找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语句进行编码,可以使用以下选项指定在还原转储时要拆除和设置的内容。
-
--add-drop-database
DROP DATABASE 在每个CREATE DATABASE陈述之前 写一个陈述。此选项通常与--all-databasesor --databases选项一起使用, 因为CREATE DATABASE除非指定了其中一个选项,否则不会写入任何语句。
-
--add-drop-table
DROP TABLE在每个CREATE TABLE 陈述之前 写一个陈述。
-
--add-drop-trigger
DROP TRIGGER 在每个CREATE TRIGGER陈述之前 写一个陈述。
-
--all-tablespaces, -Y
向表转储添加创建表使用的任何表空间所需的所有SQL语句NDB 。此信息不包含在mysqldump的输出中。此选项目前仅与NDB Cluster表相关。
-
--no-create-db, -n
CREATE DATABASE 如果给出--databases或 --all-databases选项,则 禁止输出中包含的语句 。
-
--no-create-info, -t
不要编写CREATE TABLE 创建每个转储表的语句。
注意
该选项并不能排除语句创建从日志文件组或者表 mysqldump的输出; 但是,您可以使用此--no-tablespaces 选项。
-
--no-tablespaces, -y
此选项禁止mysqldump输出中的所有CREATE LOGFILE GROUP和CREATE TABLESPACE语句 。
-
--replace
调试选项
以下选项打印调试信息,在转储文件中编码调试信息,或者让转储操作继续进行,而不管潜在的问题。
-
--allow-keywords
允许创建作为关键字的列名。这通过在每个列名前加上表名来实现。
-
--comments, -i
在转储文件中写入其他信息,例如程序版本,服务器版本和主机。默认情况下启用此选项。要禁止此附加信息,请使用--skip-comments。
-
--debug[=debug_options], -# [debug_options]
编写调试日志。典型的 debug_options字符串是 。默认值为 。 d:t:o,file_named:t:o,/tmp/mysqldump.trace
-
--debug-check
程序退出时打印一些调试信息。
-
--debug-info
程序退出时打印调试信息,内存和CPU使用情况统计信息。
-
--dump-date
如果--comments给出了该选项,mysqldump会在以下表单的转储结束时生成注释:
-- Dump completed on DATE
但是,日期会导致在不同时间拍摄的转储文件看起来不同,即使数据在其他方面相同也是如此。--dump-date并 --skip-dump-date 控制是否将日期添加到评论中。默认值为--dump-date (包括注释中的日期)。 --skip-dump-date 抑制日期打印。
-
--force, -f
即使在表转储期间发生SQL错误,也要继续。
此选项的一个用途是使 mysqldump继续执行,即使它遇到一个已变为无效的视图,因为该定义引用了已删除的表。没有 --force,mysqldump退出并显示错误消息。使用时--force, mysqldump会输出错误消息,但它也会将包含视图定义的SQL注释写入转储输出并继续执行。
-
--log-error=file_name
通过将警告和错误附加到指定文件来记录警告和错误。默认是不进行日志记录。
-
--skip-comments
请参阅该--comments选项的说明 。
-
--verbose, -v
详细模式。打印有关程序功能的更多信息。
帮助选项
以下选项显示有关 mysqldump命令本身的信息。
-
--help, -?
显示帮助消息并退出。
-
--version, -V
显示版本信息并退出。
国际化选择
以下选项更改mysqldump命令如何 使用国家语言设置表示字符数据。
-
--character-sets-dir=dir_name
安装字符集的目录。请参见 第10.14节“字符集配置”。
-
--default-character-set=charset_name
使用charset_name作为默认字符集。请参见第10.14节“字符集配置”。如果未指定字符集,则 mysqldump使用utf8。
-
--no-set-names, -N
关闭 --set-charset设置,与指定相同--skip-set-charset。
-
--set-charset
写入 输出。默认情况下启用此选项。要取消 声明,请使用 。 SET NAMES default_character_setSET NAMES--skip-set-charset
复制选项
所述的mysqldump命令经常被用来创建一个空的情况下,或包括数据的实例中,在复制结构的从服务器上。以下选项适用于在复制主服务器和从属服务器上转储和还原数据。
-
--apply-slave-statements
对于产生的奴隶转储 --dump-slave选项,添加 STOP SLAVE了之前声明CHANGE MASTER TO 语句和一个START SLAVE 在输出结束发言。
-
--delete-master-logs
在主复制服务器上,通过PURGE BINARY LOGS 在执行转储操作后向服务器发送语句来删除二进制日志。此选项自动启用 --master-data。
-
--dump-slave[=value]
此选项类似于 --master-data除了它用于转储复制从属服务器以生成转储文件,该转储文件可用于将另一个服务器设置为与转储服务器具有相同主服务器的从属服务器。它会导致转储输出包含一个CHANGE MASTER TO语句,该 语句指示转储的从属主服务器的二进制日志坐标(文件名和位置)。这些是从服务器开始复制的主服务器坐标。
--dump-slave导致使用master的坐标而不是dumped服务器的坐标,就像--master-data选项所做的那样 。此外,指定此选项会导致--master-data选项被覆盖(如果使用)并被有效忽略。
选项值的处理方式与 --master-data(设置无值或1表示将CHANGE MASTER TO 语句写入转储,设置2导致语句写入但包含在SQL注释中)的处理方式相同,并且与--master-data启用方法具有相同的效果或禁用其他选项以及如何处理锁定。
此选项导致mysqldump在转储之前停止从属SQL线程并在之后再次重新启动它。
与此同时--dump-slave, 也可以使用--apply-slave-statements 和 --include-master-host-port选项。
-
--include-master-host-port
对于CHANGE MASTER TO 使用该--dump-slave选项生成的从属转储中的语句 ,添加 MASTER_HOST和 MASTER_PORT选择主服务器名称和从服务器主服务器的TCP / IP端口号。
-
--master-data[=value]
使用此选项可转储主复制服务器以生成转储文件,该转储文件可用于将另一台服务器设置为主服务器的从属服务器。它会导致转储输出包含一个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-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=AUTOSET @@SESSION.SQL_LOG_BIN=0;如果在要备份的服务器上启用了GTID(即,如果AUTO 计算结果为ON),则会将:添加到输出中。
注意
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
在CREATE TABLE语句中包含所有特定于MySQL的表选项 。
-
--fields-terminated-by=..., --fields-enclosed-by=..., --fields-optionally-enclosed-by=..., --fields-escaped-by=...
这些选项与选项一起使用,其 --tab含义与相应的FIELDS 子句相同LOAD DATA。请参见 第13.2.6节“LOAD DATA语法”。
-
--hex-blob
使用十六进制表示法转储二进制列(例如, 'abc'变为 0x616263)。受影响的数据类型是 BINARY, VARBINARY, BLOB类型, BIT所有的空间数据类型,和其他非二进制数据类型与使用时 binary 的字符集。
-
--lines-terminated-by=...
此选项与选项一起使用,其 --tab含义与相应的LINES 子句相同LOAD DATA。请参见 第13.2.6节“LOAD 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_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子句从表数据中过滤行。
-
--all-databases, -A
转储所有数据库中的所有表。这与使用该--databases选项并在命令行上命名所有数据库相同。
-
--databases, -B
转储几个数据库。通常, mysqldump将命令行上的第一个名称参数视为数据库名称,将后续名称视为表名称。使用此选项,它将所有名称参数视为数据库名称。CREATE DATABASE和USE 语句包含在每个新数据库之前的输出中。
此选项可用于转储 INFORMATION_SCHEMA和 performance_schema数据库,即使使用该--all-databases选项,也不会转储 。(也可以使用该 --skip-lock-tables 选项。)
-
--events, -E
在输出中包含转储数据库的事件计划程序事件。此选项需要EVENT这些数据库的 权限。
使用--events contains CREATE EVENT 语句生成的输出来创建事件。但是,这些语句不包括事件创建和修改时间戳等属性,因此在重新加载事件时,会创建时间戳等于重新加载时间的事件。
如果您需要使用其原始时间戳属性创建事件,请不要使用--events。而是mysql.event使用具有适当mysql数据库权限的MySQL帐户直接转储和重新加载表 的内容 。
-
--ignore-table=db_name.tbl_name
不要转储给定的表,必须使用数据库和表名来指定该表。要忽略多个表,请多次使用此选项。此选项也可用于忽略视图。
-
--no-data, -d
不要写任何表行信息(即不要转储表内容)。如果要仅转储CREATE TABLE表的语句(例如,通过加载转储文件来创建表的空副本),这将非常有用 。
-
--routines, -R
在输出中包含转储数据库的存储例程(过程和函数)。此选项需要表的 SELECT权限 mysql.proc。
通过使用--routines contains CREATE PROCEDURE和 CREATE FUNCTION语句生成的输出来创建例程。但是,这些语句不包括例程创建和修改时间戳等属性,因此在重新加载例程时,会创建时间戳等于重新加载时间的例程。
如果您需要使用其原始时间戳属性创建例程,请不要使用 --routines。而是mysql.proc使用具有适当mysql数据库权限的MySQL帐户直接转储和重新加载表的内容。
-
--tables
覆盖--databases 或-B选项。mysqldump 将该选项后面的所有名称参数视为表名。
-
--triggers
在输出中包含每个转储表的触发器。默认情况下启用此选项; 禁用它 --skip-triggers。
为了能够转储表的触发器,您必须具有TRIGGER该表的 权限。
-
--where='where_condition', -w 'where_condition'
仅转储由给定WHERE条件选择的行 。如果条件包含空格或其他对命令解释程序特殊的字符,则必须引用该条件。
例子:
--where="user='jimf'"
-w"userid>1"
-w"userid<1"
性能选项
以下选项与性能(尤其是还原操作)最相关。对于大型数据集,还原操作(处理INSERT 转储文件中的语句)是最耗时的部分。当急需恢复数据时,请提前计划并测试此阶段的性能。对于恢复时间测量的时间,你可能更喜欢另一种备份和恢复解决方案,如MySQL企业备份的InnoDB显示以及混合使用的数据库,或mysqlhotcopy的用于 MyISAM-only数据库。
性能也受事务选项的影响 ,主要用于转储操作。
-
--delayed-insert
对于那些支持INSERT DELAYED语法的非事务性表 ,请使用该语句而不是常规 INSERT语句。
从MySQL 5.6.6开始,DELAYED不推荐使用插入,因此将来的版本中将删除此选项。
-
--disable-keys, -K
对于每个表,用INSERT语句 和语句包围 语句。这样可以更快地加载转储文件,因为索引是在插入所有行之后创建的。此选项仅对表的非唯一索引有效。 /*!40000 ALTER TABLE tbl_name DISABLE KEYS */;/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;MyISAM
-
--extended-insert, -e
INSERT使用包含多个VALUES列表的多行语法 编写语句 。这会导致较小的转储文件,并在重新加载文件时加快插入速度。
-
--insert-ignore
编写INSERT IGNORE语句而不是 INSERT语句。
-
客户端/服务器通信的最大缓冲区大小。默认值为24MB,最大值为1GB。
-
用于客户端/服务器通信的缓冲区的初始大小。在创建多行 INSERT语句时(与--extended-insertor --opt选项一样), mysqldump创建长达数字的行 --net-buffer-length。如果增加此变量,请确保MySQL服务器net_buffer_length 系统变量的值至少为此大。
-
--opt
默认情况下启用此选项是组合的简写 。它提供快速转储操作并生成转储文件,可以快速重新加载到MySQL服务器。 --add-drop-table--add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset
由于--opt默认情况下启用该选项,因此您只需指定其--skip-opt反转,即 关闭多个默认设置。有关有mysqldump 选择地启用或禁用受影响的选项子集的信息, 请参阅选项组的讨论 --opt。
-
--quick, -q
此选项对于转储大型表非常有用。它强制 mysqldump一次一行地从服务器检索表的行,而不是检索整个行集并在写出之前在内存中缓冲它。
-
--skip-opt
请参阅该--opt选项的说明 。
交易选项
以下选项权衡转储操作的性能,以及导出数据的可靠性和一致性。
-
--add-locks
使用LOCK TABLES和 UNLOCK TABLES语句环绕每个表转储。重新加载转储文件时,这会导致更快的插入。请参见 第8.2.4.1节“优化INSERT语句”。
-
--flush-logs, -F
在开始转储之前刷新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
FLUSH PRIVILEGES 转储mysql数据库后,在转储输出中 添加语句 。只要转储包含mysql 数据库以及依赖于数据库中的数据以mysql进行正确还原的任何其他数据库,就应该使用此选项。
-
--lock-all-tables, -x
锁定所有数据库中的所有表。这是通过在整个转储期间获取全局读锁来实现的。此选项自动关闭 --single-transaction和 --lock-tables。
-
--lock-tables, -l
对于每个转储的数据库,在转储之前锁定要转储的所有表。表被锁定 READ LOCAL以允许在MyISAM表的情况下并发插入。对于事务表,例如InnoDB, --single-transaction是一个更好的选择,--lock-tables 因为它根本不需要锁定表。
由于--lock-tables 每个数据库的锁表都是单独的,因此该选项不保证转储文件中的表在数据库之间在逻辑上是一致的。不同数据库中的表可能会以完全不同的状态转储。
某些选项,例如 --opt,自动启用--lock-tables。如果要覆盖它,请使用--skip-lock-tables选项列表的末尾。
-
--no-autocommit
-
--order-by-primary
如果存在这样的索引,则转储按其主键或其第一个唯一索引排序的每个表的行。这在转储MyISAM要加载到InnoDB表中的表时很有用,但使转储操作需要相当长的时间。
-
--shared-memory-base-name=name
在Windows上,用于使用共享内存连接到本地服务器的连接的共享内存名称。默认值为MYSQL。共享内存名称区分大小写。
仅当服务器启动时shared_memory启用了系统变量以支持共享内存连接,此选项才适用 。
-
--single-transaction
此选项将事务隔离模式设置为, REPEATABLE READ并START TRANSACTION在转储数据之前将SQL语句发送到服务器。它仅对事务表有用,例如InnoDB,因为它在START TRANSACTION发出时不转储任何应用程序时转储数据库的一致状态 。
使用此选项时,应记住只有 InnoDB表以一致状态转储。例如,使用此选项时转储的任何表MyISAM或 MEMORY表仍可能更改状态。
虽然 --single-transaction转储过程,以确保有效的转储文件(正确的表的内容和二进制日志坐标),没有其他的连接应使用以下语句: ALTER TABLE, CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE。一致读取不会与这些语句隔离,因此在要转储的表上使用它们会导致 mysqldumpSELECT执行该操作 以检索表内容以获取不正确的内容或失败。
该--single-transaction选项与 --lock-tables选项是相互排斥的,因为LOCK TABLES会导致任何挂起的事务隐含提交。
要转储大表,请将该--single-transaction选项与--quick选项组合 使用 。
选项组
-
该--opt选项打开几个一起工作的设置以执行快速转储操作。所有的这些设置在默认情况下,因为 --opt默认是打开的。因此,你很少指定--opt。相反,您可以通过指定来关闭这些设置,可以 --skip-opt通过在命令行中指定相关选项来选择性地重新启用某些设置。
-
该--compact选项关闭几个设置,控制可选语句和注释是否出现在输出中。同样,您可以使用其他重新启用某些设置的选项来关注此选项,或者使用该--skip-compact表单启用所有设置 。
当您有选择地启用或禁用组选项的效果时,顺序很重要,因为选项从头到尾处理。例如, 不会产生预期的效果; 它 本身就是一样的。 --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
mysqldump对于通过将数据从一个MySQL服务器复制到另一个MySQL服务器来填充数据库非常有用:
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不会转储 INFORMATION_SCHEMA或 performance_schema数据库。要转储其中任何一个,请在命令行中明确命名。您也可以使用该--databases选项命名 。此外,使用该 --skip-lock-tables 选项。
mysqldump不会转储NDB Cluster ndbinfo信息数据库。
如果由于权限不足而在备份视图时遇到问题,请参见第C.5节“视图限制”以获取解决方法。