4.6.7 mysqlbinlog - 处理二进制 Log Files 的实用程序

服务器的二进制 log 包含 files,其中包含描述对数据库内容的修改的“events”。服务器以二进制格式写入这些 files。要以文本格式显示其内容,请使用mysqlbinlog 可以实用程序。您还可以使用mysqlbinlog在复制设置中显示从服务器写入的 relay log files 的内容,因为中继日志的格式与二进制日志相同。二进制 log 和 relay log 将在第 5.4.4 节,“二进制 Log”第 16.2.4 节,“复制中继和状态日志”中进一步讨论。

像这样调用mysqlbinlog 可以

shell> mysqlbinlog [options] log_file ...

对于 example,要显示名为binlog.000003的二进制 log 文件的内容,请使用以下命令:

shell> mysqlbinlog binlog.0000003

输出包含binlog.000003中包含的 events。对于 statement-based logging,event 信息包括 SQL 语句,执行该语句的服务器的 ID,执行语句的时间戳,执行的时间等等。对于 row-based logging,event 表示行更改而不是 SQL 语句。有关 logging 模式的信息,请参阅第 16.2.1 节,“复制格式”

Events 前面有提供附加信息的标题 comments。例如:

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

在第一个 line 中,at后面的数字表示二进制 log 文件中 event 的文件偏移量或起始位置。

第二个 line 以 date 和 time 开头,指示语句在 event 发起的服务器上何时开始。对于复制,此时间戳将传播到从属服务器。 server id是 event 发起的服务器的server_id value。 end_log_pos表示下一个 event 开始的位置(也就是说,它是当前 event 1 的结束位置)。 thread_id表示执行 event 的线程。 exec_time是在 master 服务器上执行 event 所花费的 time。在从站上,它是从站上的结束执行 time 减去 master 上的开始执行 time 的差异。差异可以作为 master 的复制滞后程度的指标。 error_code表示执行 event 的结果。零意味着没有发生错误。

注意
使用 event 组时,events 的文件偏移量可以组合在一起,events 的 comments 可以组合在一起。不要将这些分组的 events 误认为空白文件偏移。mysqlbinlog 可以的输出可以是 re-executed(例如,通过使用它作为MySQL的输入)来重做 log 中的 statements。这对于服务器崩溃后的恢复操作很有用。有关其他用法示例,请参阅本节后面的讨论和部分 7.5,“Point-in-Time(增量)使用二进制 Log 恢复”

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

当 running mysqlbinlog 可以针对大型二进制 log 时,请注意文件系统有足够的空间用于生成的 files。要配置mysqlbinlog 可以用于临时 files 的目录,请使用TMPDIR环境变量。

mysqlbinlog 可以 _在执行任何 SQL 语句之前将pseudo_slave_mode的 value 设置为 true。此系统变量会影响 XA transactions 的处理。

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

表 4.22 mysqlbinlog 选项

选项 Name描述介绍弃用
--base64-output使用 base-64 编码打印二进制 log 条目
--bind-address使用指定的网络接口连接到 MySQL 服务器
--binlog-row-event-max-size二进制 log max event 大小
--character-sets-dir安装了字符 sets 的目录
--connection-server-id用于测试和调试。请参阅文本以了解适用的默认值和其他详细信息。5.7.5
--database仅列出此数据库的条目
--debug写调试 log
--debug-check程序退出时打印调试信息
--debug-info程序退出时打印调试信息,memory 和 CPU 统计信息
--default-auth要使用的身份验证插件
--defaults-extra-file除了通常的选项 files 之外,还可以读取命名选项文件
--defaults-file只读命名选项文件
--defaults-group-suffix选项 group 后缀 value
--disable-log-bin禁用二进制 logging
--exclude-gtids不要在提供的 GTID 集中显示任何组
--force-if-open即使打开或未正确关闭,也要读取二进制 log files
--force-read如果 mysqlbinlog 读取它无法识别的二进制 log event,则会输出警告
--get-server-public-key从服务器请求 RSA public key5.7.23
--help显示帮助消息并退出
--hexdump在 comments 中显示 log 的十六进制转储
--host_Most 服务器所在的主机
--idempotent导致服务器在仅从此 session 处理二进制 log 更新时使用幂等模式5.7.0
--include-gtids仅显示提供的 GTID 集中的组
--local-load在指定目录中为 LOAD DATA 准备本地临时 files
--login-path从.mylogin.cnf 读取登录路径选项
--no-defaults不读选项 files
--offset跳过 log 中的前 N 个条目
openfiles_limit指定要保留的打开文件描述符的数量
--password连接到服务器时使用的密码
--plugin-dir安装插件的目录
--portTCP/IP port 号码用于连接
--print-defaults打印默认选项
--protocol要使用的连接协议
--raw以原始(二进制)格式编写 events 以输出 files
--read-from-remote-master从 MySQL master 读取二进制 log 而不是读取本地 log 文件
--read-from-remote-server从 MySQL 服务器而不是本地 log 文件中读取二进制 log
--result-file直接输出到命名文件
--rewrite-db从以 row-based 格式编写的日志回放时,为数据库创建 rewrite 规则。可以多次使用。5.7.1
--secure-auth不要以旧(pre-4.1)格式向服务器发送密码5.7.45.7.5
--server-id仅提取由具有给定服务器 ID 的服务器创建的那些 events
--server-id-bits告诉 mysqlbinlog 当 log 由设置为小于最大值的 mysqld 写入时,如何解释二进制 log 中的服务器 ID;只支持 mysqlbinlog 的 MySQL Cluster version
--server-public-key-path包含 RSA public key 的文件的路径 name5.7.23
--set-charset将 SET NAMES charsetname 语句添加到输出
--shared-memory-base-name用于 shared-memory 连接的共享 memory 的名称
--short-form仅显示 log 中包含的 statements
--skip-gtids不要打印任何 GTID;从包含 GTID 的二进制日志中写入转储文件时使用此选项。
--socketUnix socket 文件或 Windows 命名管道使用
--ssl启用连接加密5.7.3
--ssl-ca包含受信任 SSL 证书 Authorities 列表的文件5.7.3
--ssl-capath包含受信任的 SSL 证书 Authority 证书 files 的目录5.7.3
--ssl-cert包含 X.509 证书的文件5.7.3
--ssl-cipher用于连接加密的允许密码5.7.3
--ssl-crl包含证书吊销的文件 lists
--ssl-crlpath包含证书 revocation-list files 的目录
--ssl-key包含 X.509 key 的文件5.7.3
--ssl-mode所需的安全性 state 连接到服务器5.7.11
--ssl-verify-server-cert根据服务器证书 Common Name 身份验证 host name5.7.3
--start-datetime从第一个 event 读取二进制 log,时间戳等于或晚于 datetime 参数
--start-position从第一个 event 读取二进制 log,其位置等于或大于参数
--stop-datetime在第一个 event 停止读取二进制 log,时间戳等于或大于 datetime 参数
--stop-never读完最后一个二进制 log 文件后保持与服务器的连接
--stop-never-slave-server-id当连接到服务器时要报告的从服务器 ID
--stop-position在第一个 event 处停止读取二进制 log,其位置等于或大于参数
--tls-version允许的加密连接 TLS 协议5.7.10
--to-last-log不要在 MySQL 服务器的请求二进制 log 结束时停止,而是继续打印到最后一个二进制 log 的结尾
--user_连接到服务器时使用的 MySQL 用户 name
--verbose将行 events 重构为 SQL statements
--verify-binlog-checksum验证二进制 log 中的校验和
--version显示 version 信息并退出


--help, -?

显示帮助消息并退出。


--base64-output=value

此选项确定何时应使用BINLOG statements 将 events 显示为 base-64 strings。该选项具有这些允许值(不是 case-sensitive):

  • AUTO(“自动”)或UNSPEC(“未指定”)在必要时自动显示BINLOG statements(即格式描述 events 和 row events)。如果没有给出--base64-output选项,则效果与--base64-output=AUTO相同。

注意
如果您打算使用mysqlbinlog 可以到 re-execute 二进制 log 文件内容的输出,则自动BINLOG显示是唯一安全的行为。其他选项值仅用于调试或测试目的,因为它们可能会生成不包含可执行形式的所有 events 的输出。

  • NEVER导致BINLOG statements 不显示。如果找到必须使用BINLOG显示的行 event,mysqlbinlog 可以将退出并显示错误。

  • DECODE-ROWS指定mysqlbinlog 可以,您希望解析行 events 并通过指定--verbose选项显示为注释的 SQL statements。与NEVER类似,DECODE-ROWS禁止显示BINLOG statements,但与NEVER不同,如果找到行 event,则不会退出并返回错误。

有关显示--base64-output--verbose对行 event 输出的影响的示例,请参阅Section 4.6.7.2,“mysqlbinlog Row Event Display”


--bind-address=ip_address

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


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

属性
Command-Line 格式--binlog-row-event-max-size=#
类型数字
默认值4294967040
最低 Value256
最大 Value18446744073709547520

指定 row-based 二进制 log event 的最大大小(以字节为单位)。如果可能,行将分组为小于此大小的 events。 value 应该是 256 的倍数。默认值是 4GB。


--character-sets-dir=dirname

安装 character sets 的目录。见第 10.15 节,“字符集 Configuration”


--connection-server-id=server_id

此选项用于测试 MySQL 服务器以支持BINLOG_DUMP_NON_BLOCK connection flag。正常操作不需要它。

此选项的有效默认值和最小值取决于mysqlbinlog 可以在阻塞模式或 non-blocking 模式下是否运行。当mysqlbinlog 可以在阻塞模式下运行时,默认(和最小)value 为 1; run 在 non-blocking 模式下,默认(和最小)value 为 0。


--database=dbname, -d db_name

此选项使mysqlbinlog 可以输出二进制 log(仅限本地 log)中的条目,该条目在使用使用选为db_name时发生。

mysqlbinlog 可以--database选项类似于mysqld--binlog-do-db选项,但可用于仅指定一个数据库。如果多次给出--database,则仅使用最后一个实例。

此选项的效果取决于是否正在使用 statement-based 或 row-based logging 格式,与--binlog-do-db的效果取决于 statement-based 或 row-based logging 是否正在使用的方式相同。

Statement-based logging. --database选项的工作原理如下:

  • 虽然db_name是默认数据库,但无论它们是修改db_name中的表还是修改其他数据库,都会输出 statements。

  • 除非选择db_name作为默认数据库,否则不会输出 statements,即使它们修改db_name中的表也是如此。

  • 创建数据库ALTER DATABASEDROP DATABASE有一个 exception。在确定是否输出语句时,正在创建,更改或删除的数据库被视为默认数据库。

假设二进制 log 是通过使用 statement-based-logging 执行这些 statements 创建的:

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 --database=test不输出前两个插入 statements,因为没有默认数据库。它输出使用测试之后的三个插入 statements,但不输出使用 db2之后的三个插入 statements。

mysqlbinlog --database=db2不输出前两个插入 statements,因为没有默认数据库。它不会在使用测试之后输出三个插入 statements,但会在使用 db2之后输出三个插入 statements。

Row-based logging. mysqlbinlog 可以仅输出更改属于db_name的表的条目。默认数据库对此没有影响。假设刚才描述的二进制 log 是使用 row-based logging 而不是 statement-based logging 创建的。 mysqlbinlog --database=test仅输出那些在测试数据库中修改t1的条目,无论是否发出使用或默认数据库是什么。

如果服务器 running 且binlog_format设置为MIXED并且您希望可以将mysqlbinlog 可以--database选项一起使用,则必须确保已修改的表位于使用选择的数据库中。 (特别是,没有 cross-database 更新应该 used.)

--rewrite-db选项一起使用时,首先应用--rewrite-db选项;然后使用重写的数据库 name 应用--database选项。提供选项的 order 在这方面没有区别。


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

写一个调试 log。典型的debug_options string 是d:t:o,file_name。默认值为d:t:o,/tmp/mysqlbinlog.trace


--debug-check

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


--debug-info

程序退出时打印调试信息和 memory 以及 CPU 使用情况统计信息。


--default-auth=plugin

关于使用哪个 client-side 身份验证插件的提示。见第 6.2.13 节,“可插入验证”


--defaults-extra-file=filename

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

有关此选项和其他 option-file 选项的其他信息,请参阅第 4.2.2.3 节,“Command-Line 影响 Option-File 处理的选项”


--defaults-file=filename

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

Exception:即使使用--defaults-file,client 程序也会读取.mylogin.cnf

有关此选项和其他 option-file 选项的其他信息,请参阅第 4.2.2.3 节,“Command-Line 影响 Option-File 处理的选项”


--defaults-group-suffix=str

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

有关此选项和其他 option-file 选项的其他信息,请参阅第 4.2.2.3 节,“Command-Line 影响 Option-File 处理的选项”


--disable-log-bin, -D

禁用二进制 logging。如果您使用--to-last-log选项并将输出发送到同一 MySQL 服务器,这对于避免无限循环很有用。在崩溃后进行恢复时,此选项也很有用,以避免重复记录的 statements。

此选项使mysqlbinlog 可以在其输出中包含SET sqllog_bin = 0语句,以禁用剩余输出的二进制 logging。操作sqllog_bin系统变量的 session value 是一个受限操作,因此该选项要求您具有足以设置受限 session 变量的权限。见第 5.1.8.1 节,“系统变量权限”


--exclude-gtids=gtid_set

不显示gtid_set中列出的任何组。


--force-if-open, -F

读取二进制 log files,即使它们已打开或未正确关闭。


--force-read, -f

使用此选项,如果mysqlbinlog 可以读取它无法识别的二进制 log event,它会输出警告,忽略 event,然后继续。如果没有此选项,mysqlbinlog 可以会在读取这样的 event 时停止。


--get-server-public-key

从服务器请求 RSA key pair-based 密码交换所需的 public key。此选项适用于使用caching_sha2_password身份验证插件进行身份验证的 clients。对于该插件,除非请求,否则服务器不会发送 public key。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果未使用 RSA-based 密码交换,也会忽略它,例如 client 使用安全连接连接到服务器的情况。

如果给出了--server-public-key-path=filename并指定了有效的公共 key 文件,则它优先于--get-server-public-key

有关caching_sha2_password插件的信息,请参阅第 6.4.1.5 节,“缓存 SHA-2 可插入身份验证”

MySQL 5.7.23 中添加了--get-server-public-key选项。


--hexdump, -H

在_com 中显示 log 的十六进制转储,如第 4.6.7.1 节,“mysqlbinlog 十六进制转储格式”中所述。十六进制输出有助于复制调试。


--host=hostname, -h host_name

从给定 host 上的 MySQL 服务器获取二进制 log。


--idempotent

告诉 MySQL 服务器在处理更新时使用幂等模式;这会导致在处理更新时抑制服务器在当前 session 中遇到的任何 duplicate-key 或 key-not-found 错误。只要需要或必须将一个或多个二进制日志重放到 MySQL 服务器(可能不包含日志所引用的所有数据),此选项可能会很有用。

此选项的效果范围仅包括当前mysqlbinlog 可以 client 和 session。


--include-gtids=gtid_set

仅显示gtid_set中列出的组。


--local-load=dirname, -l dir_name

在指定目录中为负载数据准备本地临时 files。

重要
这些临时 files 不会被mysqlbinlog 可以或任何其他 MySQL 程序自动删除。


--login-path=name

.mylogin.cnf登录路径文件中的指定登录路径中读取选项。 “登录路径”是一个选项 group,其中包含指定要连接到哪个 MySQL 服务器以及要进行身份验证的帐户的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。见Section 4.6.6,“mysql_config_editor - MySQL Configuration Utility”

有关此选项和其他 option-file 选项的其他信息,请参阅第 4.2.2.3 节,“Command-Line 影响 Option-File 处理的选项”


--no-defaults

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

exception 是.mylogin.cnf文件(如果存在)在所有情况下都被读取。这允许以比命令 line 更安全的方式指定密码,即使使用--no-defaults也是如此。 (.mylogin.cnfmysql_config_editor实用程序创建。请参阅Section 4.6.6,“mysql_config_editor - MySQL Configuration Utility” .)

有关此选项和其他 option-file 选项的其他信息,请参阅第 4.2.2.3 节,“Command-Line 影响 Option-File 处理的选项”


--offset=N, -o N

跳过 log 中的第一个N条目。

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


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

用于连接到服务器的 MySQL 帐户的密码。密码 value 是可选的。如果没有给出,mysqlbinlog 可以会提示输入一个。如果给定,--password =-p与其后面的密码之间必须没有空格。如果未指定密码选项,则默认为不发送密码。

在命令 line 上指定密码应该被认为是不安全的。要避免在命令 line 上输入密码,请使用选项文件。见第 6.1.2.1 节,“End-User 密码安全指南”

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


--plugin-dir=dirname

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


--port=port_num, -P port_num

用于连接到 remote 服务器的 TCP/IP port 号。


--print-defaults

打印程序 name 以及从选项 files 获取的所有选项。

有关此选项和其他 option-file 选项的其他信息,请参阅第 4.2.2.3 节,“Command-Line 影响 Option-File 处理的选项”


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

用于连接到服务器的连接协议。当其他连接参数通常导致使用除所需协议之外的协议时,它很有用。有关允许值的详细信息,请参阅部分 4.2.4,“使用命令选项连接到 MySQL 服务器”


--raw

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


--read-from-remote-master=type

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

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

使用此选项需要复制之刃权限。


--read-from-remote-server, -R

从 MySQL 服务器读取二进制 log 而不是读取本地 log 文件。此选项要求 remote 服务器是 running。它仅适用于 remote 服务器上的二进制 log files,而不适用于 relay log files。

连接参数选项与此选项或--read-from-remote-master选项一起使用。这些选项是--host--password--port--protocol--socket--user。如果未指定任何 remote 选项,则忽略连接参数选项。

使用此选项需要复制之刃权限。

此选项类似于--read-from-remote-master=BINLOG-DUMP-NON-GTIDS


--result-file=name, -r name

如果没有--raw选项,则此选项指示mysqlbinlog 可以写入文本输出的文件。使用--rawmysqlbinlog 可以为从服务器传输的每个 log 文件写入一个二进制输出文件,默认使用与原始 log 文件相同的名称在当前目录中写入它们。在这种情况下,--result-file选项 value 被视为修改输出文件名的前缀。


--rewrite-db ='fromname - > toname'

从 row-based 或 statement-based log 读取时,_所有出现的from_nameto_name。对于 statement-based 日志,以及使用子句,对 statement-based 日志的行进行重写。在 5.7.8 之前的 MySQL 版本中,此选项仅在还原使用 row-based 格式记录的表时使用。

警告
使用此选项时,不会重写 table 名称使用数据库名称限定的语句以使用新的 name。
用作此选项的 value 的 rewrite 规则是具有'from_name->to_name'形式的 string,如前所示,因此必须用引号括起来。

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

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

--database选项一起使用时,首先应用--rewrite-db选项;然后使用重写的数据库 name 应用--database选项。提供选项的 order 在这方面没有区别。

这意味着,对于 example,如果mysqlbinlog 可以--rewrite-db='mydb->yourdb' --database=yourdb启动,则数据库mydbyourdb中任何表的所有更新都包含在输出中。另一方面,如果它以--rewrite-db='mydb->yourdb' --database=mydb开头,那么mysqlbinlog 可以根本不输出 statements:因为在应用--database选项之前,的所有更新都首先被重写为yourdb的更新,所以 match --database=mydb没有更新。


--secure-auth

不要以旧(pre-4.1)格式向服务器发送密码。这可以防止除使用较新密码格式的服务器之外的连接。

从 MySQL 5.7.5 开始,此选项已弃用,将在未来的 MySQL 版本中删除。它始终处于启用状态,并尝试禁用它(--skip-secure-auth--secure-auth=0)会产生错误。在 MySQL 5.7.5 之前,默认情况下启用此选项,但可以禁用此选项。

注意
使用 pre-4.1 哈希方法的密码不如使用本机密码哈希方法的密码安全,应该避免使用。不推荐使用 Pre-4.1 密码,并在 MySQL 5.7.5 中删除了对它们的支持。有关帐户升级说明,请参阅第 6.4.1.3 节,“迁移 Pre-4.1 密码哈希和 mysql_old_password 插件”


--server-id=id

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


--server-id-bits=N

仅使用server_id的第一个N位来标识服务器。如果二进制 log 由mysqld写入且 server-id-bits 设置为小于 32 且用户数据存储在最高有效位中,则设置为 32 可以看到此数据。

只有 NDB Cluster 分发提供的mysqlbinlog 可以版本支持此选项,或者由 NDB Cluster 源构建。


--server-public-key-path=filename

包含服务器所需的 public key 的 client-side 副本的文件的路径 name,用于 RSA key pair-based 密码交换。该文件必须采用 PEM 格式。此选项适用于使用sha256_passwordcaching_sha2_password身份验证插件进行身份验证的 clients。对于未使用其中一个插件进行身份验证的帐户,将忽略此选项。如果不使用 RSA-based 密码交换,也会忽略它,例如 client 使用安全连接连接到服务器的情况。

如果给出了--server-public-key-path=filename并指定了有效的公共 key 文件,则它优先于--get-server-public-key

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

有关sha256_passwordcaching_sha2_password插件的信息,请参阅第 6.4.1.4 节,“SHA-256 可插拔认证”第 6.4.1.5 节,“缓存 SHA-2 可插入身份验证”

MySQL 5.7.23 中添加了--server-public-key-path选项。


--set-charset=charsetname

SET NAMES charsetname语句添加到输出以指定用于处理 log files 的字符集。


--shared-memory-base-name=name

在 Windows 上,shared-memory name 用于使用共享 memory 与本地服务器建立的连接。默认的 value 是MYSQL。 shared-memory name 是 case-sensitive。

仅当服务器启动时启用了sharedmemory系统变量以支持 shared-memory 连接,此选项才适用。


--short-form, -s

仅显示 log 中包含的 statements,不显示任何额外信息或 row-based events。这仅用于测试,不应在 production 系统中使用。


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

不要在输出中显示任何 GTID。从一个或多个包含 GTID 的二进制日志写入转储文件时需要这样做,如下所示:

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

在 production 中通常不建议使用此选项。


--socket=path, -S path

对于localhost的连接,要使用的 Unix socket 文件,或者 Windows 上要使用的命名管道的 name。

在 Windows 上,仅当启动服务器并启用named_pipe系统变量以支持 named-pipe 连接时,此选项才适用。此外,进行连接的用户必须是named_pipe_full_accessgroup系统变量指定的 Windows group 的成员。


--ssl*

--ssl开头的选项指定是否使用 SSL 连接到服务器并指示在何处查找 SSL 密钥和证书。见加密连接的命令选项


--start-datetime=datetime

开始在第一个 event 读取二进制 log,其时间戳等于或晚于datetime参数。 datetime value 是相对于 run mysqlbinlog 可以所在机器上的本地 time zone。 value 应采用约会时间TIMESTAMP数据类型接受的格式。例如:

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

此选项对于 point-in-time 恢复很有用。见第 7.3 节,“示例备份和恢复策略”


--start-position=N, -j N

开始读取位置等于或大于N的第一个 event 的二进制 log。此选项适用于命令 line 上命名的第一个 log 文件。

此选项对于 point-in-time 恢复很有用。见第 7.3 节,“示例备份和恢复策略”


--stop-datetime=datetime

停止在第一个 event 读取二进制 log,其时间戳等于或晚于datetime参数。此选项对于 point-in-time 恢复很有用。有关datetime value 的信息,请参阅--start-datetime选项的说明。

此选项对于 point-in-time 恢复很有用。见第 7.3 节,“示例备份和恢复策略”


--stop-never

此选项与--read-from-remote-server一起使用。它告诉mysqlbinlog 可以保持连接到服务器。否则,当从服务器传输最后一个 log 文件时mysqlbinlog 可以退出。 --stop-never意味着--to-last-log,因此只需要在命令 line 上命名要传输的第一个 log 文件。

--stop-never通常与--raw一起使用来进行实时二进制 log 备份,但也可以在没有--raw的情况下使用,以便在服务器生成它们时保持 log events 的连续文本显示。


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

使用--stop-never时,mysqlbinlog 可以在连接到服务器时报告服务器 ID 为 65535。 --stop-never-slave-server-id显式指定要报告的服务器 ID。它可用于避免与从属服务器的 ID 或另一个mysqlbinlog 可以 process 冲突。见第 4.6.7.4 节,“指定 mysqlbinlog 服务器 ID”


--stop-position=N

停止在位置等于或大于N的第一个 event 处读取二进制 log。此选项适用于命令 line 上命名的最后一个 log 文件。

此选项对于 point-in-time 恢复很有用。见第 7.3 节,“示例备份和恢复策略”


--tls-version=protocol_list

加密连接的允许 TLS 协议。 value 是一个或多个 comma-separated 协议名称的列表。可以为此选项命名的协议取决于用于编译 MySQL 的 SSL library。有关详细信息,请参阅第 6.3.2 节,“加密连接 TLS 协议和密码”

MySQL 5.7.10 中添加了此选项。


--to-last-log, -t

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


--user=username, -u user_name

连接到 remote 服务器时要使用的 MySQL 帐户的用户 name。


--verbose, -v

重建行 events 并将它们显示为注释的 SQL statements。如果给出此选项两次(通过传入“-vv”或“--verbose --verbose”),则输出包括 comments 以指示列数据类型和一些元数据,并且行查询 log events(如果已配置)。

有关显示--base64-output--verbose对行 event 输出的影响的示例,请参阅Section 4.6.7.2,“mysqlbinlog Row Event Display”


--verify-binlog-checksum, -c

验证二进制 log files 中的校验和。


--version, -V

显示 version 信息并退出。

在 MySQL 5.7 中,mysqlbinlog 可以 version number 是 3.4.

您可以将mysqlbinlog 可以的输出通过管道传输到MySQL client 中,以执行二进制 log 中包含的 events。当您有旧备份时,此技术用于从崩溃中恢复(请参阅部分 7.5,“Point-in-Time(增量)使用二进制 Log 恢复”)。例如:

shell> mysqlbinlog binlog.000001 | mysql -u root -p

要么:

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

如果mysqlbinlog 可以生成的 statements 可能包含BLOB值,则MySQL处理它们时可能会导致问题。在这种情况下,使用--binary-mode选项调用MySQL

如果您需要首先修改语句 log(对于 example,删除因某些原因不想执行的 statements),您也可以将mysqlbinlog 可以的输出重定向到文本文件。编辑文件后,使用它作为MySQL程序的输入执行它包含的 statements:

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

当使用--start-position选项调用mysqlbinlog 可以时,它仅显示二进制 log 中偏移量大于或等于给定位置的那些 events(给定位置必须匹配一个 event 的开头)。当它看到具有给定 date 和 time 的 event 时,它还具有停止和启动的选项。这使您可以使用--stop-datetime选项执行 point-in-time 恢复(对于 example,可以说,“将我的数据库前滚到今天的 10:30 a.m.”)。

如果要在 MySQL 服务器上执行多个二进制 log,则安全方法是使用与服务器的单个连接对它们进行处理。这是一个演示可能不安全的示例:

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

如果第一个 log 文件包含创建临时 TABLE语句而第二个 log 包含使用临时 table 的语句,则使用与服务器的多个连接以这种方式处理二进制日志会导致问题。当第一个MySQL process 终止时,服务器将删除临时 table。当第二个MySQL process 尝试使用 table 时,服务器会报告“unknown table”。

为了避免这样的问题,使用单个MySQL process 来执行要处理的所有二进制日志的内容。这是一种方法:

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

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

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

mysqlbinlog 可以可以生成在没有原始数据文件的情况下再现负载数据操作的输出。 mysqlbinlog 可以将数据复制到临时文件并写入引用该文件的加载数据本地语句。写入这些 files 的目录的默认位置是 system-specific。要显式指定目录,请使用--local-load选项。

因为mysqlbinlog 可以负载数据 statements 转换为加载数据本地 statements(即,它添加LOCAL),所以 client 和用于 process statements 的服务器都必须配置为启用LOCAL功能。见第 6.1.6 节,“LOAD DATA LOCAL 的安全问题”

警告
加载数据本地 statements 创建的临时 files 不会自动删除,因为在您实际执行这些 statements 之前需要它们。在不再需要语句 log 之后,应该自己删除临时 files。 files 可以在临时文件目录中找到,其名称类似于original_file_name-#-#

校对:
Updated at: 9 months ago
mysql_config_editor - MySQL Configuration UtilityTable of contentmysqlbinlog 十六进制转储格式