10、MySQL 8.0参考手册 4.5.4 mysqldump - 数据库备份程序

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_pa​​cket发送到服务器或从服务器接收的最大数据包长度  
--net_buffer_lengthTCP / 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服务器,无论是在同一台机器上还是远程系统上。

  • --bind-address=ip_address

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

  • --compress, -C

    压缩客户端和服务器之间发送的所有信息(如果两者均支持压缩)。

  • --default-auth=plugin

    关于使用客户端身份验证插件的提示。请参见第6.3.10节“可插入认证”

  • --enable-cleartext-plugin

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

  • --get-server-public-key

    从服务器请求基于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

  • --login-path=name

    .mylogin.cnf登录路径文件中的指定登录路径读取选项 阿 “ 登录路径 ”是含有指定要连接到哪个MySQL服务器和选项哪个帐户作为认证选项组。要创建或修改登录路径文件,请使用 mysql_config_editor实用程序。请参见 第4.6.7节“ mysql_config_editor - MySQL配置实用程序”

  • --network-timeout, -M

    通过将大表设置max_allowed_packet为最大值并将网络读取和写入超时设置为较大值来启用大型表 该选项默认启用。要禁用它,请使用 --skip-network-timeout

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

    连接到服务器时使用的密码。如果使用short option form(-p), 在选项和密码之间不能有空格。如果您省略命令行中password--password-p选项后面的 值 ,则mysqldump会提示输入一个值。

    在命令行中指定密码应被视为不安全。请参见 第6.1.2.1节“密码安全的最终用户指南”您可以使用选项文件来避免在命令行上输入密码。

  • --pipe, -W

    在Windows上,使用命名管道连接到服务器。该选项仅适用于服务器支持命名管道连接的情况。

  • --plugin-dir=dir_name

    在其中查找插件的目录。如果该--default-auth选项用于指定身份验证插件,但是 mysqldump未找到该选项,请指定此选项 请参见 第6.3.10节“可插入认证”

  • --port=port_num, -P port_num

    用于连接的TCP / IP端口号。

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

    用于连接到服务器的连接协议。当其他连接参数通常会导致使用的协议不是您想要的协议时,这很有用。有关允许值的详细信息,请参见 第4.2.2节“连接到MySQL服务器”

  • --secure-auth

    这个选项在MySQL 8.0.3中被删除。

  • --server-public-key-path=file_name

    包含客户端副本的文件的路径名,该副本是服务器为基于RSA密钥对的密码交换所需的。该文件必须采用PEM格式。该选项适用于使用sha256_passwordcaching_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可插入验证”

  • --socket=path, -S path

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

  • --ssl*

    开头的选项 --ssl指定是否使用SSL连接到服务器,并指出在哪里可以找到SSL密钥和证书。请参见 第6.4.2节“加密连接的命令选项”

  • --tls-version=protocol_list

    客户端允许的加密连接协议。该值是一个包含一个或多个协议名称的逗号分隔列表。可以为这个选项命名的协议取决于用于编译MySQL的SSL库。有关详细信息,请参见 第6.4.6节“加密连接协议和密码”

  • --user=user_name, -u user_name

    连接到服务器时使用的MySQL用户名。

您还可以使用 语法来设置以下变量 : --var_name=value

  • max_allowed_packet

    客户端/服务器通信的最大缓冲区大小。默认值是24MB,最大值是1GB。

  • net_buffer_length

    用于客户端/服务器通信的缓冲区的初始大小。在创建多行 INSERT语句时(与--extended-insertor --opt选项一样), mysqldump创建长达net_buffer_length字节的行 如果你增加这个变量,确保MySQL服务器net_buffer_length 系统变量的值至少有这么大。

选项 - 文件选项

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

  • --defaults-extra-file=file_name

    在全局选项文件之后读取此选项文件,但在用户选项文件之前(在Unix上)。如果文件不存在或无法访问,则会发生错误。 file_name如果作为相对路径名而非完整路径名给出,则相对于当前目录进行解释。

  • --defaults-file=file_name

    只使用给定的选项文件。如果文件不存在或无法访问,则会发生错误。 file_name如果作为相对路径名而非完整路径名给出,则相对于当前目录进行解释。

    例外:即使 --defaults-file读取客户端程序.mylogin.cnf

  • --defaults-group-suffix=str

    不仅要阅读常用选项组,还要阅读具有常用名称和后缀的组 str例如, mysqldump通常读取 [client]和 [mysqldump]组。如果 --defaults-group-suffix=_other 给出选项,mysqldump也会读取 [client_other]和 [mysqldump_other]组。

  • --no-defaults

    不要阅读任何选项文件。如果由于从选项文件读取未知选项而导致程序启动失败, --no-defaults可用于防止读取它们。

    例外是.mylogin.cnf 在任何情况下读取文件(如果存在)。这允许以比使用命令行更安全的方式来指定密码,即使在--no-defaults使用时 也是如此。.mylogin.cnfmysql_config_editor实用程序创建, 请参见 第4.6.7节“ mysql_config_editor - MySQL配置实用程序”。)

  • --print-defaults

    打印程序名称以及从选项文件中获取的所有选项。

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

  • --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继续执行,即使它遇到由于定义引用已删除的表而导致无效的视图。没有 --forcemysqldump退出并显示错误消息。使用时--forcemysqldump会输出错误消息,但它也会将包含视图定义的SQL注释写入转储输出并继续执行。

    如果--ignore-error 还选择忽略特定错误选项, --force则优先。

  • --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 执行转储操作后,通过向服务器发送语句来删除二进制日志该选项自动启用 --master-data

  • --dump-slave[=value]

    此选项类似, --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 选项也可以使用。

  • --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

    含义
    OFFSET向输出添加任何语句。
    ONSET向输出添加语句。如果服务器上未启用GTID,则会发生错误。
    AUTOSET如果在服务器上启用GTID,则向输出添加语句。

    来自使用基于GTID的复制的服务器的部分转储需要--set-gtid-purged={ON|OFF} 指定该 选项。使用ON如果目的是部署只使用了一些来自倾倒服务器的数据的新的复制奴隶。OFF如果打算通过在拓扑中复制表来修复表格,请使用 此选项。OFF 如果意图是在不相交的复制拓扑之间复制表并且将保持如此用途,请使用此选项。

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

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

    • --set-gtid-purged=ONSET @@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服务器更兼容的输出。从MySQL 8.0.11开始,此选项的唯一允许值是 ansi,它与用于设置服务器SQL模式的对应选项具有相同的含义。请参见第5.1.8节“服务器SQL模式”

  • --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 INFILE请参见第13.2.7节“LOAD DATA INFILE语法”

  • --hex-blob

    使用十六进制符号转储二进制列(例如, 'abc'变为 0x616263)。受影响的数据类型 BINARY, VARBINARY的 BLOB类型和 BIT

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

    该选项与该--tab选项一起使用,其 含义与相应的LINES 子句相同LOAD DATA INFILE请参见第13.2.7节“LOAD DATA INFILE语法”

  • --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在命令行中使用该选项并命名所有数据库相同

    在此之前的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选项。

  • --databases, -B

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

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

  • --events, -E

    在输出中包含转储数据库的事件调度程序事件。该选项需要EVENT这些数据库的 特权。

    使用生成的输出--events 包含CREATE EVENT 用于创建事件的语句。

  • --ignore-error=error[,error]...

    忽略指定的错误。选项值是以逗号分隔的错误编号列表,指定mysqldump执行期间要忽略的错误如果--force还选择忽略所有错误, --force则优先。

  • --ignore-table=db_name.tbl_name

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

  • --no-data, -d

    不要写任何表行信息(即不要转储表内容)。如果要仅转储CREATE TABLE语句(例如,通过加载转储文件来创建表的空副本),这非常有用 

  • --routines, -R

    在输出中包含转储数据库的存储例程(过程和函数)。该选项需要全局SELECT特权。

    使用生成的输出--routines 包含CREATE PROCEDURE和 CREATE FUNCTION语句来创建例程。

  • --tables

    覆盖--databases 或-B选项。mysqldump 将选项后面的所有名称参数视为表名。

  • --triggers

    在输出中包含每个转储表的触发器。该选项默认启用; 禁用它 --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和混合使用数据库。

性能也受交易选项的影响 ,主要用于转储操作。

  • --column-statistics

    ANALYZE TABLE在重新加载转储文件时,将语句 添加到输出以生成转储表的直方图统计信息。此选项在默认情况下处于禁用状态,因为大型表格的直方图生成可能需要很长时间。

  • --disable-keys, -K

    对于每个表,围绕 INSERT语句 语句。这使得加载转储文件的速度更快,因为索引是在所有行插入后创建的。该选项仅对表格的非唯一索引有效。 /*!40000 ALTER TABLEtbl_name DISABLE KEYS */;/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;MyISAM

  • --extended-insert, -e

    INSERT使用包含多个VALUES列表的多行语法 编写语句 这会导致更小的转储文件并在重新加载文件时加快插入速度。

  • --insert-ignore

    编写INSERT IGNORE语句而不是 INSERT语句。

  • --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.5.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数据库以进行正确恢复,就应该使用此选项

    注意

    对于从旧版本升级到MySQL 5.7.2或更高版本,请勿使用--flush-privileges有关这种情况下的升级说明,请参见 第2.10.1.2节“影响升级到MySQL 8.0的更改”

  • --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

    INSERT每个转储表中的 语句SET autocommit = 0COMMIT语句括起来。

  • --order-by-primary

    如果存在这样的索引,请转储按主键排序的每个表的行,或按其第一个唯一索引排序。在将MyISAM表加载到InnoDB表中时这很有用,但是使转储操作花费更长时间。

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

    在Windows上,使用共享内存名称,用于使用共享内存连接到本地服务器。默认值是MYSQL共享内存名称区分大小写。

    必须启动服务器, --shared-memory并启用共享内存连接选项。

  • --single-transaction

    此选项将事务隔离模式设置为 REPEATABLE READSTART TRANSACTION在转储数据之前SQL语句发送到服务器。它仅适用于诸如事务性表格InnoDB,因为它在START TRANSACTION发布时不会阻塞任何应用程序就会转储数据库的一致状态 

    使用此选项时,请记住只有 InnoDB表格以一致的状态倾倒。例如,在使用此选项时转储的任何MyISAM或 MEMORY表可能仍会更改状态。

    虽然 --single-transaction转储过程,以确保有效的转储文件(正确的表的内容和二进制日志坐标),没有其他的连接应使用以下语句: ALTER TABLE, CREATE TABLEDROP TABLE, RENAME TABLE, TRUNCATE TABLE一致的读取并不是与这些语句隔离的,因此在转储的表上使用它们会导致 SELECTmysqldump执行的 读取表中的内容以获取不正确的内容或失败。

    --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

通过将数据从一台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节“备份和恢复策略示例”

限制

默认情况下, mysqldump不会转储 performance_schemasys模式。要转储其中的任何一个,请在命令行上明确指定它们。你也可以用选项来命名它们  对于,也可以使用该   选项。--databasesperformance_schema--skip-lock-tables

mysqldump的不转储 INFORMATION_SCHEMA模式。

mysqldump的所有游戏用于重新创建³³ 数据库转储general_log状语从句: slow_query_log表的  语句  mysql日志表内容不会被转储。

如果由于权限不足而导致备份视图时遇到问题,参阅请第C.5节“对视图的限制” 以获得解决方法。学什么技术好


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值