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  /  ...  /  mysqlbinlog — Utility for Processing Binary Log Files

6.6.9 mysqlbinlog — 二进制日志文件处理实用程序

服务器的二进制日志由包含描述数据库内容修改的事件的文件组成。服务器以二进制格式写入这些文件。要以文本格式显示它们的内容,请使用 mysqlbinlog 实用程序。你也可以使用 mysqlbinlog 来显示复制设置中的relay日志文件的内容,因为relay日志具有与二进制日志相同的格式。二进制日志和relay日志在 第 7.4.4 节,“二进制日志”第 19.2.4 节,“relay日志和复制元数据存储库” 中进一步讨论。

使用以下方式调用 mysqlbinlog

mysqlbinlog [options] log_file ...

例如,要显示名为 binlog.000003 的二进制日志文件的内容,请使用以下命令:

mysqlbinlog binlog.000003

输出包括 binlog.000003 中的事件。对于基于语句的日志记录,事件信息包括执行的 SQL 语句、执行语句的服务器 ID、执行时间戳、执行时间等等。对于基于行的日志记录,事件表示行更改,而不是 SQL 语句。请参阅 第 19.2.1 节,“复制格式”,以获取关于日志记录模式的信息。

事件前面是头注释,提供了附加信息。例如:

# at 141
#100309  9:28:36 server id 123  end_log_pos 245
  Query thread_id=3350  exec_time=11  error_code=0

在第一行,at 后面的数字表示事件在二进制日志文件中的文件偏移量或起始位置。

第二行以日期和时间开始,表示语句在源服务器上开始执行的时间戳。对于复制,这个时间戳将被传播到副本服务器。server id 是事件来源服务器的 server_id 值。end_log_pos 表示下一个事件的起始位置(即当前事件的结束位置 + 1)。thread_id 表示执行事件的线程。exec_time 是执行事件所花费的时间,在源服务器上执行事件的时间。在副本服务器上,它是副本服务器上执行事件的结束时间减去源服务器上执行事件的开始时间。差异表示复制落后于源服务器的程度。error_code 表示执行事件的结果。零表示没有错误发生。

Note

使用事件组时,事件的文件偏移量可能会被分组在一起,事件的注释也可能被分组在一起。不要将这些分组事件误认为是空文件偏移量。

mysqlbinlog 的输出可以被重新执行(例如,使用它作为输入到 mysql)以重新执行日志中的语句。这对于意外服务器退出后的恢复操作非常有用。有关其他用法示例,请参阅本节和 第 9.5 节,“点时间(增量)恢复” 的讨论。要执行 mysqlbinlog 使用的内部使用 BINLOG 语句,用户需要 BINLOG_ADMIN 权限(或已弃用的 SUPER 权限),或 REPLICATION_APPLIER 权限加上执行每个日志事件所需的权限。

您可以使用 mysqlbinlog 直接读取二进制日志文件并将其应用于本地 MySQL 服务器。您也可以使用 --read-from-remote-server 选项从远程服务器读取二进制日志。要读取远程二进制日志,连接参数选项可以指定如何连接到服务器。这些选项是 --host--password--port--protocol--socket--user

当二进制日志文件被加密时,从 MySQL 8.0.14 开始,mysqlbinlog 无法直接读取它们,但可以使用 --read-from-remote-server 选项从服务器读取它们。二进制日志文件在服务器的 binlog_encryption 系统变量设置为 ON 时被加密。SHOW BINARY LOGS 语句显示特定二进制日志文件是否加密或未加密。加密和未加密的二进制日志文件也可以使用文件头部的魔数字(加密日志文件为 0xFD62696E,未加密日志文件为 0xFE62696E)来区分。注意,从 MySQL 8.0.14 开始,mysqlbinlog 如果尝试直接读取加密的二进制日志文件,将返回适当的错误,而旧版本的 mysqlbinlog 不会将文件识别为二进制日志文件。有关二进制日志加密的更多信息,请参阅 第 19.3.2 节,“加密二进制日志文件和中继日志文件”

当二进制日志事务负载被压缩时,可以从 MySQL 8.0.20 开始,mysqlbinlog 版本从该版本开始自动解压缩和解码事务负载,并将其打印为未压缩的事件。 旧版本的 mysqlbinlog 无法读取压缩的事务负载。 当服务器的 binlog_transaction_compression 系统变量设置为 ON 时,事务负载将被压缩,然后写入服务器的二进制日志文件作为单个事件(一个 Transaction_payload_event)。 使用 --verbose 选项,mysqlbinlog 添加注释,说明压缩算法的使用、原始压缩负载的大小和解压缩后的负载大小。

Note

结束位置(end_log_pos)是 mysqlbinlog 声明的单个事件的结束位置,该事件是压缩事务负载的一部分。因此,多个解压缩事件可以具有相同的结束位置。

mysqlbinlog 自己的连接压缩对已经压缩的事务负载进行少量处理,但仍然对未压缩的事务和头进行操作。

有关二进制日志事务压缩的更多信息,请参阅 第 7.4.4.5 节,“二进制日志事务压缩”

在运行 mysqlbinlog 对大型二进制日志时,请小心文件系统是否有足够的空间来存储结果文件。要配置 mysqlbinlog 使用的临时文件目录,请使用 TMPDIR 环境变量。

mysqlbinlog 在执行任何 SQL 语句之前将 pseudo_replica_mode 系统变量设置为 true。该系统变量影响 XA 事务的处理、original_commit_timestamp 复制延迟时间戳和 original_server_version 系统变量,以及不支持的 SQL 模式。

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

表 6.22 mysqlbinlog 选项

Option Name Description
--base64-output 使用 base-64 编码打印二进制日志条目
--bind-address 使用指定的网络接口连接到 MySQL 服务器
--binlog-row-event-max-size 二进制日志最大事件大小
--character-sets-dir 字符集安装目录
--compress 压缩客户端和服务器之间的所有信息
--compression-algorithms 服务器连接的允许压缩算法
--connection-server-id 用于测试和调试。请参阅文本以获取适用的默认值和其他详细信息
--数据库 仅列出该数据库的条目
--调试 写入调试日志
--调试检查 程序退出时打印调试信息
--调试信息 程序退出时打印调试信息、内存和 CPU 统计信息
--默认身份验证 要使用的身份验证插件
--额外选项文件 除了通常的选项文件外,还读取命名的选项文件
--选项文件 仅读取命名的选项文件
--选项组后缀 选项组后缀值
--禁用二进制日志 禁用二进制日志记录
--排除 GTID 不显示提供的 GTID 集中的任何组
--强制读取 即使打开或未正确关闭,也读取二进制日志文件
--强制读取 如果 mysqlbinlog 读取到不认识的二进制日志事件,就打印警告
--获取服务器公钥 从服务器请求 RSA 公钥
--帮助 显示帮助信息并退出
--十六进制转储 在注释中显示日志的十六进制转储
--主机 MySQL 服务器所在的主机
--幂等 使服务器在处理本会话的二进制日志更新时使用幂等模式
--包括 GTID 仅显示提供的 GTID 集中的组
--本地加载 在指定目录中准备本地临时文件以供 LOAD DATA 使用
--登录路径 从 .mylogin.cnf 中读取登录路径选项
--不使用默认值 不读取任何选项文件
--不使用登录路径 不从登录路径文件中读取登录路径
--偏移量 跳过日志中的前 N 个条目
--密码 连接服务器时使用的密码
--插件目录 插件安装的目录
--端口 连接服务器时使用的 TCP/IP 端口号
--打印默认值 打印默认选项
--打印表元数据 打印表元数据
--协议 用于连接的传输协议
--原始格式 以原始(二进制)格式将事件写入输出文件
--从远程主服务器读取 从 MySQL 复制源服务器而不是本地日志文件中读取二进制日志
--从远程服务器读取 从 MySQL 服务器而不是本地日志文件中读取二进制日志
--从远程源服务器读取 从 MySQL 复制源服务器而不是本地日志文件中读取二进制日志
--需要行格式 需要基于行的二进制日志格式
--result-file 直接输出到命名文件
--rewrite-db 创建重写规则以便从行格式日志中回放时使用。可以多次使用
--server-id 仅提取由具有给定服务器 ID 的服务器创建的事件
--server-id-bits 告诉 mysqlbinlog 如何解释服务器 ID 在二进制日志中,当日志由具有小于最大值的 server-id-bits 的 mysqld 写入时;仅支持 MySQL 集群版本的 mysqlbinlog
--server-public-key-path 包含 RSA 公钥的文件路径
--set-charset 将 SET NAMES charset_name 语句添加到输出中
--shared-memory-base-name 共享内存名称(仅限 Windows)
--short-form 仅显示日志中的语句
--skip-gtids 不要在输出转储文件中包括二进制日志文件中的 GTIDs
--socket Unix 套接字文件或 Windows 命名管道
--ssl-ca 包含受信任的 SSL 证书颁发机构的文件
--ssl-capath 包含受信任的 SSL 证书颁发机构证书文件的目录
--ssl-cert 包含 X.509 证书的文件
--ssl-cipher 连接加密的可接受密码
--ssl-crl 包含证书吊销列表的文件
--ssl-crlpath 包含证书吊销列表文件的目录
--ssl-fips-mode 是否在客户端启用 FIPS 模式
--ssl-key 包含 X.509 密钥的文件
--ssl-mode 连接到服务器的所需安全状态
--ssl-session-data 包含 SSL 会话数据的文件
--ssl-session-data-continue-on-failed-reuse 是否在会话重用失败时建立连接
--start-datetime 从具有给定日期时间的第一个事件开始读取二进制日志
--start-position 从具有给定位置的第一个事件开始解码二进制日志
--stop-datetime 在达到具有给定日期时间的第一个事件时停止读取二进制日志
--stop-never 在读取最后一个二进制日志文件后保持与服务器的连接
--stop-never-slave-server-id 在连接到服务器时报告的从服务器 ID
--stop-position 在达到具有给定位置的第一个事件时停止解码二进制日志
--tls-ciphersuites 加密连接的可接受 TLSv1.3 密码套件
--tls-sni-servername 客户端提供的服务器名称
--tls-version 加密连接的可接受 TLS 协议
--to-last-log 不要在MySQL服务器的二进制日志的末尾停止,而是继续打印到最后一个二进制日志的末尾
--user 连接到服务器时使用的MySQL用户名
--verbose 将行事件重构为SQL语句
--verify-binlog-checksum 验证二进制日志的校验和
--version 显示版本信息并退出
--zstd-compression-level 连接到服务器时使用的zstd压缩级别

  • --help, -?

    Command-Line Format --help

    显示帮助信息并退出。

  • --base64-output=value

    Command-Line Format --base64-output=value
    Type 字符串
    Default Value AUTO
    Valid Values

    AUTO

    NEVER

    DECODE-ROWS

    该选项确定何时将事件显示为使用 BINLOG 语句的 base-64 字符串。该选项具有以下可接受值(不区分大小写):

    • AUTO (“自动”) 或 UNSPEC (“未指定”) 在需要时自动显示 BINLOG 语句(即,对于格式描述事件和行事件)。如果没有提供 --base64-output 选项,则效果与 --base64-output=AUTO 相同。

      Note

      自动 BINLOG 显示是唯一安全的行为,如果您打算使用 mysqlbinlog 的输出来重新执行二进制日志文件内容。其他选项值仅用于调试或测试目的,因为它们可能会生成不包括所有事件的可执行形式的输出。

    • NEVER 导致 BINLOG 语句不被显示。mysqlbinlog 如果找到必须使用 BINLOG 显示的行事件,则退出并显示错误。

    • DECODE-ROWS 指定 mysqlbinlog 将行事件解码并作为注释的 SQL 语句显示,同时指定 --verbose 选项。像 NEVER 一样,DECODE-ROWS 抑制 BINLOG 语句的显示,但与 NEVER 不同的是,它不会在找到行事件时退出并显示错误。

    有关 --base64-output--verbose 对行事件输出的影响的示例,请参阅 第 6.6.9.2 节,“mysqlbinlog 行事件显示”

  • --bind-address=ip_address

    Command-Line Format --bind-address=ip_address

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

  • --binlog-row-event-max-size=N

    Command-Line Format --binlog-row-event-max-size=#
    Type 数字
    Default Value 4294967040
    Minimum Value 256
    Maximum Value 18446744073709547520

    指定基于行的二进制日志事件的最大大小,以字节为单位。如果可能,将行分组到小于此大小的事件中。该值应为256的倍数。默认值为4GB。

  • --character-sets-dir=dir_name

    Command-Line Format --character-sets-dir=dir_name
    Type 目录名称

    字符集安装的目录。见 第 12.15 节,“字符集配置”

  • --compress

    Command-Line Format --compress[={OFF|ON}]
    Deprecated
    Type 布尔值
    Default Value OFF

    如果可能,压缩客户端和服务器之间的所有信息。见 第 6.2.8 节,“连接压缩控制”

    该选项在 MySQL 8.0.17 中添加。从 MySQL 8.0.18 开始,该选项已弃用。预计在未来版本的 MySQL 中删除该选项。见 配置遗留连接压缩

  • --compression-algorithms=value

    Command-Line Format --compression-algorithms=value
    Type 设置
    Default Value uncompressed
    Valid Values

    zlib

    zstd

    uncompressed

    服务器连接的允许压缩算法。可用的算法与 protocol_compression_algorithms 系统变量相同。默认值为 uncompressed

    更多信息,见 第 6.2.8 节,“连接压缩控制”

  • --connection-server-id=server_id

    Command-Line Format --connection-server-id=#]
    Type 整数
    Default Value 0 (1)
    Minimum Value 0 (1)
    Maximum Value 4294967295

    --connection-server-id 指定了 mysqlbinlog 连接到服务器时报告的服务器 ID。它可以用来避免与副本服务器或另一个 mysqlbinlog 进程的 ID 冲突。

    如果指定了 --read-from-remote-server 选项,mysqlbinlog 报告服务器 ID 0,这告诉服务器在发送最后一个日志文件后断开连接(非阻塞行为)。如果还指定了 --stop-never 选项以维持与服务器的连接,mysqlbinlog 报告服务器 ID 1,而不是 0,--connection-server-id 可以用来替换该服务器 ID 如果需要。见 第 6.6.9.4 节,“指定 mysqlbinlog 服务器 ID”

  • --数据库=db_name, -d db_name

    Command-Line Format --数据库=db_name
    Type 字符串

    该选项使 mysqlbinlog 输出二进制日志(仅本地日志)中的条目,而这些条目是在 db_name 被选为默认数据库时由 USE 选择的。

    --数据库 选项对于 mysqlbinlog--binlog-do-db 选项对于 mysqld 相似,但可以指定一个数据库。如果 --数据库 被多次指定,只有最后一个实例被使用。

    该选项的效果取决于是否使用基于语句的日志记录格式或基于行的日志记录格式,类似于 --binlog-do-db 选项的效果取决于是否使用基于语句的日志记录格式或基于行的日志记录格式。

    基于语句的日志记录 --数据库 选项的工作方式如下:

    • db_name 是默认数据库时,语句被输出,无论它们是否修改了 db_name 或其他数据库中的表。

    • 除非 db_name 被选为默认数据库,否则语句不会被输出,即使它们修改了 db_name 中的表。

    • 有一个例外情况,即 CREATE DATABASEALTER DATABASEDROP DATABASE。数据库被 创建、修改或删除 时被认为是默认数据库,以确定是否输出语句。

    假设二进制日志是通过使用基于语句的日志记录格式执行以下语句创建的:

    INSERT INTO test.t1 (i) VALUES(100);
    INSERT INTO db2.t2 (j)  VALUES(200);
    USE test;
    INSERT INTO test.t1 (i) VALUES(101);
    INSERT INTO t1 (i)      VALUES(102);
    INSERT INTO db2.t2 (j)  VALUES(201);
    USE db2;
    INSERT INTO test.t1 (i) VALUES(103);
    INSERT INTO db2.t2 (j)  VALUES(202);
    INSERT INTO t2 (j)      VALUES(203);

    mysqlbinlog --数据库=test 不输出前两个 INSERT 语句,因为没有默认数据库。它输出了 USE test 之后的三个 INSERT 语句,但不输出 USE db2 之后的三个 INSERT 语句。

    mysqlbinlog --数据库=db2 不输出前两个 INSERT 语句,因为没有默认数据库。它不输出 USE test 之后的三个 INSERT 语句,但输出 USE db2 之后的三个 INSERT 语句。

    基于行的日志记录。 mysqlbinlog 只输出更改属于 db_name 的表的条目。默认数据库没有影响此选项。假设使用基于行的日志记录而不是基于语句的日志记录创建的二进制日志。 mysqlbinlog --database=test 只输出修改 t1 在 test 数据库中的条目,无论是否发出 USE 语句或默认数据库是什么。

    如果服务器以 binlog_format 设置为 MIXED 运行,并且您想使用 mysqlbinlog--database 选项,您必须确保修改的表在 USE 语句选择的数据库中。(特别是,不应该使用跨数据库更新。)

    当与 --rewrite-db 选项一起使用时,首先应用 --rewrite-db 选项,然后应用 --database 选项,使用重写的数据库名称。在这种情况下,选项的顺序无关紧要。

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

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

    写入调试日志。典型的 debug_options 字符串是 d:t:o,file_name。默认值是 d:t:o,/tmp/mysqlbinlog.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 发行版二进制文件 使用这个选项。

  • --default-auth=plugin

    Command-Line Format --default-auth=plugin
    Type 字符串

    客户端身份验证插件的提示。请参阅 第 8.2.17 节,“可插拔身份验证”

  • --defaults-extra-file=file_name

    Command-Line Format --defaults-extra-file=file_name
    Type 文件名

    在全局选项文件之后但在用户选项文件之前读取此选项文件。如果文件不存在或不可访问,将发生错误。如果 file_name 不是绝对路径名,则相对于当前目录进行解释。

    有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“命令行选项影响选项文件处理”

  • --defaults-file=文件名

    Command-Line Format --defaults-file=文件名
    Type 文件名

    仅使用给定的选项文件。如果文件不存在或不可访问,将发生错误。如果 文件名 不是绝对路径名,则相对于当前目录进行解释。

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

    有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“命令行选项影响选项文件处理”

  • --defaults-group-suffix=字符串

    Command-Line Format --defaults-group-suffix=字符串
    Type 字符串

    不仅读取通常的选项组,还读取具有通常名称和 字符串 后缀的组。例如,mysqlbinlog 通常读取 [client][mysqlbinlog] 组。如果给出这个选项为 --defaults-group-suffix=_othermysqlbinlog 也将读取 [client_other][mysqlbinlog_other] 组。

    有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“命令行选项影响选项文件处理”

  • --disable-log-bin, -D

    Command-Line Format --disable-log-bin

    禁用二进制日志记录。这对于避免无限循环非常有用,如果您使用 --to-last-log 选项并将输出发送到同一个 MySQL 服务器上。这也在意外退出后恢复时避免重复记录语句。

    这个选项使 mysqlbinlog 在其输出中包含一条 SET sql_log_bin = 0 语句,以禁用二进制日志记录的剩余输出。操作会话变量 sql_log_bin 的值是一个受限操作,因此需要足够的权限来设置受限会话变量。请参阅 第 7.1.9.1 节,“系统变量权限”

  • --exclude-gtids=gtid_set

    Command-Line Format --exclude-gtids=gtid_set
    Type 字符串
    Default Value

    不显示 gtid_set 中的任何组。

  • --force-if-open, -F

    Command-Line Format --force-if-open

    即使二进制日志文件打开或未正确关闭(IN_USE 标志设置),也读取二进制日志文件;如果文件以截断事件结尾,不要失败。

    IN_USE 标志仅设置为当前服务器写入的二进制日志;如果服务器崩溃,该标志将保持设置直到服务器重新启动并恢复二进制日志。没有该选项,mysqlbinlog 将拒绝处理带有该标志的文件。由于服务器可能正在写入该文件,因此最后一个事件的截断被认为是正常的。

  • --force-read, -f

    Command-Line Format --force-read

    使用该选项,如果 mysqlbinlog 读取到一个未识别的二进制日志事件,它将打印警告,忽略该事件,并继续。如果没有该选项,mysqlbinlog 将停止读取该事件。

  • --get-server-public-key

    Command-Line Format --get-server-public-key
    Type 布尔值

    从服务器请求用于 RSA 密钥对基于密码交换的公钥。该选项适用于使用 caching_sha2_password 身份验证插件的客户端。对于该插件,服务器不会发送公钥,除非被请求。该选项将被忽略,如果客户端使用安全连接连接到服务器时,不使用基于 RSA 的密码交换。

    如果 --server-public-key-path=file_name 被指定并指定了一个有效的公钥文件,它将优先于 --get-server-public-key

    有关 caching_sha2_password 插件的信息,请参阅 第 8.4.1.2 节,“Caching SHA-2 Pluggable Authentication”

  • --hexdump, -H

    Command-Line Format --hexdump

    在注释中显示日志的十六进制转储,如 第 6.6.9.1 节,“mysqlbinlog Hex Dump Format” 所述。十六进制输出可能有助于复制调试。

  • --host=host_name, -h host_name

    Command-Line Format --host=host_name
    Type 字符串
    Default Value localhost

    从指定的主机上的 MySQL 服务器获取二进制日志。

  • --idempotent

    Command-Line Format --idempotent
    Type 布尔值
    Default Value true

    告诉 MySQL 服务器在处理更新时使用幂等模式;这将抑制服务器在当前会话中处理更新时遇到的任何重复键或键不存在错误。该选项可能在需要重放一个或多个二进制日志到可能不包含所有相关数据的 MySQL 服务器时非常有用。

    该选项的作用范围仅限于当前 mysqlbinlog 客户端和会话。

  • --include-gtids=gtid_set

    Command-Line Format --include-gtids=gtid_set
    Type 字符串
    Default Value

    仅显示 gtid_set 中列出的组。

  • --local-load=dir_name, -l dir_name

    Command-Line Format --local-load=dir_name
    Type 目录名

    对于对应于LOAD DATA语句的数据加载操作,mysqlbinlog从二进制日志事件中提取文件,写入临时文件到本地文件系统,并写入LOAD DATA LOCAL语句以加载文件。默认情况下,mysqlbinlog将这些临时文件写入操作系统特定的目录。可以使用--local-load选项来明确指定mysqlbinlog应该准备本地临时文件的目录。

    因为其他进程可以写入默认系统特定的目录中的文件,因此建议使用--local-load选项来指定不同的目录用于数据文件,然后使用--load-data-local-dir选项来指定该目录,以便mysql处理mysqlbinlog的输出。例如:

    mysqlbinlog --local-load=/my/local/data ...
        | mysql --load-data-local-dir=/my/local/data ...
    Important

    这些临时文件不会被mysqlbinlog或任何其他MySQL程序自动删除。

  • --login-path=name

    Command-Line Format --login-path=name
    Type 字符串

    从命名的登录路径文件中读取选项。一个登录路径是一个选项组,包含指定要连接的MySQL服务器和要验证的账户的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅第6.6.7节,“mysql_config_editor — MySQL配置实用程序”

    有关此选项和其他选项文件选项的更多信息,请参阅第6.2.2.3节,“命令行选项影响选项文件处理”

  • --no-login-paths

    Command-Line Format --no-login-paths

    跳过从登录路径文件中读取选项。

    请参阅--login-path以获取相关信息。

    有关此选项和其他选项文件选项的更多信息,请参阅第6.2.2.3节,“命令行选项影响选项文件处理”

  • --no-defaults

    Command-Line Format --no-defaults

    不读取任何选项文件。如果程序启动失败是由于从选项文件中读取未知选项,--no-defaults可以用于防止它们被读取。

    异常是,.mylogin.cnf 文件总是被读取,如果它存在。这允许密码以比命令行更安全的方式指定,即使使用 --no-defaults。要创建 .mylogin.cnf,使用 mysql_config_editor 实用程序。见 第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”

    有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“命令行选项影响选项文件处理”

  • --offset=N, -o N

    Command-Line Format --offset=#
    Type 数字

    跳过日志中的前 N 条目。

  • --open-files-limit=N

    Command-Line Format --open-files-limit=#
    Type 数字
    Default Value 8
    Minimum Value 1
    Maximum Value [平台相关]

    指定要保留的打开文件描述符的数量。

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

    Command-Line Format --password[=password]
    Type 字符串

    用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果不提供,mysqlbinlog 将提示输入。如果提供,必须在 --password=-p 和密码之间没有空格。如果不指定密码选项,默认情况下不发送密码。

    在命令行上指定密码应该被认为是不安全的。要避免在命令行上指定密码,请使用选项文件。见 第 8.1.2.1 节,“最终用户密码安全指南”

    要明确指定没有密码并且 mysqlbinlog 不应该提示输入,请使用 --skip-password 选项。

  • --plugin-dir=dir_name

    Command-Line Format --plugin-dir=dir_name
    Type 目录名称

    查找插件的目录。如果使用 --default-auth 选项指定身份验证插件,但 mysqlbinlog 找不到它。见 第 8.2.17 节,“可插拔身份验证”

  • --port=port_num, -P port_num

    Command-Line Format --port=port_num
    Type 数字
    Default Value 3306

    用于连接到远程服务器的 TCP/IP 端口号。

  • --print-defaults

    Command-Line Format --print-defaults

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

    有关此选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“命令行选项影响选项文件处理”

  • --print-table-metadata

    Command-Line Format --print-table-metadata

    从二进制日志中打印表相关元数据。使用 binlog-row-metadata 配置二进制日志中的表相关元数据量。

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

    Command-Line Format --protocol=type
    Type 字符串
    Default Value [见文本]
    Valid Values

    TCP

    SOCKET

    PIPE

    MEMORY

    用于连接到服务器的传输协议。当其他连接参数通常导致使用其他协议时,该选项非常有用。有关允许值的详细信息,请参阅 第 6.2.7 节,“连接传输协议”

  • --raw

    Command-Line Format --raw
    Type 布尔值
    Default Value FALSE

    默认情况下,mysqlbinlog 读取二进制日志文件并以文本格式写入事件。该 --raw 选项告诉 mysqlbinlog 以原始二进制格式写入事件。该选项需要使用 --read-from-remote-server 选项,因为文件来自服务器。mysqlbinlog 为每个从服务器读取的文件写入一个输出文件。该 --raw 选项可以用于备份服务器的二进制日志。使用 --stop-never 选项,备份是“实时”的,因为 mysqlbinlog 保持与服务器的连接。默认情况下,输出文件写入当前目录,名称与原始日志文件相同。输出文件名可以使用 --result-file 选项修改。有关更多信息,请参阅 第 6.6.9.3 节,“使用 mysqlbinlog 备份二进制日志文件”

  • --read-from-remote-source=type

    Command-Line Format --read-from-remote-source=type

    该选项从 MySQL 服务器读取二进制日志,使用 COM_BINLOG_DUMPCOM_BINLOG_DUMP_GTID 命令,通过将选项值设置为 BINLOG-DUMP-NON-GTIDSBINLOG-DUMP-GTIDS,分别。如果 --read-from-remote-source=BINLOG-DUMP-GTIDS--exclude-gtids 结合使用,可以在源服务器上过滤事务,从而避免不必要的网络流量。

    连接参数选项与这些选项或--read-from-remote-server选项一起使用。这些选项是--host--password--port--protocol--socket--user。如果没有指定远程选项,则忽略连接参数选项。

    使用这些选项需要REPLICATION SLAVE权限。

  • --read-from-remote-master=type

    Command-Line Format --read-from-remote-master=type
    Deprecated

    已弃用的--read-from-remote-source的同义词。

  • --read-from-remote-server=file_name, -R

    Command-Line Format --read-from-remote-server=file_name

    从远程 MySQL 服务器读取二进制日志,而不是读取本地日志文件。该选项需要远程服务器正在运行。它仅适用于远程服务器上的二进制日志文件,而不是中继日志文件。该选项接受二进制日志文件名(包括数字后缀),但不包括文件路径。

    连接参数选项与该选项或--read-from-remote-source选项一起使用。这些选项是--host--password--port--protocol--socket--user。如果没有指定远程选项,则忽略连接参数选项。

    使用该选项需要REPLICATION SLAVE权限。

    该选项类似于--read-from-remote-source=BINLOG-DUMP-NON-GTIDS

  • --result-file=name, -r name

    Command-Line Format --result-file=name

    如果不使用--raw选项,该选项指定mysqlbinlog写入文本输出的文件。使用--raw时,mysqlbinlog将每个日志文件写入一个二进制输出文件,使用默认的文件名在当前目录下。 在这种情况下,--result-file选项值将作为修改输出文件名的前缀。

  • --require-row-format

    Command-Line Format --require-row-format
    Type 布尔值
    Default Value false

    需要基于行的二进制日志格式的事件。此选项强制使用基于行的复制事件,以便mysqlbinlog输出。使用此选项生成的事件流将被接受为使用REQUIRE_ROW_FORMAT选项的复制通道CHANGE REPLICATION SOURCE TO语句所保护的复制通道。binlog_format=ROW必须在写入二进制日志的服务器上设置。当您指定此选项时,mysqlbinlog将在遇到任何不允许的事件时停止,并显示错误消息,包括mysqlbinlog输出的LOAD DATA INFILE指令、创建或删除临时表、INTVARRANDUSER_VAR事件,以及非基于行的事件在DML事务中。mysqlbinlog还将在其输出的开始处打印SET @@session.require_row_format语句,以应用限制条件,并且不打印SET @@session.pseudo_thread_id语句。

  • --rewrite-db='from_name->to_name'

    Command-Line Format --rewrite-db='oldname->newname'
    Type 字符串
    Default Value [none]

    当从基于行的或基于语句的日志中读取时,将所有出现的from_name重写为to_name。重写是在基于行的日志中的行上进行的,也是在基于语句的日志中的USE子句中进行的。

    Warning

    使用数据库名称限定表名称的语句在使用此选项时不会被重写为使用新名称。

    用于此选项的重写规则是一个字符串,形式为'from_name->to_name',因此必须用引号括起来。

    要使用多个重写规则,请多次指定该选项,如下所示:

    mysqlbinlog --rewrite-db='dbcurrent->dbold' --rewrite-db='dbtest->dbcurrent' \
        binlog.00001 > /tmp/statements.sql

    当与--database选项一起使用时,--rewrite-db选项首先应用,然后--database选项应用,使用重写后的数据库名称。提供选项的顺序无关紧要。

    这意味着,例如,如果mysqlbinlog--rewrite-db='mydb->yourdb' --database=yourdb启动,那么所有对数据库mydbyourdb的更新都将包含在输出中。另一方面,如果它以--rewrite-db='mydb->yourdb' --database=mydb启动,那么mysqlbinlog将不输出任何语句,因为所有对mydb的更新都将首先被重写为对yourdb的更新,然后应用--database选项,因此没有更新匹配--database=mydb

  • --server-id=id

    Command-Line Format --server-id=id
    Type 数字

    仅显示由具有给定服务器 ID 的服务器创建的事件。

  • --server-id-bits=N

    Command-Line Format --server-id-bits=#
    Type 数字
    Default Value 32
    Minimum Value 7
    Maximum Value 32

    仅使用第一个 N 位来标识服务器的 server_id。如果二进制日志是由具有小于 32 位的 server-id-bits 的 mysqld 写入的,并且用户数据存储在最重要的一位中,那么运行 mysqlbinlog 时将 --server-id-bits 设置为 32,可以看到这些数据。

    该选项仅支持 NDB Cluster 分发版的 mysqlbinlog,或带有 NDB Cluster 支持的版本。

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

    Command-Line Format --server-public-key-path=file_name
    Type 文件名

    服务器所需的 RSA 密钥对基于密码交换的公钥文件的路径名,该选项适用于使用 sha256_passwordcaching_sha2_password 身份验证插件的客户端。如果客户端使用安全连接连接到服务器,则忽略该选项。

    如果 --server-public-key-path=file_name 指定了有效的公钥文件,则它将优先于 --get-server-public-key

    对于 sha256_password,该选项仅适用于使用 OpenSSL 构建的 MySQL。

    有关 sha256_passwordcaching_sha2_password 插件的信息,请参阅 第 8.4.1.3 节,“SHA-256 可插拔身份验证”第 8.4.1.2 节,“Caching SHA-2 可插拔身份验证”

  • --set-charset=charset_name

    Command-Line Format --set-charset=charset_name
    Type 字符串

    SET NAMES charset_name 语句添加到输出中,以指定处理日志文件时使用的字符集。

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

    Command-Line Format --shared-memory-base-name=name
    Platform Specific Windows

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

    该选项仅适用于服务器启用了 shared_memory 系统变量以支持共享内存连接的情况。

  • --short-form, -s

    Command-Line Format --short-form

    仅显示日志中的语句,不包括任何额外信息或基于行的事件。这仅用于测试,不应在生产系统中使用。它已弃用,并且您可以期望在未来版本中删除。

  • --skip-gtids[=(true|false)]

    Command-Line Format --skip-gtids[=true|false]
    Type 布尔值
    Default Value false

    不要在输出转储文件中包括二进制日志文件中的 GTIDs。例如:

    mysqlbinlog --skip-gtids binlog.000001 >  /tmp/dump.sql
    mysql -u root -p -e "source /tmp/dump.sql"

    您不应该在生产环境或恢复中正常使用该选项,除非在特定且罕见的情况下,GTIDs 是积极不需要的。例如,管理员可能想要从一个部署中复制选定的事务(例如表定义)到另一个无关的部署中,该部署不会从原始部署中复制或复制到该部署中。在那种情况下,--skip-gtids 可以用于启用管理员将事务应用于新的部署中,并确保部署保持无关联。但是,您应该仅在 GTIDs 的包含引起已知问题时使用该选项。

  • --socket=path, -S path

    Command-Line Format --socket={文件名|管道名}
    Type 字符串

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

    在 Windows 上,该选项仅在服务器启动时启用 named_pipe 系统变量以支持命名管道连接。此外,进行连接的用户必须是 Windows 组 named_pipe_full_access_group 系统变量指定的成员。

  • --ssl*

    --ssl 开头的选项指定是否使用加密连接到服务器,并指示 SSL 密钥和证书的位置。请参阅 命令选项加密连接

  • --ssl-fips-mode={OFF|ON|STRICT}

    Command-Line Format --ssl-fips-mode={OFF|ON|STRICT}
    Deprecated
    Type 枚举
    Default Value OFF
    Valid Values

    OFF

    ON

    STRICT

    控制是否在客户端启用 FIPS 模式。--ssl-fips-mode 选项不同于其他 --ssl-xxx 选项,它不是用于建立加密连接,而是影响允许哪些加密操作。请参阅 第 8.8 节,“FIPS 支持”

    这些 --ssl-fips-mode 值是允许的:

    • OFF:禁用 FIPS 模式。

    • ON:启用 FIPS 模式。

    • STRICT:启用“严格”FIPS 模式。

    Note

    如果 OpenSSL FIPS 对象模块不可用,则 --ssl-fips-mode 的唯一允许值是 OFF。在这种情况下,将 --ssl-fips-mode 设置为 ONSTRICT 将导致客户端在启动时产生警告,并在非 FIPS 模式下操作。

    该选项已弃用。预计在未来版本的 MySQL 中删除。

  • --start-datetime=datetime

    Command-Line Format --start-datetime=datetime
    Type 日期时间

    从二进制日志的第一个事件开始读取,事件的时间戳等于或晚于 datetime 参数。 datetime 值相对于运行 mysqlbinlog 的机器的本地时区。该值应采用 DATETIMETIMESTAMP 数据类型接受的格式。例如:

    mysqlbinlog --start-datetime="2005-12-25 11:25:56" binlog.000003

    该选项对于点时间恢复非常有用。请参阅 第 9.5 节,“点时间(增量)恢复”

  • --start-position=N, -j N

    Command-Line Format --start-position=#
    Type 数字

    从二进制日志的位置 N 开始解码,包括在输出中的事件从位置 N 或之后开始。该位置是日志文件中的字节点,而不是事件计数器;它需要指向事件的起始位置以生成有用的输出。该选项适用于命令行上指定的第一个日志文件。

    在 MySQL 8.0.33 之前,该选项的最大支持值为 4294967295(232-1)。在 MySQL 8.0.33 及更高版本中,该值为 18446744073709551616(264-1),除非同时使用 --read-from-remote-server--read-from-remote-source,在这种情况下最大值为 4294967295。

    该选项对点时间恢复非常有用。见 第 9.5 节,“点时间(增量)恢复”

  • --stop-datetime=datetime

    Command-Line Format --stop-datetime=datetime

    在二进制日志中停止读取,直到找到时间戳等于或晚于 datetime 的事件。见 --start-datetime 选项的描述,以获取关于 datetime 值的信息。

    该选项对点时间恢复非常有用。见 第 9.5 节,“点时间(增量)恢复”

  • --stop-never

    Command-Line Format --stop-never
    Type 布尔值
    Default Value FALSE

    该选项与 --read-from-remote-server 一起使用。它告诉 mysqlbinlog 保持与服务器的连接。否则 mysqlbinlog 将在从服务器传输最后一个日志文件后退出。--stop-never隐含 --to-last-log,因此只需要在命令行上指定第一个日志文件。

    --stop-never 通常与 --raw 一起使用,以便进行实时二进制日志备份,但也可以在不使用 --raw 的情况下使用,以维护服务器生成日志事件的连续文本显示。

    使用 --stop-never 时,默认情况下,mysqlbinlog 将报告服务器 ID 为 1。当连接到服务器时,可以使用 --connection-server-id 明确指定替代 ID,以避免与副本服务器或另一个 mysqlbinlog 进程的 ID 冲突。见 第 6.6.9.4 节,“Specifying the mysqlbinlog Server ID”

  • --stop-never-slave-server-id=id

    Command-Line Format --stop-never-slave-server-id=#
    Type 数字
    Default Value 65535
    Minimum Value 1

    这选项已弃用;预计在未来版本中删除。使用--connection-server-id选项来指定服务器ID,以便mysqlbinlog报告。

  • --stop-position=N

    Command-Line Format --stop-position=#
    Type 数字

    停止解码二进制日志在位置 N,排除从输出中开始于位置 N 或之后的事件。该位置是日志文件中的字节点,而不是事件计数器;它需要指向要包括在输出中的最后一个事件的起始位置。该事件开始于位置 N 之前并在或之后结束的是最后一个要处理的事件。该选项适用于命令行上指定的最后一个日志文件。

    该选项对于点时间恢复非常有用。请参阅 第 9.5 节,“点时间恢复”

  • --tls-ciphersuites=ciphersuite_list

    Command-Line Format --tls-ciphersuites=ciphersuite_list
    Type 字符串

    使用 TLSv1.3 的加密连接的可接受 ciphersuites。该值是一个或多个以冒号分隔的 ciphersuite 名称。可以为该选项命名的 ciphersuites 取决于编译 MySQL 的 SSL 库。有关详细信息,请参阅 第 8.3.2 节,“加密连接 TLS 协议和 ciphers”

  • --tls-sni-servername=server_name

    Command-Line Format --tls-sni-servername=server_name
    Type 字符串

    当指定时,该名称将传递给 libmysqlclient C API 库,使用 MYSQL_OPT_TLS_SNI_SERVERNAME 选项的 mysql_options()。服务器名称不区分大小写。要显示客户端当前会话中指定的服务器名称(如果有),请检查 Tls_sni_server_name 状态变量。

    服务器名称指示(SNI)是 TLS 协议的扩展(OpenSSL 必须使用 TLS 扩展来使该选项生效)。MySQL 实现的 SNI 仅表示客户端。

  • --tls-version=protocol_list

    Command-Line Format --tls-version=protocol_list
    Type 字符串
    Default Value

    TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 (OpenSSL 1.1.1 或更高版本)

    TLSv1,TLSv1.1,TLSv1.2 (否则)

    加密连接的可接受 TLS 协议。该值是一个或多个以逗号分隔的协议名称。可以为该选项命名的协议取决于编译 MySQL 的 SSL 库。有关详细信息,请参阅 第 8.3.2 节,“加密连接 TLS 协议和 ciphers”

  • --to-last-log, -t

    Command-Line Format --to-last-log

    不要在请求的二进制日志结尾停止,而是继续打印直到最后一个二进制日志的结尾。如果您将输出发送到同一个 MySQL 服务器,这可能会导致无限循环。该选项需要 --read-from-remote-server

  • --user=user_name, -u user_name

    Command-Line Format --user=user_name,
    Type 字符串

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

    如果您使用的是 MySQL 8.0.31 或更高版本的 Rewriter 插件,请授予该用户 SKIP_QUERY_REWRITE 权限。

  • --verbose, -v

    Command-Line Format --verbose

    重建行事件并将其作为注释的 SQL 语句显示,包括适用的表分区信息。如果该选项被给予两次(通过传递“-vv”或“--verbose --verbose”),输出将包括注释以指示列数据类型和一些元数据,以及信息日志事件,如行查询日志事件,如果 binlog_rows_query_log_events 系统变量设置为 TRUE

    有关 --base64-output--verbose 对行事件输出的影响的示例,请参阅 第 6.6.9.2 节,“mysqlbinlog 行事件显示”

  • --verify-binlog-checksum, -c

    Command-Line Format --verify-binlog-checksum

    验证二进制日志文件的校验和。

  • --version, -V

    Command-Line Format --version

    显示版本信息并退出。

  • --zstd-compression-level=level

    Command-Line Format --zstd-compression-level=#
    Type 整数

    用于服务器连接的压缩级别,该连接使用 zstd 压缩算法。允许的级别从 1 到 22,较高的值表示增加的压缩级别。默认的 zstd 压缩级别为 3。压缩级别设置对不使用 zstd 压缩的连接没有影响。

    有关更多信息,请参阅 第 6.2.8 节,“连接压缩控制”

您可以将 mysqlbinlog 的输出管道到 mysql 客户端,以执行二进制日志中的事件。这项技术用于从意外退出时恢复备份(请参阅 第 9.5 节,“点时间(增量)恢复”)。例如:

mysqlbinlog binlog.000001 | mysql -u root -p

或:

mysqlbinlog binlog.[0-9]* | mysql -u root -p

如果 mysqlbinlog 产生的语句包含 BLOB 值,这些值可能会在 mysql 处理时引发问题。在这种情况下,请使用 mysql--binary-mode 选项。

您也可以将 mysqlbinlog 的输出重定向到文本文件,而不是将其作为输入传递给 mysql 程序。如果您需要首先修改语句日志(例如,删除不想执行的语句),然后使用该文件作为 mysql 的输入。

mysqlbinlog binlog.000001 > tmpfile
... edit tmpfile ...
mysql -u root -p < tmpfile

mysqlbinlog 使用 --start-position 选项时,它将仅显示二进制日志中大于或等于给定位置的事件(给定位置必须与事件的开始匹配)。它还具有停止和开始日期和时间的选项,以便您可以使用 --stop-datetime 选项(例如,说“将我的数据库回滚到今天上午10:30”).

处理多个文件。 如果您有多个二进制日志要在 MySQL 服务器上执行,安全的方法是使用单个连接来处理所有文件。以下示例演示了可能 不安全 的情况:

mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!
mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!

以这种方式处理二进制日志使用多个服务器连接会导致问题,如果第一个日志文件包含 CREATE TEMPORARY TABLE 语句,而第二个日志文件包含使用临时表的语句。当第一个 mysql 进程终止时,服务器将删除临时表。当第二个 mysql 进程尝试使用表时,服务器报告 未知表。

为了避免这些问题,请使用 单个 mysql 进程来执行所有二进制日志的内容。以下是这样做的一种方法:

mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p

另一种方法是将所有日志写入单个文件,然后处理该文件:

mysqlbinlog binlog.000001 >  /tmp/statements.sql
mysqlbinlog binlog.000002 >> /tmp/statements.sql
mysql -u root -p -e "source /tmp/statements.sql"

从 MySQL 8.0.12 开始,您可以将多个二进制日志文件提供给 mysqlbinlog 作为流输入使用 shell 管道。压缩的二进制日志文件存档可以被解压缩并直接提供给 mysqlbinlog。在这个示例中,binlog-files_1.gz 包含多个二进制日志文件以供处理。管道将 binlog-files_1.gz 的内容提取出来,管道二进制日志文件到 mysqlbinlog 作为标准输入,并将 mysqlbinlog 的输出管道到 mysql 客户端以供执行:

gzip -cd binlog-files_1.gz | ./mysqlbinlog - | ./mysql -uroot  -p

您可以指定多个存档文件,例如:

gzip -cd binlog-files_1.gz binlog-files_2.gz | ./mysqlbinlog - | ./mysql -uroot  -p

对于流输入,不要使用 --stop-position,因为 mysqlbinlog 无法标识最后一个日志文件以应用该选项。

LOAD DATA 操作。 mysqlbinlog 可以生成输出,以重新创建 LOAD DATA 操作,而不需要原始数据文件。mysqlbinlog 将数据复制到临时文件,并编写一个 LOAD DATA LOCAL 语句,引用该文件。默认情况下,临时文件的目录位置是系统特定的。要明确指定目录,请使用 --local-load 选项。

因为 mysqlbinlogLOAD DATA 语句转换为 LOAD DATA LOCAL 语句(即添加 LOCAL),因此,您使用的客户端和服务器都必须配置启用 LOCAL 能力。请参阅 第 8.1.6 节,“LOAD DATA LOCAL 安全注意事项”

Warning

LOAD DATA LOCAL 语句创建的临时文件不会被自动删除,因为它们直到您实际执行这些语句时才需要。您应该在不再需要语句日志时自己删除临时文件。这些文件可以在临时文件目录中找到,名称类似于 original_file_name-#-#