6.6.9 mysqlbinlog 十六进制转储格式
服务器的二进制日志由包含描述数据库内容修改的事件的文件组成。服务器以二进制格式写入这些文件。为了在文本格式中显示它们的内容,可以使用mysqlbinlog工具。此外,mysqlbinlog也可以用来显示由复制服务器写入的中继日志文件内容,因为中继日志文件格式与二进制日志文件相同。二进制日志和中继日志在第7.4.4节“二进制日志”和第19.2.4节“中继日志和复制元数据存储库”中进行了进一步讨论。
调用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
表示执行事件时的结果。零意味着没有错误发生。
当使用事件组时,可能会将事件的文件偏移量分组在一起,并且可能会将事件的注释分组在一起。不要将这些分组的事件误认为是空的文件偏移量。
从mysqlbinlog的输出中,可以重新执行(例如,将其作为输入给mysql)以重做日志中的语句。这对于在意外服务器退出后进行恢复操作非常有用。有关其他使用示例的讨论,请参阅本节稍后和第9.5节,“点时间(增量)恢复”。要执行BINLOG
用于mysqlbinlog的内部使用语句,用户需要拥有BINLOG_ ADMIN
权限(或已弃用的SUPER
权限)或者拥有REPLICATION_ APPLIER
权限并且执行每个日志事件所需的适当权限。
您可以使用mysqlbinlog直接读取二进制日志文件并将其应用到本地MySQL服务器。您还可以从远程服务器读取二进制日志文件,使用--read-from-remote-server
选项。要读取远程二进制日志,您需要提供连接参数选项来指示如何连接到服务器。这些建议的选项是--host
、--password
、--port
、--protocol
、--socket
和--user
。
当二进制日志文件被加密时,mysqlbinlog无法直接读取它们,但可以从服务器读取它们,使用--read-from-remote-server
选项。二进制日志文件在服务器的binlog_ encryption
系统变量设置为ON
时被加密。SHOW BINARY LOGS
语句显示了某个二进制日志文件是否加密或未加密。加密和未加密的二进制日志文件也可以通过文件头魔术数字来区分,用于加密的日志文件(0xFD62696E
)与未加密的日志文件(0xFE62696E
)不同。请注意,如果您尝试直接读取一个加密的二进制日志文件,mysqlbinlog会返回一个适当的错误消息。更老版本的mysqlbinlog无法识别文件为二进制日志文件。有关二进制日志加密的更多信息,请参阅第19.3.2节,“加密二进制日志文件和中继日志文件”。
当二进制日志事务payload被压缩时,mysqlbinlog 会自动解压和解码事务payload,并以未压缩事件的方式打印它们。当binlog_transaction_compression
设置为ON
时,事务payload会被压缩并作为单个事件(一个Transaction_payload_event
)写入服务器的二进制日志文件。使用--verbose
选项时,mysqlbinlog 会添加注释,说明使用的压缩算法、接收到的原始压缩payload大小以及解压后的payload大小。
对于mysqlbinlog 一个事件的结束位置(end_log_pos
),如果该事件是压缩事务payload的一部分,那么这个位置与原始压缩payload的结束位置相同。因此,多个解压后的事件可以有相同的结束位置。
mysqlbinlog 的连接压缩在事务payload已经被压缩时会减少,但仍然作用于未压缩的事务和头部。
有关二进制日志事务压缩的更多信息,请参阅mysqlbinlog。
当运行mysqlbinlog 时,特别是对一个大型的二进制日志文件,请注意文件系统有足够空间来存储结果文件。要配置mysqlbinlog 用于临时文件的目录,请使用TMPDIR
环境变量。
mysqlbinlog 在执行任何SQL语句之前,将设置pseudo_Replica_Mode
为真。这将影响XA事务的处理、original_commit_timestamp
复制延迟时间戳以及original_server_version
系统变量,以及不支持的SQL模式。
mysqlbinlog 支持以下选项,可以在命令行或mysqlbinlog 和mysqlbinlog 组中的选项文件中指定。有关MySQL程序使用的选项文件的信息,请参阅mysqlbinlog。
表格 6.20 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 | 用于测试和调试。请参阅适用默认值及其它详细信息 |
--database | 仅列出该数据库的条目 |
--debug | 写入调试日志 |
--debug-check | 在程序退出时打印调试信息 |
--debug-info | 在程序退出时打印调试信息、内存和CPU统计数据 |
--default-auth | 使用的身份验证插件 |
--defaults-extra-file | 除了通常选项文件之外,读取指定的选项文件 |
--defaults-file | 只读指定的选项文件 |
--defaults-group-suffix | 选项组后缀值 |
--disable-log-bin | 禁用二进制日志 |
--exclude-gtids | 排除GTID集中的任何组 |
--force-if-open | 即使日志文件未正确关闭,也读取二进制日志文件 |
--force-read | 如果mysqldump读取到它不认识的二进制日志事件,它会打印一个警告 |
--get-server-public-key | 从服务器请求RSA公钥 |
--help | 显示帮助信息并退出 |
--hexdump | 在注释中显示日志的十六进制.dump |
--host | MySQL服务器所在主机 |
--idempotent | 使服务器在处理来自此会话的二进制日志更新时使用幂等性模式 |
--include-gtids | 只显示GTID集中的组 |
--local-load | 为LOAD DATA指定目录准备本地临时文件 |
--login-path | 从~/.mylogin.cnf读取登录路径选项 |
--no-defaults | 不读取任何选项文件 |
--no-login-paths | 不从登录路径文件中读取 |
--offset | 在日志中跳过前N条记录 |
--password | 连接到服务器时使用的密码 |
--plugin-dir | 插件安装目录 |
--port | TCP/IP端口号 |
--print-defaults | 打印默认选项 |
--print-table-metadata | 打印表元数据 |
--protocol | 使用的传输协议 |
--raw | 将事件写入未经处理的(二进制)格式到输出文件 |
--read-from-remote-master | 从MySQL复制源服务器读取二进制日志,而不是从本地文件 |
--read-from-remote-server | 从MySQL服务器而不是本地文件读取二进制日志 |
--read-from-remote-source | 从MySQL复制源服务器读取二进制日志,而不是从本地文件 |
--require-row-format | 要求行格式的二进制日志记录 |
--result-file | 直接输出到指定文件 |
--rewrite-db | 创建重写规则用于数据库,当从以行格式写入的日志文件中回放时可以使用多次。 |
--server-id | 仅提取由具有给定服务器ID的服务器创建的事件。 |
--server-id-bits | 告诉mysqlbinlog如何解释在MySQL集群版本中写入日志时由mysqld服务器使用的服务器ID位数;仅支持MySQL集群版本的mysqlbinlog。 |
--server-public-key-path | 公钥文件路径名。 |
--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 | 不在请求的二进制日志文件结束时停止,而是继续打印到最后一个二进制日志文件。 |
--user | 用于连接服务器的MySQL用户名。 |
--verbose | 重建行事件作为SQL语句 |
--verify-binlog-checksum | 验证二进制日志中的校验和 |
--version | 显示版本信息并退出 |
--zstd-compression-level | 用于连接到使用ZSTD压缩的服务器的压缩级别 |
-
--help
,-?
Command-Line Format --help
显示帮助信息并退出。
-
Command-Line Format --base64-output=value
Type 字符串 Default Value AUTO
Valid Values AUTO
NEVER
DECODE-ROWS
这个选项决定了何时应该以base64编码的字符串形式显示事件,使用
BINLOG
语句。该选项有以下可接受值(不区分大小写):-
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 Row Event Display”。 -
-
Command-Line Format --bind-address=ip_地址
在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。
-
Command-Line Format --binlog-row-event-max-size=#
Type 数字 Default Value 4294967040
Minimum Value 256
Maximum Value 18446744073709547520
指定行基于的二进制日志事件的最大大小,单位为字节。行被分组到小于或等于该大小的事件中,如果可能的话。值必须是256的倍数。默认值为4GB。
-
Command-Line Format --character-sets-dir=dir_name
Type 目录名称 字符集安装的目录。请参阅第12.15节,“字符集配置”。
-
Command-Line Format --compress[={OFF|ON}]
Deprecated 是的 Type 布尔值 Default Value OFF
如果可能,压缩客户端和服务器之间发送的所有信息。请参阅第6.2.8节,“连接压缩控制”。
此选项已被弃用。预计将在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”。 -
--database=
,db_name
-d
db_name
Command-Line Format --database=db_name
Type 字符串 这项选项会导致 mysqlbinlog 输出来自二进制日志(仅限本地日志)的条目,这些条目在
db_ name
被选为USE
语句的默认数据库时发生。对于
--database
选项,mysqlbinlog 与--binlog-do-db
选项在 mysqld 中有相似之处,但可以用来指定一个数据库。如果给出多个--database
,只有最后一个被使用。这项选项的效果取决于是否使用语句日志格式或行日志格式,与
--binlog-do-db
选项在使用语句日志格式或行日志格式时的效果相同。语句日志格式。
--database
选项的工作方式如下:-
当
db_ name
是默认数据库时,语句会被输出,无论它们是否修改了db_ name
中的表或其他数据库。 -
如果
db_ name
不是默认数据库,语句不会被输出,即使它们修改了db_ name
中的表。 -
对于
CREATE DATABASE
、ALTER DATABASE
和DROP 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 --database=test 不输出前两个
INSERT
语句,因为没有默认数据库。它输出后面三个INSERT
语句,紧随USE test
,但不输出后面三个INSERT
语句,紧随USE db2
。mysqlbinlog --database=db2 不输出前两个
INSERT
语句,因为没有默认数据库。它不输出后面三个INSERT
语句,紧随USE test
,但输出后面三个INSERT
语句,紧随USE db2
。行日志格式。 mysqlbinlog 只输出更改
db_ name
中表的条目。默认数据库对此无影响。假设上述二进制日志在使用行日志格式而不是语句日志格式时创建。 mysqlbinlog --database=test 只输出修改 test 数据库中 t1 表的条目,无论是否发出USE
语句或默认数据库是什么。如果服务器正在运行,并且
binlog_格式
设置为MIXED
,并且您希望能够使用mysqlbinlog工具,并且使用--database
选项,您必须确保被修改的表位于通过USE
语句选择的数据库中。特别是,不应该使用跨库更新。当与
--rewrite-db
选项一起使用时,--rewrite-db
选项会首先应用,然后是--database
选项,使用重写后的数据库名称。这些选项的顺序并不重要。 -
-
--debug[=
,调试选项
]-#[
调试选项
]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发布版本是不使用此选项构建的。 -
Command-Line Format --debug-check
Type 布尔值 Default Value FALSE
在程序退出时打印一些调试信息。
这个选项只有在MySQL使用
WITH_DEBUG
时才可用。Oracle提供的MySQL发布版本是不使用此选项构建的。 -
Command-Line Format --debug-info
Type 布尔值 Default Value FALSE
在程序退出时打印调试信息和内存和CPU使用统计。
这个选项只有在MySQL使用
WITH_DEBUG
时才可用。Oracle提供的MySQL发布版本是不使用此选项构建的。 -
Command-Line Format --default-auth=plugin
Type 字符串 关于哪个客户端认证插件应该使用的提示。请参阅第 8.2.17 节,“可插拔认证”。
-
Command-Line Format --defaults-extra-file=file_name
Type 文件名 在全局选项文件之后读取这个选项文件,但是在用户选项文件之前(在 Unix 上)。如果
file_name
不存在或无法访问,会发生错误。如果file_name
不是绝对路径名,它将被解释为相对于当前目录的路径。关于这个和其他影响选项文件处理的命令行选项的更多信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
Command-Line Format --defaults-file=file_name
Type 文件名 只使用给定的选项文件。如果文件不存在或无法访问,会发生错误。如果
file_name
不是绝对路径名,它将被解释为相对于当前目录的路径。异常:即使使用
--defaults-file
,客户端程序仍然读取.mylogin.cnf
。有关此和其他选项文件选项的更多信息,请参阅第6.2.2.3节,“命令行选项对选项文件处理的影响”。
-
Command-Line Format --defaults-group-suffix=str
Type 字符串 不仅读取通常的选项组,还读取具有通常名称和后缀
str
的组。例如,对于mysqlbinlog,通常读取[client]
和[mysqlbinlog]
组。如果给出如--defaults-group-suffix=_other
的选项,mysqlbinlog也会读取[client_other]
和[mysqlbinlog_other]
组。有关此和其他选项文件选项的更多信息,请参阅第6.2.2.3节,“命令行选项对选项文件处理的影响”。
-
Command-Line Format --disable-log-bin
禁用二进制日志。这对于避免在使用
--to-last-log
选项并将输出发送到同一MySQL服务器时的无限循环非常有用。此外,当恢复后遇到意外退出时,这个选项也很有用,以避免重复已记录的语句。这个选项导致mysqlbinlog在其输出中包含一个
SET sql_log_bin = 0
语句,以禁用剩余输出的二进制日志。操作会话值的sql_log_bin
系统变量是一个受限操作,因此这个选项需要您有足够的权限来设置受限的会话变量。请参阅第7.1.9.1节,“系统变量权限”。 -
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读取到这样的事件,它会停止。
-
Command-Line Format --get-server-public-key
Type 布尔值 从服务器请求所需的公钥,以便进行基于RSA密钥对的密码交换。这一选项适用于使用缓存SHA-2插件进行身份验证的客户端。对于该插件,服务器不会发送公钥,除非被请求。这一选项对不使用RSA密码交换的客户端(即通过安全连接与服务器通信的客户端)无效。
如果给出了
--server-public-key-path=
并指定了一个有效的公钥文件,它将优先于file_name
--get-server-public-key
。有关缓存SHA-2插件的信息,请参阅第8.4.1.2节,“缓存SHA-2插件”。
-
--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服务器上获取二进制日志。
-
Command-Line Format --idempotent
Type 布尔值 Default Value true
告诉MySQL服务器在处理更新时使用幂等模式;这会抑制服务器在当前会话中遇到的任何重复键或键不存在的错误。这一选项可能对需要重新播放一个或多个二进制日志到不包含所有数据的MySQL服务器的情况非常有用。
这一选项的作用范围仅限于当前mysqlbinlog客户端和会话。
-
Command-Line Format --include-gtids=gtid_set
Type 字符串 Default Value 只显示列表中的组。
-
--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
选项来指定mysqlbinlog一个不同的目录用于数据文件,并且在处理mysqlbinlog的输出时,使用相同的目录指定给--load-data-local-dir
选项给mysql。例如:mysqlbinlog --local-load=/my/local/data ... | mysql --load-data-local-dir=/my/local/data ...
Important这些临时文件不会自动由mysqlbinlog或任何其他MySQL程序删除。
-
Command-Line Format --login-path=name
Type 字符串 从命名的登录路径中读取选项。一个“登录路径”是一个包含指定连接到哪个MySQL服务器以及以何种身份进行认证的选项组。在创建或修改登录路径文件时,使用mysql_config_editor工具。请参阅第6.6.7节,“mysql_config_editor — MySQL配置工具”。
有关此和其他选项文件选项的更多信息,请参阅第6.2.2.3节,“命令行选项影响选项文件处理”。
-
Command-Line Format --no-login-paths
跳过读取登录路径文件中的选项。
请参阅
--login-path
的相关信息。有关此和其他选项文件选项的更多信息,请参阅第6.2.2.3节,“命令行选项影响选项文件处理”。
-
Command-Line Format --no-defaults
不要读取任何选项文件。如果程序启动失败,因为从选项文件中读取了未知的选项,
--no-defaults
可以用来防止它们被读取。异常情况是,即使使用了
--no-defaults
,也会读取.mylogin.cnf
文件。这允许在密码上使用更安全的方式,即使不使用命令行参数。要创建.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
条记录。 -
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
选项。 -
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端口号。
-
Command-Line Format --print-defaults
打印程序名称及其来自选项文件的所有选项。
对于此和其他选项文件选项的更多信息,请参阅第6.2.2.3节,“命令行选项影响选项文件处理”。
-
Command-Line Format --print-table-metadata
从二进制日志打印表相关元数据。使用
binlog-row-metadata
配置二进制日志中表相关元数据的量。 -
--protocol={TCP|SOCKET|PIPE|MEMORY}
Command-Line Format --protocol=type
Type 字符串 Default Value [see text]
Valid Values TCP
SOCKET
PIPE
MEMORY
用于连接到服务器的传输协议。它在其他连接参数通常导致使用不同于您想要的协议时非常有用。有关允许值的详细信息,请参阅第6.2.7节,“连接传输协议”。
-
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服务器读取二进制日志,使用
--read-from-remote-source=BINLOG-DUMP-NON-GTIDS
或--read-from-remote-source=BINLOG-DUMP-GTIDS
设置选项值为BINLOG-DUMP-NON-GTIDS
或BINLOG-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
权限。 -
--result-file=
,name
-r
name
Command-Line Format --result-file=name
在没有
--raw
选项的情况下,这个选项指示mysqlbinlog将文本输出写入到哪个文件中。与--raw
一起使用时,mysqlbinlog将为每个从服务器传输的日志文件创建一个二进制输出文件,默认情况下在当前目录中使用原始日志文件的同名。这种情况下,--result-file
选项值被视为一个前缀,该前缀修改输出文件名。 -
Command-Line Format --require-row-format
Type 布尔值 Default Value false
要求行级二进制日志格式用于事件。该选项强制实施行级复制事件对于mysqlbinlog的输出。产生的事件流将被接受由使用
CHANGE REPLICATION SOURCE TO
语句安全的复制通道。服务器上必须设置binlog_ format=ROW
,在该服务器上写入二进制日志。当您指定此选项时,如果mysqlbinlog遇到任何不符合REQUIRE_ROW_FORMAT
限制的事件,包括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]
当从行级或语句级日志读取时,将所有
USE
子句的mysqlbinlog中的表名替换为USE
子句的新名称。对于行级日志,重写也应用于行;对于语句级日志,重写应用于USE
子句。Warning在使用此选项时,不会对包含数据库名称的表名进行重写,以便使用新名称的语句。
要应用多个重写规则,请指定该选项多次,如下所示:
当与
--database
选项一起使用时,--rewrite-db
选项首先应用;然后应用--database
选项,使用重写后的数据库名称。这些选项的顺序对结果没有影响。mysqlbinlog --rewrite-db='dbcurrent->dbold' --rewrite-db='dbtest->dbcurrent' \ binlog.00001 > /tmp/statements.sql
这意味着,如果mysqlbinlog以
--rewrite-db='mydb->yourdb' --database=yourdb'
的形式启动,则输出将包含任何表在数据库mydb
和yourdb
中的更新。另一方面,如果它以--rewrite-db='mydb->yourdb' --database=mydb'
的形式启动,则mysqlbinlog将不输出任何语句:由于所有对mydb
的更新首先被重写为对yourdb
的更新,然后应用--database
选项,剩下的没有匹配--database=mydb'
的更新。 -
--server-id=id
Command-Line Format 数字 Type 仅显示由给定服务器ID创建的事件。 -
--server-id-bits=#
Command-Line Format 数字 Type 32 Default Value 7 Minimum Value 32 Maximum Value 32
使用仅前
N
位的server_ id
来标识服务器。如果由一个具有server-id-bits
设置为小于 32 的 mysqld 运行,并且用户数据存储在最重要位上,运行 mysqlbinlog 时使用--server-id-bits
设置为 32,可以使得这些数据可见。这个选项仅由 NDB 集群分发版本的 mysqlbinlog 支持,或者构建有 NDB 集群支持的版本。
-
--server-public-key-path=
file_name
Command-Line Format --server-public-key-path=file_name
Type 文件名 指定一个包含客户端侧的 RSA 密钥对公钥的 PEM 格式文件路径,这个公钥由服务器用于基于 RSA 密钥对的密码交换。这选项适用于使用
sha256_password
或caching_sha2_password
认证插件进行认证的客户端。如果 RSA 密钥对密码交换不被使用(例如,当客户端通过安全连接连接到服务器时),则忽略这个选项。如果给定
--server-public-key-path=
并指定一个有效的公钥文件,它将优先于file_name
--get-server-public-key
。对于
sha256_password
,这个选项仅在 MySQL 使用 OpenSSL 构建时适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅第 8.4.1.3 节,“SHA-256 插件认证”和第 8.4.1.2 节,“Caching SHA-2 插件认证”。 -
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
仅显示日志文件中的语句,而不包括任何额外信息或基于行的事件。这用于测试,只应在生产系统中使用。它已被弃用,未来版本中可能会移除。
-
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={file_name|pipe_name}
Type 字符串 对于连接到
localhost
的连接,Unix套接字文件路径,或在Windows上,用于命名管道的名称。在Windows上,此选项仅适用于服务器以支持命名管道连接而启动时启用了
named_pipe
系统变量。此外,执行连接的用户必须是Windows组中的一员,该组由named_pipe_full_access_group
系统变量指定。 -
以
--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-xxx
开头的选项不同,--ssl-fips-mode
用于影响哪些加密操作被允许,而不是用于建立加密连接。请参阅第8.8节,“FIPS支持”。这些
--ssl-fips-mode
值是允许的:-
OFF
: 禁用FIPS模式。 -
ON
: 启用FIPS模式。 -
STRICT
: 启用“严格”FIPS模式。
Note如果OpenSSL FIPS对象模块不可用,唯一允许的
--ssl-fips-mode
值为OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时产生警告,并以非FIPS模式操作。此选项已弃用。预计将在MySQL的未来版本中移除。
-
-
Command-Line Format --start-datetime=datetime
Type 日期时间 从第一个事件开始读取二进制日志,该事件的时间戳等于或晚于
datetime
参数。datetime
值是相对于在运行mysqlbinlog的机器本地时间区的格式。该值应为接受DATETIME或TIMESTAMP数据类型的格式。例如:mysqlbinlog --start-datetime="2005-12-25 11:25:56" binlog.000003
此选项对于点时间恢复非常有用。请参阅in-Time (Incremental) Recovery">第9.5节,“点时间(增量)恢复”。
-
--start-position=
,N
-j
N
Command-Line Format --start-position=#
Type 数字 从二进制日志的指定位置开始解码,包括所有事件在该位置或之后开始的输出。位置是一个字节点,在日志文件中,不是事件计数器;它需要指向一个事件的开始位置,以生成有用的输出。这选项适用于命令行上第一个日志文件名。
这个选项支持的最大值为18446744073709551616(2^64-1),除非同时使用
--read-from-remote-server
或--read-from-remote-source
,那么最大值为4294967295。这个选项对于点时间恢复非常有用。参见第9.5节,“Point-在时间(增量)恢复”。
-
Command-Line Format --stop-datetime=datetime
在遇到具有或晚于指定
--start-datetime
参数值的事件时停止读取二进制日志。有关--start-datetime
参数值的描述,请参阅该选项的说明。这个选项对于点时间恢复非常有用。参见第9.5节,“Point-在时间(增量)恢复”。
-
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节,“指定 mysqlbinlog 服务器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
选项来指定为mysqlbinlog报告的服务器ID。 -
Command-Line Format --stop-position=#
Type 数字 在日志文件中停止解码并排除任何开始位置为
N
或之后的事件。位置是指向日志文件中的字节点,不是事件计数器;它需要指向最后一个要包含在输出中的事件的起始位置之前的位置。这个选项适用于命令行上最后一个命名的日志文件。这项选项对于进行点时恢复非常有用。请参阅第9.5节,“点时(增量)恢复”。
-
--tls-ciphersuites=
ciphersuite_list
Command-Line Format --tls-ciphersuites=ciphersuite_list
Type 字符串 用于加密连接的TLSv1.3许可的密码套件。值是由冒号分隔的一或多个密码套件名称组成的列表。可以为此选项命名的密码套件取决于编译MySQL时使用的SSL库。请参阅第8.3.2节,“加密连接TLS协议和密码”。
-
--tls-sni-servername=
server_name
Command-Line Format --tls-sni-servername=server_name
Type 字符串 当指定时,该名称将传递给libmysqlclient C API库,使用
mysql_options()
的MYSQL_OPT_TLS_SNI_SERVERNAME
选项。服务器名称不区分大小写。要查看当前会话中客户端指定的服务器名称(如果有),请检查Tls_sni_server_name
状态变量。Server Name Indication (SNI) 是TLS协议的一个扩展(OpenSSL必须使用TLS扩展编译才能使此选项工作)。MySQL对SNI的实现仅限于客户端侧。
-
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协议和密码”。
-
--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账户的用户名。
如果您正在使用
Rewriter
插件,您应该授予该用户SKIP_QUERY_REWRITE
权限。 -
--verbose
,-v
Command-Line Format --verbose
重建行事件并以注释形式显示它们,包括适用的表分区信息。如果提供了两次(通过传递“-vv”或“--verbose --verbose”,输出将包含指示列数据类型和一些元数据的注释,以及如果系统变量
binlog_rows_query_log_events
设置为TRUE
的查询日志事件信息。有关使用
--base64-output
和--verbose
对行事件输出的效果的示例,请参阅第6.6.9.2节,“mysqlbinlog 行事件显示”。 -
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 程序执行其中包含的语句:
mysqlbinlog binlog.000001 > tmpfile
... edit tmpfile ...
mysql -u root -p < tmpfile
当mysqlbinlog被调用时,它可以使用--start-position
选项来显示在二进制日志中偏移量大于或等于给定位置的事件(必须匹配一个事件的开始)。它还可以根据--stop-datetime
选项停止,并且可以回滚到特定的日期和时间点。这使得您能够使用--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进程尝试使用该表时,服务器会报告“unknown table.”
为了避免这些问题,请使用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"
您还可以将多个二进制日志文件作为流输入提供给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
选项。
因为 mysqlbinlog 将 LOAD DATA
语句转换为 LOAD DATA LOCAL
语句(即添加了 LOCAL
),您处理这些语句的客户端和服务器都必须配置有 LOCAL
能力。请参阅第 8.1.6 节,“LOAD DATA LOCAL 的安全考虑”。
用于 LOAD DATA LOCAL
语句的临时文件不会自动删除,因为它们直到您实际执行这些语句才会被需要。您应该在不再需要语句日志时手动删除临时文件。这些文件可以在临时文件目录中找到,名称类似于 original_file_name-#-#
。