Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  mysqldump — A Database Backup Program

6.5.4 mysqldump — 数据库备份程序

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

Tip

考虑使用 MySQL Shell 转储实用程序,它提供了并行转储多线程、文件压缩和进度信息显示,以及云功能,如 Oracle Cloud Infrastructure Object Storage 流式传输和 MySQL HeatWave 服务兼容性检查和修改。转储可以轻松导入到 MySQL 服务器实例或 MySQL HeatWave 服务 DB 系统中,使用 MySQL Shell 载入转储实用程序。MySQL Shell 的安装说明可以在 这里 找到。

mysqldump 至少需要转储表的 SELECT 权限,转储视图的 SHOW VIEW 权限,转储触发器的 TRIGGER 权限,LOCK TABLES 权限如果不使用 --single-transaction 选项,PROCESS 权限如果不使用 --no-tablespaces 选项,RELOAD 或 FLUSH_TABLES 权限与 --single-transaction 如果同时使用 gtid_mode=ON 和 --set-gtid=purged=ON|AUTO。

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

mysqldump 输出可以包括 ALTER DATABASE 语句,以更改数据库排序规则。这些语句可能用于dump存储程序以保留字符编码。要重新加载包含这些语句的dump文件,需要对受影响的数据库具有 ALTER 权限。

Note

使用 PowerShell 在 Windows 上创建的dump文件具有 UTF-16 编码:

mysqldump [options] > dump.sql

然而,UTF-16 不是允许的连接字符集(见 不允许的客户端字符集),因此dump文件不能正确加载。要解决这个问题,可以使用 --result-file 选项,该选项以 ASCII 格式创建输出:

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

不建议在 GTIDs 启用时加载dump文件(gtid_mode=ON),如果您的dump文件包括系统表。mysqldump 为系统表发出 DML 指令,这些指令使用非事务性 MyISAM 存储引擎,而这种组合在 GTIDs 启用时不允许。

性能和可扩展性考虑

mysqldump 的优点包括查看或编辑输出的便捷性和灵活性,可以克隆数据库以进行开发和 DBA 工作,或者生成现有数据库的轻微变体以进行测试。它不是快速或可扩展的解决方案,以备份大量数据。在大型数据量的情况下,即使备份步骤需要合理的时间,恢复数据也可能非常慢,因为重放 SQL 语句涉及到磁盘 I/O 以进行插入、索引创建等操作。

对于大规模备份和恢复,物理备份更合适,以便快速恢复数据。

如果您的表格主要是 InnoDB 表格,或者您有一个混合的 InnoDBMyISAM 表格,考虑使用 mysqlbackup,它是 MySQL Enterprise 的一部分。该工具提供了高性能的 InnoDB 备份,具有最小的中断;它也可以备份 MyISAM 和其他存储引擎的表格;它还提供了一些便捷的选项来适应不同的备份场景。见 第 32.1 节,“MySQL Enterprise 备份概述”

mysqldump 可以逐行检索和转储表格内容,或者它可以检索整个表格内容并将其缓存在内存中,然后转储。缓存在内存中可能是一个问题,如果您正在转储大型表格。要逐行转储表格,使用 --quick 选项(或 --opt,它启用了 --quick)。 --opt 选项(因此 --quick)是默认启用的,因此要启用内存缓冲,使用 --skip-quick

如果您使用的是 mysqldump 的最新版本来生成要重新加载到非常旧的 MySQL 服务器的dump文件,使用 --skip-opt 选项,而不是 --opt--extended-insert 选项。

有关 mysqldump 的更多信息,请见 第 9.4 节,“使用 mysqldump 进行备份”

调用语法

这里有三种方式使用 mysqldump ——要么dump一个或多个表,要么dump一个或多个完整的数据库,要么dump整个MySQL服务器,如下所示:

mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases

要dump整个数据库,不要在 db_name 后面指定任何表,或者使用 --databases--all-databases 选项。

要查看您版本的 mysqldump 支持的选项列表,请发出命令 mysqldump --help

选项语法 - 字母顺序摘要

mysqldump 支持以下选项,可以在命令行或在 [mysqldump][client] 组的选项文件中指定。关于 MySQL 程序使用的选项文件的信息,请参阅 第 6.2.2.2 节,“使用选项文件”

表 6.14 mysqldump 选项

Option Name Description
--add-drop-database 在每个 CREATE DATABASE 语句之前添加 DROP DATABASE 语句
--add-drop-table 在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句
--add-drop-trigger 在每个 CREATE TRIGGER 语句之前添加 DROP TRIGGER 语句
--add-locks 将每个表dump包围在 LOCK TABLES 和 UNLOCK TABLES 语句中
--all-databases dump所有数据库中的所有表
--allow-keywords 允许创建关键字作为列名
--apply-replica-statements 在输出的末尾包括 STOP REPLICA 语句和 CHANGE REPLICATION SOURCE TO 语句
--apply-slave-statements 在输出的末尾包括 STOP SLAVE 语句和 CHANGE MASTER 语句
--bind-address 使用指定的网络接口连接到 MySQL 服务器
--character-sets-dir 字符集安装的目录
--column-statistics 写入 ANALYZE TABLE 语句以生成统计直方图
--comments 添加注释到dump文件
--compact 生成更紧凑的输出
--compatible 生成与其他数据库系统或旧版本 MySQL 服务器更兼容的输出
--complete-insert 使用完整的 INSERT 语句,包括列名
--compress 压缩客户端和服务器之间的所有信息
--compression-algorithms 服务器连接的允许压缩算法
--create-options 在 CREATE TABLE 语句中包括所有 MySQL 特定的表选项
--databases 将所有名称参数解释为数据库名
--debug 写入调试日志
--debug-check 在程序退出时打印调试信息
--debug-info 打印调试信息、内存和 CPU 统计信息当程序退出
--default-auth 要使用的身份验证插件
--default-character-set 指定默认字符集
--defaults-extra-file 除了通常的选项文件外,还读取命名的选项文件
--defaults-file 只读取命名的选项文件
--defaults-group-suffix 选项组后缀值
--delete-master-logs 在复制源服务器上,在执行转储操作后删除二进制日志
--delete-source-logs 在复制源服务器上,在执行转储操作后删除二进制日志
--disable-keys 对于每个表,使用禁用和启用键语句来围绕INSERT语句
--dump-date 如果给定--comments,则包括转储日期作为“转储完成于”注释
--dump-replica 包括CHANGE REPLICATION SOURCE TO语句,该语句列出了复制源的二进制日志坐标
--dump-slave 包括CHANGE MASTER语句,该语句列出了复制源的二进制日志坐标
--enable-cleartext-plugin 启用明文身份验证插件
--events 转储数据库中的事件
--extended-insert 使用多行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相同的含义
--flush-logs 在开始转储之前刷新MySQL服务器日志文件
--flush-privileges 在转储mysql数据库后发出FLUSH PRIVILEGES语句
--force 即使在表转储期间出现SQL错误,也继续执行
--get-server-public-key 从服务器请求RSA公钥
--help 显示帮助信息并退出
--hex-blob 使用十六进制表示法转储二进制列
--host MySQL服务器所在的主机
--ignore-error 忽略指定的错误
--ignore-table 不转储指定的表
--ignore-views 跳过转储表视图
--include-master-host-port 在使用--dump-slave时,在CHANGE MASTER语句中包括MASTER_HOST/MASTER_PORT选项
--include-source-host-port 在使用--dump-replica时,在CHANGE REPLICATION SOURCE TO语句中包括SOURCE_HOST和SOURCE_PORT选项
--init-command 执行连接或重新连接到 MySQL 服务器后的单个 SQL 语句;重置现有的定义命令
--init-command-add 添加一个在连接或重新连接到 MySQL 服务器后执行的附加 SQL 语句
--insert-ignore 写入 INSERT IGNORE 语句而不是 INSERT 语句
--lines-terminated-by 使用 --tab 选项时,具有相同的含义,如 LOAD DATA 子句
--lock-all-tables 锁定所有数据库中的所有表
--lock-tables 在转储之前锁定所有表
--log-error 将警告和错误追加到命名文件
--login-path 从 .mylogin.cnf 读取登录路径选项
--master-data 将二进制日志文件名和位置写入输出
--max-allowed-packet 从服务器发送或接收的最大数据包长度
--mysqld-long-query-time 会话值用于慢查询阈值
--net-buffer-length TCP/IP 和套接字通信的缓冲区大小
--network-timeout 增加网络超时以允许更大的表转储
--no-autocommit 将每个转储表的 INSERT 语句括在 SET autocommit = 0 和 COMMIT 语句中
--no-create-db 不写入 CREATE DATABASE 语句
--no-create-info 不写入重新创建每个转储表的 CREATE TABLE 语句
--no-data 不转储表内容
--no-defaults 不读取选项文件
--no-login-paths 不从登录路径文件中读取登录路径
--no-set-names 同 --skip-set-charset
--no-tablespaces 不写入任何 CREATE LOGFILE GROUP 或 CREATE TABLESPACE 语句到输出
--opt --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset 的缩写
--order-by-primary 将每个表的行按其主键或第一个唯一索引排序
--output-as-version 确定副本和事件术语在转储中的使用;用于与旧版本的兼容性
--password 连接到服务器时使用的密码
--password1 连接到服务器时使用的第一个多因素身份验证密码
--password2 连接到服务器时使用的第二个多因素身份验证密码
--password3 连接到服务器时使用的第三个多因素身份验证密码
--pipe 使用命名管道连接到服务器(仅限 Windows)
--plugin-authentication-kerberos-client-mode 通过 MIT Kerberos 库在 Windows 上允许 GSSAPI 插件身份验证
--plugin-dir 插件安装的目录
--port TCP/IP 端口号用于连接
--打印默认值 打印默认选项
--协议 要使用的传输协议
--快速 从服务器逐行检索表的行
--引号名称 在反引号字符中引号标识符
--replace 写入REPLACE语句,而不是INSERT语句
--结果文件 将输出直接写入指定文件
--例程 从转储数据库中转储存储的例程(过程和函数)
--服务器公钥路径 包含RSA公钥的文件路径
--设置字符集 将SET NAMES default_character_set添加到输出
--设置GTID已清除 是否将SET @@GLOBAL.GTID_PURGED添加到输出
--共享内存基名 共享内存名称(仅限Windows)
--跳过次要引擎 从CREATE TABLE语句中排除SECONDARY ENGINE子句
--单个事务 在从服务器转储数据之前发出BEGIN SQL语句
--跳过添加DROP TABLE 不添加DROP TABLE语句在每个CREATE TABLE语句之前
--跳过添加锁 不添加锁
--跳过注释 不添加注释到转储文件
--跳过紧凑 不生成紧凑输出
--跳过禁用键 不禁用键
--跳过扩展插入 关闭扩展插入
--跳过生成的不可见主键 不包括生成的不可见主键在转储文件中
--跳过优化 关闭--opt选项
--跳过快速 不从服务器逐行检索表的行
--跳过引号名称 不引号标识符
--跳过设置字符集 不写入SET NAMES语句
--跳过触发器 不转储触发器
--跳过时区UTC 关闭时区UTC
--套接字 Unix套接字文件或Windows命名管道
--源数据 将二进制日志文件名和位置写入输出
--ssl-ca 包含受信任的SSL证书颁发机构的文件
--ssl-capath 包含受信任的SSL证书颁发机构证书文件的目录
--ssl-cert 包含X.509证书的文件
--ssl-cipher 连接加密的可接受密码
--ssl-crl 包含证书吊销列表的文件
--ssl-crlpath 包含证书吊销列表文件的目录
--ssl-fips模式 是否在客户端启用 FIPS 模式
--ssl-key 包含 X.509 密钥的文件
--ssl-mode 到服务器的连接的所需安全状态
--ssl-session-data 包含 SSL 会话数据的文件
--ssl-session-data-continue-on-failed-reuse 是否在会话重用失败时建立连接
--tab 生成制表符分隔的数据文件
--tables 覆盖 --databases 或 -B 选项
--tls-ciphersuites 加密连接的可接受 TLSv1.3 密码套件
--tls-sni-servername 客户端提供的服务器名称
--tls-version 加密连接的可接受 TLS 协议
--triggers 转储每个转储表的触发器
--tz-utc 将 SET TIME_ZONE='+00:00' 添加到转储文件
--user 连接到服务器时使用的 MySQL 用户名
--verbose 详细模式
--version 显示版本信息并退出
--where 仅转储由给定 WHERE 条件选择的行
--xml 生成 XML 输出
--zstd-compression-level 使用 zstd 压缩的连接的压缩级别

连接选项

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

选项文件选项

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

DDL 选项

使用场景包括设置整个新的 MySQL 实例(包括数据库表),并将现有实例中的数据替换为现有的数据库和表。以下选项允许您指定在还原转储文件时要破坏和设置的内容,通过在转储文件中编码各种 DDL 语句。

调试选项

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

  • --allow-keywords

    Command-Line Format --allow-keywords

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

  • --comments, -i

    Command-Line Format --comments

    在转储文件中写入附加信息,例如程序版本、服务器版本和主机。这选项默认启用。要抑制这些附加信息,请使用 --skip-comments

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

    Command-Line Format --debug[=debug_options]
    Type 字符串
    Default Value d:t:o,/tmp/mysqldump.trace

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

    只有在 MySQL 使用 WITH_DEBUG 选项构建时,才可以使用该选项。 Oracle 提供的 MySQL 发行版二进制文件 使用该选项构建。

  • --debug-check

    Command-Line Format --debug-check
    Type 布尔值
    Default Value FALSE

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

    只有在 MySQL 使用 WITH_DEBUG 选项构建时,才可以使用该选项。 Oracle 提供的 MySQL 发行版二进制文件 使用该选项构建。

  • --debug-info

    Command-Line Format --debug-info
    Type 布尔值
    Default Value FALSE

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

    只有在 MySQL 使用 WITH_DEBUG 选项构建时,才可以使用该选项。 Oracle 提供的 MySQL 发行版二进制文件 使用该选项构建。

  • --dump-date

    Command-Line Format --dump-date
    Type 布尔值
    Default Value TRUE

    如果给定了 --comments 选项,mysqldump 在转储文件的末尾生成以下形式的注释:

    -- Dump completed on DATE

    然而,日期使得在不同时间拍摄的转储文件看起来不同,即使数据否则相同。--dump-date--skip-dump-date 控制是否将日期添加到注释中。默认是 --dump-date(在注释中包括日期)。 --skip-dump-date 取消日期打印。

  • --force, -f

    Command-Line Format --force

    忽略所有错误;即使在表转储期间发生 SQL 错误,也继续执行。

    该选项的一个用途是使 mysqldump 继续执行,即使遇到无效的视图,因为视图的定义引用了已删除的表。没有 --forcemysqldump 将退出并显示错误消息。使用 --forcemysqldump 将打印错误消息,但也将视图定义写入转储输出并继续执行。

    如果也给出了 --ignore-error 选项以忽略特定错误,--force 优先。

  • --log-error=file_name

    Command-Line Format --log-error=file_name
    Type 文件名

    将警告和错误追加到指定文件中。默认是不进行日志记录。

  • --skip-comments

    Command-Line Format --skip-comments

    请参阅 --comments 选项的描述。

  • --verbose, -v

    Command-Line Format --verbose

    详细模式。打印程序执行的更多信息。

帮助选项

以下选项显示关于 mysqldump 命令自身的信息。

  • --help, -?

    Command-Line Format --help

    显示帮助信息并退出。

  • --version, -V

    Command-Line Format --version

    显示版本信息并退出。

国际化选项

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

复制选项

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

  • --apply-replica-statements

    Command-Line Format --apply-replica-statements
    Type 布尔值
    Default Value FALSE

    对于使用 --dump-replica 选项生成的副本转储,添加一个 STOP REPLICA 语句在二进制日志坐标语句之前,并在输出的末尾添加一个 START REPLICA 语句。

  • --应用从属语句

    Command-Line Format --应用从属语句
    Deprecated
    Type 布尔值
    Default Value FALSE

    这是一个 deprecated 别名为 --应用副本语句

  • --删除源日志

    Command-Line Format --删除源日志

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

  • --删除主日志

    Command-Line Format --删除主日志
    Deprecated

    这是一个 deprecated 别名为 --删除源日志

  • --转储副本[=]

    Command-Line Format --转储副本[=值]
    Type 数字
    Default Value 1
    Valid Values

    1

    2

    该选项类似于 --源数据,except that it's used to dump a 副本服务器以生成一个转储文件,该文件可以用于设置另一个服务器作为副本,该副本具有与被转储服务器相同的源。该选项会导致转储输出包括一个 CHANGE REPLICATION SOURCE TO 语句,该语句指示了被转储副本的源二进制日志坐标(文件名和位置)。该 CHANGE REPLICATION SOURCE TO 语句从 SHOW REPLICA STATUS 输出中读取 Relay_Master_Log_FileExec_Master_Log_Pos 的值,并将其用于 SOURCE_LOG_FILESOURCE_LOG_POS 分别。这是从中复制的源服务器坐标。

    Note

    从中继日志执行的交易不一致可能会导致错误的位置被使用。请参阅 第 19.5.1.34 节,“复制和交易不一致” 了解更多信息。

    --转储副本 使用源坐标,而不是被转储服务器的坐标,如 --源数据 所做的那样。此外,指定该选项将覆盖 --源数据 选项。

    Warning

    --转储副本 不应在要应用转储的服务器使用 gtid_mode=ONSOURCE_AUTO_POSITION=1 时使用。

    该选项值的处理方式与 --源数据 相同。设置无值或 1 将导致 CHANGE REPLICATION SOURCE TO 语句被写入转储中。设置 2 将导致语句被写入,但被 SQL 注释所包围。它与 --源数据 在启用或禁用其他选项和锁定处理方面具有相同的效果。

    --转储副本 导致 mysqldump 在转储之前停止复制 SQL 线程,并在转储后重新启动它。

    --dump-replica 将发送一个 SHOW REPLICA STATUS 语句到服务器,以获取信息,因此需要执行该语句所需的权限。

    --apply-replica-statements--include-source-host-port 选项可以与 --dump-replica 一起使用。

  • --dump-slave[=value]

    Command-Line Format --dump-slave[=value]
    Deprecated
    Type 数字
    Default Value 1
    Valid Values

    1

    2

    这是 --dump-replica 的废弃别名。

  • --include-source-host-port

    Command-Line Format --include-source-host-port
    Type 布尔
    Default Value FALSE

    SOURCE_HOSTSOURCE_PORT 选项添加到使用 --dump-replica 选项生成的副本转储中的 CHANGE REPLICATION SOURCE TO 语句中。

  • --include-master-host-port

    Command-Line Format --include-master-host-port
    Deprecated
    Type 布尔
    Default Value FALSE

    这是 --include-source-host-port 的废弃别名。

  • --master-data[=value]

    Command-Line Format --master-data[=value]
    Deprecated
    Type 数字
    Default Value 1
    Valid Values

    1

    2

    这是 --source-data 的废弃别名。

  • --output-as-version=value

    Command-Line Format --output-as-version=value
    Type 枚举
    Default Value SERVER
    Valid Values

    BEFORE_8_0_23

    BEFORE_8_2_0

    确定了副本和事件相关语句的术语级别,使得可以创建与旧版本 MySQL 兼容的转储。此选项可以取以下任何一个值,效果如下所述:

    • SERVER:读取服务器版本并使用与该版本兼容的最新语句。这是默认值。

    • BEFORE_8_0_23:将副本 SQL 语句使用废弃的术语,如 slavemaster,写入输出中,而不是使用 replicasource,如 MySQL 8.0.23 之前的版本。

      此选项还会对 SHOW CREATE EVENT 的输出产生影响。

    • BEFORE_8_2_0:此选项会使 SHOW CREATE EVENT 反映 MySQL 服务器 8.2.0 之前的版本中事件的创建方式,显示 DISABLE ON SLAVE 而不是 DISABLE ON REPLICA

    该选项影响--events--dump-replica--source-data--apply-replica-statements--include-source-host-port的输出。

    从 MySQL 8.2.0 版本添加。

  • --source-data[=]

    Command-Line Format --source-data[=值]
    Type 数字
    Default Value 1
    Valid Values

    1

    2

    用于将复制源服务器转储到生成一个转储文件,以便在另一个服务器上设置为源服务器的副本。该选项会导致转储输出包括一个CHANGE REPLICATION SOURCE TO语句,该语句指示了被转储服务器的二进制日志坐标(文件名和位置),这些坐标将是副本服务器从中开始复制的坐标。

    如果选项值为 2,则CHANGE REPLICATION SOURCE TO语句将作为 SQL 注释写入,从而没有实际效果。当选项值为 1 时,该语句将被写入并生效。如果没有指定选项值,默认值为 1。

    --source-data 将发送一个SHOW BINARY LOG STATUS语句到服务器,以获取信息,因此需要执行该语句的权限。此选项还需要RELOAD权限,并且二进制日志必须启用。

    --source-data 自动关闭--lock-tables。它们还打开--lock-all-tables--single-transaction也被指定,在这种情况下,仅在转储开始时获取全局读锁(见--single-transaction的描述)。在所有情况下,日志操作都发生在转储的确切时刻。

    也可以通过转储现有的源服务器副本来设置副本,使用--dump-replica选项,该选项将覆盖--source-data,使其被忽略。

  • --set-gtid-purged=

    Command-Line Format --set-gtid-purged=值
    Type 枚举
    Default Value AUTO
    Valid Values

    OFF

    ON

    AUTO

    此选项适用于使用基于GTID的复制的服务器 (gtid_mode=ON)。它控制在转储输出中包括一个 SET @@GLOBAL.gtid_purged 语句,该语句在服务器上重新加载转储文件时更新 gtid_purged 的值,以添加源服务器的 gtid_executed 系统变量中的GTID集。gtid_purged 持有服务器上应用的所有事务的GTID,但这些事务不在服务器的任何二进制日志文件中。mysqldump 因此添加了源服务器上执行的事务的GTID,以便目标服务器记录这些事务为已应用,尽管它们不在其二进制日志中。--set-gtid-purged 选项还控制了一个 SET @@SESSION.sql_log_bin=0 语句的包括,该语句在重新加载转储文件时禁用二进制日志记录,以防止新的GTID被生成并分配给转储文件中的事务。

    如果您不设置 --set-gtid-purged 选项,默认情况下,如果服务器启用了GTID,并且 gtid_executed 系统变量的全局值不为空,则将在转储输出中包括一个 SET @@GLOBAL.gtid_purged 语句。还将包括一个 SET @@SESSION.sql_log_bin=0 语句,如果服务器启用了GTID。

    您可以将 gtid_purged 的值替换为指定的GTID集,或者在语句中添加一个加号 (+) 以将指定的GTID集追加到 gtid_purged 的值中。mysqldump 记录的 SET @@GLOBAL.gtid_purged 语句包括一个版本特定的注释,以便MySQL将GTID集从转储文件添加到现有的 gtid_purged 值中。

    需要注意的是,mysqldumpSET @@GLOBAL.gtid_purged 语句包括的值包括服务器上 gtid_executed 集中的所有事务的GTID,即使这些事务更改了数据库的某些部分,或者其他数据库在服务器上没有包括在部分转储中。这可能意味着,在目标服务器上重新加载转储文件后,GTID集将包含不相关的GTID,这些GTID不属于目标服务器上的任何数据。如果您不重新加载其他转储文件到目标服务器上,这些额外的GTID不会对服务器的未来操作造成任何问题,但它们使得在复制拓扑结构中比较或协调GTID集变得更加困难。如果您重新加载了其他转储文件到目标服务器上,其中包含相同的GTID(例如,来自同一源服务器的其他部分转储),那么任何 SET @@GLOBAL.gtid_purged 语句在第二个转储文件中将失败。在这种情况下,您可以手动删除语句,然后重新加载转储文件,或者输出转储文件时不包括语句。

    如果 SET @@GLOBAL.gtid_purged 语句在目标服务器上不产生所需的结果,您可以从输出中排除语句,或者将其注释掉,以便在重新加载转储文件时不自动执行。您也可以包括语句,但手动编辑转储文件以达到所需的结果。

    以下是 --set-gtid-purged 选项的可能值:

    AUTO

    默认值。如果服务器启用了GTID,并且 gtid_executed 不为空,则 SET @@GLOBAL.gtid_purged 将被添加到输出中,包含 gtid_executed 中的GTID集。如果服务器启用了GTID,则 SET @@SESSION.sql_log_bin=0 将被添加到输出中。如果服务器没有启用GTID,则语句将不会被添加到输出中。

    OFF

    SET @@GLOBAL.gtid_purged 不会添加到输出中,并且 SET @@SESSION.sql_log_bin=0 不会添加到输出中。对于不使用 GTIDs 的服务器,使用此选项或 AUTO。仅当您确定目标服务器上的 GTID 集合已经存在于 gtid_purged 中且不应更改时,或者您计划手动添加缺少的 GTIDs 时,才使用此选项。

    ON

    如果备份服务器上启用了 GTIDs,SET @@GLOBAL.gtid_purged 将添加到输出中(除非 gtid_executed 为空),并且 SET @@SESSION.sql_log_bin=0 将添加到输出中。如果您设置了此选项但服务器上未启用 GTIDs,将发生错误。对于启用 GTIDs 的服务器,使用此选项或 AUTO,除非您确定目标服务器上的 GTIDs 在 gtid_executed 中不需要。

    COMMENTED

    如果备份服务器上启用了 GTIDs,SET @@GLOBAL.gtid_purged 将添加到输出中(除非 gtid_executed 为空),但它将被注释掉。这意味着 gtid_executed 的值将在输出中可用,但是在重新加载转储文件时不会自动采取行动。SET @@SESSION.sql_log_bin=0 将添加到输出中,并且不会被注释掉。使用 COMMENTED,您可以手动或通过自动化控制 gtid_executed 集合的使用。例如,如果您正在将数据迁移到已经具有不同活动数据库的另一个服务器上,您可能会这样做。

格式选项

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

  • --compact

    Command-Line Format --compact

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

  • --compatible=name

    Command-Line Format --compatible=name[,name,...]
    Type 字符串
    Default Value ''
    Valid Values

    ansi

    mysql323

    mysql40

    postgresql

    oracle

    mssql

    db2

    maxdb

    no_key_options

    no_table_options

    no_key_options

    生成与其他数据库系统或旧版本 MySQL 服务器更兼容的输出。该选项的唯一允许值是 ansi,它与服务器 SQL 模式的对应选项具有相同的含义。请参阅 第 7.1.11 节,“服务器 SQL 模式”

  • --complete-insert, -c

    Command-Line Format --complete-insert

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

  • --create-options

    Command-Line Format --create-options

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

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

    Command-Line Format --fields-terminated-by=string
    Type 字符串
    Command-Line Format --fields-enclosed-by=string
    Type 字符串
    Command-Line Format --fields-optionally-enclosed-by=string
    Type 字符串
    Command-Line Format --fields-escaped-by
    Type 字符串

    这些选项与 --tab 选项一起使用,具有与 FIELDS 子句相同的含义 LOAD DATA。见 第 15.2.9 节,“LOAD DATA 语句”

  • --hex-blob

    Command-Line Format --hex-blob

    使用十六进制表示形式转储二进制列(例如,'abc' 变为 0x616263)。受影响的数据类型是 BINARYVARBINARYBLOB 类型、BIT,所有空间数据类型,以及使用 binary 字符集 的其他非二进制数据类型。

    当使用 --tab 时,忽略 --hex-blob 选项。

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

    Command-Line Format --lines-terminated-by=string
    Type 字符串

    该选项与 --tab 选项一起使用,具有与 LINES 子句相同的含义 LOAD DATA。见 第 15.2.9 节,“LOAD DATA 语句”

  • --quote-names, -Q

    Command-Line Format --quote-names
    Disabled by skip-quote-names

    ` 字符中引用标识符(例如数据库、表和列名)。如果启用了 ANSI_QUOTES SQL 模式,则标识符将在 " 字符中引用。此选项默认启用,可以使用 --skip-quote-names 禁用,但这应该在任何可能启用 --quote-names 的选项(例如 --compatible)之后。

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

    Command-Line Format --result-file=file_name
    Type 文件名

    将输出直接写入指定的文件中。结果文件将被创建,并且其先前的内容将被覆盖,即使在生成转储时发生错误。

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

  • --显示创建跳过次要引擎=

    Command-Line Format --显示创建跳过次要引擎

    CREATE TABLE 语句中排除 SECONDARY ENGINE 子句。它通过在转储操作期间启用 show_create_table_skip_secondary_engine 系统变量来实现。或者,您可以在使用 mysqldump 之前启用 show_create_table_skip_secondary_engine 系统变量。

  • --tab=dir_name, -T dir_name

    Command-Line Format --tab=dir_name
    Type 目录名称

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

    Note

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

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

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

  • --tz-utc

    Command-Line Format --tz-utc
    Disabled by skip-tz-utc

    此选项启用 TIMESTAMP 列在不同时区的服务器之间的转储和重新加载。 mysqldump 将其连接时区设置为 UTC,并将 SET TIME_ZONE='+00:00' 添加到转储文件中。否则,TIMESTAMP 列将在源服务器和目标服务器的本地时区中转储和重新加载,这可能会导致值更改。如果服务器在不同的时区中,--tz-utc 也可以防止夏令时的更改。--tz-utc 默认启用。要禁用它,请使用 --skip-tz-utc

  • --xml, -X

    Command-Line Format --xml

    将转储输出写入格式良好的 XML。

    NULL'NULL' 和空值: 对于一个名为 column_name 的列,NULL 值、空字符串和字符串值 'NULL' 在输出中是区分开的,如下所示。

    Value: XML Representation:
    NULL (未知值)

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

    '' (空字符串)

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

    'NULL' (字符串值)

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

    使用 mysql 客户端时,输出也遵循上述规则。(见 第 6.5.1.1 节,“mysql 客户端选项”。)

    使用 mysqldump 生成的 XML 输出包括 XML 命名空间,如下所示:

    $> mysqldump --xml -u root world City
    <?xml version="1.0"?>
    <mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <database name="world">
    <table_structure name="City">
    <field Field="ID" Type="int(11)" Null="NO" Key="PRI" Extra="auto_increment" />
    <field Field="Name" Type="char(35)" Null="NO" Key="" Default="" Extra="" />
    <field Field="CountryCode" Type="char(3)" Null="NO" Key="" Default="" Extra="" />
    <field Field="District" Type="char(20)" Null="NO" Key="" Default="" Extra="" />
    <field Field="Population" Type="int(11)" Null="NO" Key="" Default="0" Extra="" />
    <key Table="City" Non_unique="0" Key_name="PRIMARY" Seq_in_index="1" Column_name="ID"
    Collation="A" Cardinality="4079" Null="" Index_type="BTREE" Comment="" />
    <options Name="City" Engine="MyISAM" Version="10" Row_format="Fixed" Rows="4079"
    Avg_row_length="67" Data_length="273293" Max_data_length="18858823439613951"
    Index_length="43008" Data_free="0" Auto_increment="4080"
    Create_time="2007-03-31 01:47:01" Update_time="2007-03-31 01:47:02"
    Collation="latin1_swedish_ci" Create_options="" Comment="" />
    </table_structure>
    <table_data name="City">
    <row>
    <field name="ID">1</field>
    <field name="Name">Kabul</field>
    <field name="CountryCode">AFG</field>
    <field name="District">Kabol</field>
    <field name="Population">1780000</field>
    </row>
    
    ...
    
    <row>
    <field name="ID">4079</field>
    <field name="Name">Rafah</field>
    <field name="CountryCode">PSE</field>
    <field name="District">Rafah</field>
    <field name="Population">92020</field>
    </row>
    </table_data>
    </database>
    </mysqldump>

筛选选项

以下选项控制哪些模式对象被写入转储文件:按类别,例如触发器或事件;按名称,例如选择要转储的数据库和表;或者使用 WHERE 子句从表数据中筛选行。

  • --all-databases, -A

    Command-Line Format --all-databases

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

    Note

    请参阅 --add-drop-database 描述,以获取关于该选项与 --all-databases 的不兼容信息。

    在 MySQL 8.3 之前,--routines--events 选项对于 mysqldumpmysqlpump 不是必需的,以包括存储的例程和事件时使用 --all-databases 选项:转储包括 mysql 系统数据库,因此也包括 mysql.procmysql.event 表,其中包含存储的例程和事件定义。从 MySQL 8.3 开始,mysql.eventmysql.proc 表不再使用。相应对象的定义存储在数据字典表中,但这些表不被转储。要在使用 --all-databases 选项时包括存储的例程和事件,请明确使用 --routines--events 选项。

  • --databases, -B

    Command-Line Format --databases

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

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

    Note

    请参阅 --add-drop-database 描述,以了解该选项与 --databases 的不兼容性。

  • --events, -E

    Command-Line Format --events

    在输出中包括 Event Scheduler 事件 для转储的数据库。该选项需要对这些数据库具有 EVENT 权限。

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

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

    Command-Line Format --ignore-error=error[,error]...
    Type 字符串

    忽略指定的错误。该选项的值是一个逗号分隔的错误号列表,指定要忽略的错误。在 mysqldump 执行期间忽略这些错误。如果也给出了 --force 选项以忽略所有错误,--force 选项优先。

  • --ignore-table=db_name.tbl_name

    Command-Line Format --ignore-table=db_name.tbl_name
    Type 字符串

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

  • --ignore-views=boolean

    Command-Line Format --ignore-views
    Type 布尔值
    Default Value FALSE

    跳过转储文件中的表视图。该选项添加于 MySQL 8.2.0。

  • --init-command=str

    Command-Line Format --init-command=str
    Type 字符串

    在连接到 MySQL 服务器后执行的单个 SQL 语句。该定义重置了由它或 init-command-add 定义的现有语句。该选项添加于 MySQL 8.2.0。

  • --init-command-add=str

    Command-Line Format --init-command-add=str
    Type 字符串

    添加一个额外的 SQL 语句,以在连接或重新连接到 MySQL 服务器后执行。它可以与 --init-command 一起使用,但如果在 init-command 之前使用,则无效。该选项添加于 MySQL 8.2.0。

  • --no-data, -d

    Command-Line Format --no-data

    不要写入任何表行信息(即,不要转储表内容)。这在您只想转储表的 CREATE TABLE 语句时很有用(例如,通过加载转储文件来创建表的空副本)。

  • --routines, -R

    Command-Line Format --routines

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

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

  • --skip-generated-invisible-primary-key

    Command-Line Format --skip-generated-invisible-primary-key
    Type 布尔值
    Default Value FALSE

    该选项导致生成的不可见主键从输出中排除。有关更多信息,请参阅 第 15.1.20.11 节,“生成的不可见主键”

  • --tables

    Command-Line Format --tables

    覆盖 --databases-B 选项。mysqldump 将所有名称参数视为表名,位于该选项之后。

  • --triggers

    Command-Line Format --triggers
    Disabled by skip-triggers

    在输出中包括每个转储表的触发器。该选项默认启用;使用 --skip-triggers 禁用它。

    要转储表的触发器,您必须拥有该表的 TRIGGER 权限。

    允许多个触发器。mysqldump 按激活顺序转储触发器,以便在重新加载转储文件时,触发器以相同的激活顺序创建。然而,如果 mysqldump 转储文件包含多个触发器,用于同一个表的同一个触发事件和操作时间,那么尝试加载转储文件到较旧的服务器时将出现错误,该服务器不支持多个触发器。(有关解决方法,请参阅 降级说明;您可以将触发器转换为与较旧服务器兼容。)

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

    Command-Line Format --where='where_condition'

    仅转储由给定的 WHERE 条件所选定的行。命令解释器中的特殊字符需要在条件周围加引号。

    示例:

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

性能选项

以下选项对恢复操作的性能影响最大。对于大型数据集,恢复操作(处理转储文件中的 INSERT 语句)是最耗时的部分。在急需快速恢复数据时,请提前计划和测试该阶段的性能。对于需要数小时的恢复时间,您可能更喜欢备选的备份和恢复解决方案,例如 MySQL Enterprise Backup,用于 InnoDB-only 和混合使用数据库。

性能也受到 事务选项 的影响,主要是对于转储操作。

  • --column-statistics

    Command-Line Format --column-statistics
    Type 布尔值
    Default Value OFF

    ANALYZE TABLE 语句添加到输出中,以便在重新加载转储文件时生成直方图统计信息。该选项默认禁用,因为大型表的直方图生成可能需要很长时间。

  • --disable-keys, -K

    Command-Line Format --disable-keys

    对于每个表,使用INSERT语句,surround它们以/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句。这使得加载转储文件变得更快,因为索引是在所有行插入后创建的。此选项仅对MyISAM表的非唯一索引有效。

  • --extended-insert, -e

    Command-Line Format --extended-insert
    Disabled by skip-extended-insert

    使用多行语法编写INSERT语句,包括多个VALUES列表。这将生成较小的转储文件,并加速重新加载时的插入。

  • --insert-ignore

    Command-Line Format --insert-ignore

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

  • --max-allowed-packet=value

    Command-Line Format --max-allowed-packet=value
    Type 数字
    Default Value 25165824

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

    Note

    该选项的值特定于mysqldump,不得与 MySQL 服务器的max_allowed_packet系统变量混淆;服务器值不能被mysqldump的单个数据包超过,无论mysqldump选项的设置如何。

  • --mysqld-long-query-time=value

    Command-Line Format --mysqld-long-query-time=value
    Type 数字
    Default Value Server 全局设置

    设置会话值long_query_time系统变量。使用此选项,如果您想增加mysqldump查询的时间限制,以便它们被记录到慢查询日志文件中。mysqldump执行全表扫描,这意味着其查询经常超过全局long_query_time设置,该设置对常规查询很有用。默认全局设置为 10 秒。

    您可以使用--mysqld-long-query-time指定会话值,从 0(意味着mysqldump的每个查询都记录到慢查询日志文件中)到 31536000,即 365 天的秒数。对于mysqldump的选项,您只能指定整秒。当您不指定此选项时,服务器的全局设置将应用于mysqldump的查询。

  • --net-buffer-length=value

    Command-Line Format --net-buffer-length=value
    Type 数字
    Default Value 16384

    初始客户端/服务器通信缓冲区的大小。当创建多行INSERT语句(如使用--extended-insert--opt选项)时,mysqldump创建的行长达--net-buffer-length字节。如果您增加这个变量,请确保 MySQL 服务器net_buffer_length系统变量的值至少与此相同。

  • --network-timeout, -M

    Command-Line Format --network-timeout[={0|1}]
    Type 布尔值
    Default Value TRUE

    启用大型表的转储,通过将--max-allowed-packet设置为其最大值,并将网络读取和写入超时设置为大值。该选项默认启用。要禁用它,请使用--skip-network-timeout

  • --opt

    Command-Line Format --opt
    Disabled by skip-opt

    该选项,默认启用,是--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset的快捷方式。它提供了快速的转储操作,并生成可以快速重新加载到 MySQL 服务器的转储文件。

    因为--opt选项默认启用,因此您只需要指定其反义词--skip-opt来关闭几个默认设置。请参阅mysqldump选项组关于选择性启用或禁用--opt影响的选项的信息。

  • --quick, -q

    Command-Line Format --quick
    Disabled by skip-quick

    该选项对转储大型表非常有用。它强制mysqldump从服务器逐行检索表的行,而不是检索整个行集并将其缓存在内存中,然后写入。

  • --skip-opt

    Command-Line Format --skip-opt

    请参阅--opt选项的描述。

事务选项

以下选项在性能和可靠性之间进行权衡。

  • --add-locks

    Command-Line Format --add-locks

    在每个表转储之间添加LOCK TABLESUNLOCK TABLES语句。这将在重新加载转储文件时加速插入操作。请参阅第 10.2.5.1 节,“优化 INSERT 语句”

  • --刷新日志, -F

    Command-Line Format --刷新日志

    在开始转储之前刷新 MySQL 服务器日志文件。该选项需要 RELOAD 权限。如果您将该选项与 --所有数据库 选项结合使用,则每个被转储的数据库的日志都会被刷新。except when using --锁定所有表, --源数据, 或 --单个事务。在这些情况下,日志仅在所有表被锁定时刷新一次,相应于 FLUSH TABLES WITH READ LOCK 的时刻。如果您想让转储和日志刷新同时发生,请使用 --刷新日志--锁定所有表, --源数据, 或 --单个事务

  • --刷新权限

    Command-Line Format --刷新权限

    FLUSH PRIVILEGES 语句添加到转储输出中,在转储 mysql 数据库后。这选项应该在转储包含 mysql 数据库和任何其他依赖于 mysql 数据库数据的数据库时使用。

    因为转储文件包含 FLUSH PRIVILEGES 语句,因此重新加载文件需要足够的权限来执行该语句。

    Note

    对于从旧版本升级到 MySQL 5.7 或更高版本,不要使用 --刷新权限。对于这种情况的升级说明,请参阅 第 3.5 节,“MySQL 8.3 中的变化”

  • --锁定所有表, -x

    Command-Line Format --锁定所有表

    跨所有数据库锁定所有表。这是通过获取全局读锁来实现的,锁定整个转储过程。这选项自动关闭 --单个事务--锁定表

  • --锁定表, -l

    Command-Line Format --锁定表

    对于每个被转储的数据库,锁定要转储的所有表。在转储 MyISAM 表时,使用 READ LOCAL 锁以允许并发插入。在转储事务表(如 InnoDB)时,--单个事务 是一个更好的选择,因为它不需要锁定表。

    因为 --锁定表 对每个数据库单独锁定表,因此该选项不能保证转储文件中的表在不同数据库之间逻辑一致。

    一些选项,如 --opt, 自动启用 --锁定表。如果您想覆盖该选项,请在选项列表末尾使用 --skip-lock-tables

  • --不自动提交

    Command-Line Format --不自动提交

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

  • --按主键排序

    Command-Line Format --按主键排序

    将每个表的行排序到其主键,或者如果存在唯一索引,则排序到该索引。这在将 MyISAM 表dump到 InnoDB 表时非常有用,但这将使dump操作时间大大增加。

  • --共享内存基准名称=名称

    Command-Line Format --共享内存基准名称=名称
    Platform Specific Windows

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

    该选项仅在服务器启动时启用了 shared_memory 系统变量以支持共享内存连接时生效。

  • --单个事务

    Command-Line Format --单个事务

    该选项将事务隔离模式设置为 可重复读,并在dump数据之前向服务器发送 START TRANSACTION SQL 语句。它仅对事务表(如 InnoDB)有用,因为它dump数据库的一致状态,而不阻塞任何应用程序。

    需要 RELOAD 或 FLUSH_TABLES 权限与 --单个事务 一起使用,如果 gtid_mode=ON 且 --set-gtid=purged=ON|AUTO。

    使用该选项时,需要注意只有 InnoDB 表被dump到一致状态。例如,任何 MyISAMMEMORY 表在使用该选项时dump的状态可能仍然会改变。

    在使用 --单个事务 dump 时,为了确保有效的dump文件(正确的表内容和二进制日志坐标),不应在其他连接中使用以下语句:ALTER TABLECREATE TABLEDROP TABLERENAME TABLETRUNCATE TABLE。一致读取不是从这些语句中隔离的,因此在要dump的表上使用这些语句可能会导致 SELECT 语句(由 mysqldump 执行)检索表内容时获得不正确的内容或失败。

    选项 --单个事务--锁定表 是互斥的,因为 LOCK TABLES 会隐式提交任何挂起的事务。

    要dump大型表,请将 --单个事务 选项与 --快速 选项结合使用。

选项组

  • 选项 --opt 将多个设置组合在一起,以执行快速dump操作。所有这些设置默认情况下都是启用的,因为 --opt 默认情况下是启用的。因此,您很少指定 --opt。相反,您可以通过指定 --skip-opt 来关闭这些设置,然后在命令行上重新启用相关选项。

  • --compact 选项关闭了控制可选语句和注释在输出中的显示的几个设置。再次,您可以跟随该选项使用其他选项重新启用某些设置,或者使用 --skip-compact 形式启用所有设置。

当您选择性地启用或禁用组选项时,顺序很重要,因为选项是从第一到最后处理的。例如, --disable-keys --lock-tables --skip-opt 不会产生预期的效果;它与 --skip-opt 本身相同。

示例

要备份整个数据库:

mysqldump db_name > backup-file.sql

要将转储文件重新加载到服务器:

mysql db_name < backup-file.sql

重新加载转储文件的另一种方式:

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

mysqldump 也非常有用,用于通过从一个 MySQL 服务器复制数据到另一个 MySQL 服务器来填充数据库:

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

您可以使用一个命令转储多个数据库:

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

要转储所有数据库,使用 --all-databases 选项:

mysqldump --all-databases > all_databases.sql

对于 InnoDB 表, mysqldump 提供了一种在线备份方式:

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

该备份在转储开始时获取所有表的全局读锁(使用 FLUSH TABLES WITH READ LOCK),然后读取二进制日志坐标并释放锁。 如果长更新语句在 FLUSH 语句发出时正在运行,MySQL 服务器可能会等待这些语句完成。 之后,转储将变为锁定免费,不会干扰表的读取和写入。

对于点时间恢复(也称为 回滚,” 当您需要恢复旧备份并重新播放自该备份以来的更改时),通常需要旋转二进制日志(见 第 7.4.4 节,“二进制日志”)或至少知道转储对应的二进制日志坐标:

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

或:

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

可以同时使用 --source-data 选项和 --single-transaction 选项,这提供了一种方便的方式来制作在线备份,用于点时间恢复,如果表存储使用 InnoDB 存储引擎。

有关备份的更多信息,请参阅 第 9.2 节,“数据库备份方法”第 9.3 节,“示例备份和恢复策略”

限制

mysqldump 不会默认转储 performance_schemasys 模式。要转储任何这些,需要在命令行上明确命名它们。您也可以使用 --databases 选项命名它们。对于 performance_schema,还需要使用 --skip-lock-tables 选项。

mysqldump 不会转储 INFORMATION_SCHEMA 模式。

mysqldump 不会转储 InnoDB CREATE TABLESPACE 语句。

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

mysqldump 包括重新创建 general_logslow_query_log 表的语句,以便转储 mysql 数据库。日志表内容不会被转储。

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