服务器的二进制日志由包含“ 事件 ”的文件组成,这些 事件描述了对数据库内容的修改。服务器以二进制格式写入这些文件。要以文本格式显示其内容,请使用 mysqlbinlog实用程序。您还可以使用 mysqlbinlog显示复制设置中从属服务器写入的中继日志文件的内容,因为中继日志的格式与二进制日志相同。
像这样 调用mysqlbinlog:
shell>mysqlbinlog [options] log_file ...
例如,要显示名为的二进制日志文件的内容binlog.000003,请使用以下命令:
shell>mysqlbinlog binlog.0000003
输出包括中包含的事件 binlog.000003。对于基于语句的日志记录,事件信息包括SQL语句,在其上执行该语句的服务器的ID,该语句在执行时的时间戳,所花费的时间等等。对于基于行的日志记录,该事件指示行更改,而不是SQL语句。有关日志记录模式的信息,请参见第17.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的输入 ),以重做日志中的语句。这对于服务器崩溃后的恢复操作很有用。有关其他用法示例,请参见本节后面的讨论以及第7.5节“使用二进制日志进行时间点(增量)恢复”。为了执行mysqlbinlog所使用的内部使用BINLOG语句,用户需要使用 或 特权,或者该 特权加上适当的特权来执行每个日志事件。 BINLOG_ADMINSUPERREPLICATION_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根本无法将该文件识别为二进制日志文件。有关二进制日志加密的更多信息,请参见 第17.3.2节“加密二进制日志文件和中继日志文件”。
针对大型二进制日志 运行mysqlbinlog时,请注意文件系统有足够的空间容纳生成的文件。要配置 mysqlbinlog用于临时文件的目录,请使用 TMPDIR环境变量。
mysqlbinlogpseudo_slave_mode在执行任何SQL语句之前将的值设置 为true。此系统变量影响XA事务, original_commit_timestamp复制延迟时间戳和 original_server_version系统变量以及不支持的SQL模式的处理。
mysqlbinlog支持以下选项,可以在命令行或 选项文件的 [mysqlbinlog]和[client]组中指定。
--help, -?
显示帮助消息并退出。
--base64-output=value
此选项确定何时使用BINLOG语句将事件显示为以base-64字符串编码 。该选项具有以下允许值(不区分大小写):
AUTO(“自动”)或 UNSPEC(“未指定”)BINLOG在必要时(即,用于格式描述事件和行事件)自动显示 语句。如果没有 --base64-output 给出选项,则效果与相同 --base64-output=AUTO。
注意
BINLOG 如果打算使用mysqlbinlog的输出来重新执行二进制日志文件的内容,则 自动显示是唯一安全的行为。其他选项值仅用于调试或测试目的,因为它们可能会产生不包含可执行形式的所有事件的输出。
NEVER使 BINLOG语句不显示。如果发现必须使用来显示的行事件,则mysqlbinlog退出并出现错误BINLOG。
DECODE-ROWS通过还指定选项,向mysqlbinlog指定 打算对行事件进行解码并将其显示为带注释的SQL语句 --verbose。与一样NEVER, DECODE-ROWS禁止显示 BINLOG语句,但是与不同NEVER,如果找到行事件,它不会退出并显示错误。
--bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。
--binlog-row-event-max-size=N
|属性|值|
|命令行格式| --binlog-row-event-max-size=#|
|类型| 数字|
|默认值| 4294967040|
|最低值| 256|
|最大值| 18446744073709547520|
指定基于行的二进制日志事件的最大大小,以字节为单位。如果可能,将行分组为小于此大小的事件。该值应为256的倍数。默认值为4GB。
--character-sets-dir=dir_name
字符集的安装目录。
--compress
尽可能压缩客户端和服务器之间发送的所有信息。
MySQL 8.0.17中添加了此选项。从MySQL 8.0.18开始,不推荐使用。它将在将来的MySQL版本中删除。请参阅 旧版连接压缩配置。
--compression-algorithms=value
用于连接到服务器的允许的压缩算法。可用算法与protocol_compression_algorithms 系统变量相同 。默认值为 uncompressed。
MySQL 8.0.18中添加了此选项。
--connection-server-id=server_id
--connection-server-id 指定mysqlbinlog 连接到服务器时报告的服务器ID 。它可以用来避免与从属服务器或另一个mysqlbinlog进程的ID发生冲突 。
如果--read-from-remote-server 指定了该 选项,则mysqlbinlog报告服务器ID为0,该值告诉服务器在发送最后一个日志文件后断开连接(非阻塞行为)。如果--stop-never还指定了该 选项来保持与服务器的连接,则 mysqlbinlog默认报告服务器ID为1而不是0,并且 --connection-server-id 可以根据需要替换该服务器ID。请参见 第4.6.8.4节“指定mysqlbinlog服务器ID”。
--database=db_name, -d db_name
该选项使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仅输出那些t1在测试数据库中修改过的条目,而不管是否USE 已发布或默认数据库是什么。
如果服务器在binlog_format设置为的 情况下运行, MIXED并且您希望可以将该选项与mysqlbinlog一起使用,则 --database必须确保已修改的表位于由选择的数据库中USE。(特别是,不应使用跨数据库更新。)
与--rewrite-db选项一起使用时 ,将 --rewrite-db首先应用选项。然后--database使用重写的数据库名称应用该选项。在这方面,提供选项的顺序没有区别。
--debug[=debug_options], -# [debug_options]
编写调试日志。典型的 debug_options字符串是 。默认值为 。 d:t:o,file_named:t:o,/tmp/mysqlbinlog.trace
--debug-check
程序退出时,打印一些调试信息。
--debug-info
程序退出时,打印调试信息以及内存和CPU使用情况统计信息。
--default-auth=plugin
有关使用哪个客户端身份验证插件的提示。
--defaults-extra-file=file_name
在全局选项文件之后但在用户选项文件之前(在Unix上)读取此选项文件。如果文件不存在或无法访问,则发生错误。 file_name如果给出为相对路径名而不是完整路径名,则相对于当前目录解释。
--defaults-file=file_name
仅使用给定的选项文件。如果文件不存在或无法访问,则发生错误。 file_name如果给出为相对路径名而不是完整路径名,则相对于当前目录解释。
例外:即使这样--defaults-file,客户端程序也会 读取.mylogin.cnf。
--defaults-group-suffix=str
不仅阅读常规选项组,而且阅读具有常规名称和后缀的组 str。例如, mysqlbinlog通常读取 [client]和 [mysqlbinlog]组。如果--defaults-group-suffix=_other 给出了该 选项,mysqlbinlog也会读取[client_other]和 [mysqlbinlog_other]组。
--disable-log-bin, -D
禁用二进制日志记录。如果使用该--to-last-log选项并将输出发送到同一MySQL服务器,这对于避免无限循环很有用 。在崩溃后进行恢复以避免重复记录的语句时,此选项也很有用。
此选项使mysqlbinlogSET sql_log_bin = 0在其输出中包含一条语句,以禁用其余输出的二进制日志记录。操纵sql_log_bin系统变量的会话值 是受限制的操作,因此此选项要求您具有足以设置受限制的会话变量的特权。请参见第5.1.9.1节“系统变量特权”。
--exclude-gtids=gtid_set
不要显示中列出的任何组 gtid_set。
--force-if-open, -F
读取二进制日志文件,即使它们已打开或未正确关闭。
--force-read, -f
使用此选项,如果mysqlbinlog读取了它无法识别的二进制日志事件,它将打印警告,忽略该事件,然后继续。没有这个选项,如果mysqlbinlog读取了这样的事件,它将停止。
--get-server-public-key
从服务器请求基于RSA密钥对的密码交换所需的公共密钥。此选项适用于使用caching_sha2_password身份验证插件进行身份验证的客户端 。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。
如果 给出 --server-public-key-path=file_name并指定了有效的公共密钥文件,则它优先于--get-server-public-key 。
--hexdump, -H
显示日志注释的十六进制转储,如 第4.6.8.1节“ mysqlbinlog十六进制转储格式”所述。十六进制输出对于复制调试很有帮助。
--host=host_name, -h host_name
从给定主机上的MySQL服务器获取二进制日志。
--idempotent
告诉MySQL服务器在处理更新时使用幂等模式;这会导致服务器在处理更新时在当前会话中遇到的任何重复键或未找到键错误得到抑制。每当需要或有必要将一个或多个二进制日志重播到可能不包含日志所引用的所有数据的MySQL服务器时,此选项就可能有用。
该选项的作用范围仅包括当前的 mysqlbinlog客户端和会话。
--include-gtids=gtid_set
仅显示中列出的组 gtid_set。
--local-load=dir_name, -l dir_name
LOAD DATA在指定目录中 准备本地临时文件。
重要
这些临时文件不会被mysqlbinlog或任何其他MySQL程序自动删除 。
--login-path=name
从.mylogin.cnf登录路径文件中的命名登录路径读取选项 。阿 “ 登录路径 ”是含有指定要连接到哪个MySQL服务器和选项哪个帐户作为认证选项组。要创建或修改登录路径文件,请使用 mysql_config_editor实用程序。请参见 第4.6.7节“ mysql_config_editor -MySQL配置实用程序”。
--no-defaults
不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,--no-defaults则可以使用该选项 来防止读取它们。
唯一的例外是,.mylogin.cnf 在所有情况下都会读取该文件(如果存在)。这样,即使--no-defaults使用密码,也可以通过比命令行更安全的方式指定密码 。(.mylogin.cnf由mysql_config_editor实用程序创建 。请参见 第4.6.7节“ mysql_config_editor -MySQL配置实用程序”。)
--offset=N, -o N
跳过N日志中的第一个条目。
--open-files-limit=N
指定要保留的打开文件描述符的数量。
--password[=password], -p[password]
用于连接服务器的MySQL帐户的密码。密码值是可选的。如果未给出,则 mysqlbinlog提示输入一个。如果提供,则或 和后面的密码之间 必须没有空格。如果未指定密码选项,则默认为不发送密码。 --password=-p
在命令行上指定密码应该被认为是不安全的。为避免在命令行上输入密码,请使用选项文件。
要明确指定没有密码,并且mysqlbinlog不应提示输入密码 ,请使用 --skip-password 选项。
--plugin-dir=dir_name
在其中查找插件的目录。如果该--default-auth选项用于指定身份验证插件,但 mysqlbinlog找不到它,请指定此选项 。
--port=port_num, -P port_num
用于连接到远程服务器的TCP/IP端口号。
--print-defaults
打印程序名称及其从选项文件中获取的所有选项。
--print-table-metadata
从二进制日志中打印与表相关的元数据。配置使用记录的与表相关的元数据二进制文件的数量 binlog-row-metadata。
--protocol={TCP|SOCKET|PIPE|MEMORY}
用于连接到服务器的连接协议。当其他连接参数通常导致使用所需协议以外的协议时,此功能很有用。
--raw
默认情况下,mysqlbinlog读取二进制日志文件并以文本格式写入事件。该 --raw选项告诉 mysqlbinlog以其原始二进制格式编写它们。它的使用 --read-from-remote-server 也需要使用,因为文件是从服务器请求的。 mysqlbinlog为从服务器读取的每个文件写一个输出文件。该 --raw选项可用于备份服务器的二进制日志。使用该 --stop-never选项,备份是“ 实时 ”的,因为 mysqlbinlog保持连接到服务器。默认情况下,输出文件将以与原始日志文件相同的名称写入当前目录。可以使用该--result-file选项修改输出文件名 。
--read-from-remote-master=type
通过将选项值分别设置为或 , 使用COM_BINLOG_DUMP或 COM_BINLOG_DUMP_GTID命令 从MySQL服务器读取二进制日志 。如果 与结合使用 ,则可以在主服务器上过滤掉事务,从而避免不必要的网络流量。 BINLOG-DUMP-NON-GTIDSBINLOG-DUMP-GTIDS--read-from-remote-master=BINLOG-DUMP-GTIDS--exclude-gtids
连接参数选项与此选项或选项一起使用 --read-from-remote-server 。这些选项包括 --host, --password, --port, --protocol, --socket,和 --user。如果两个远程选项均未指定,则连接参数选项将被忽略。
该REPLICATION SLAVE 权限才能使用此选项。
--read-from-remote-server, -R
从MySQL服务器读取二进制日志,而不是读取本地日志文件。此选项要求远程服务器正在运行。它仅适用于远程服务器上的二进制日志文件,不适用于中继日志文件。
连接参数选项与此选项或选项一起使用 --read-from-remote-master 。这些选项包括 --host, --password, --port, --protocol, --socket,和 --user。如果两个远程选项均未指定,则连接参数选项将被忽略。
该REPLICATION SLAVE 权限才能使用此选项。
这个选项就像 --read-from-remote-master=BINLOG-DUMP-NON-GTIDS。
--result-file=name, -r name
如果不使用该--raw 选项,则此选项指示 mysqlbinlog将文本输出写入的文件。使用 --raw, mysqlbinlog为从服务器传输的每个日志文件写入一个二进制输出文件,默认情况下使用与原始日志文件相同的名称将它们写入当前目录。在这种情况下, --result-file选项值被视为修改输出文件名的前缀。
--rewrite-db='from_name->to_name'
从基于行或基于语句的日志中读取时,请将的所有情况重写 from_name为 to_name。对于基于行的日志,对行进行重写;对于基于USE语句的日志,对子句进行重写 。
警告
使用此选项时,表名称与数据库名称匹配的语句不会重写为使用新名称。
用作此选项的值的重写规则是具有形式的字符串 ,如前所示,因此,必须用引号将其引起来。 'from_name->to_name'
要采用多个重写规则,请多次指定该选项,如下所示:
shell>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,然后在数据库中的所有更新的任何表mydb,并 yourdb包含在输出。另一方面,如果它以开头--rewrite-db='mydb->yourdb' --database=mydb,则 mysqlbinlog根本不输出任何语句:由于对所有更新mydb均yourdb在应用该--database选项之前首先被重写为对的更新,因此不存在与之 匹配的更新 --database=mydb。
--secure-auth
--server-id=id
仅显示由具有给定服务器ID的服务器创建的事件。
--server-id-bits=N
仅使用的前N几位 server_id来标识服务器。如果二进制日志被写了一个 mysqld的存储在最显著位设置为小于32的服务器ID位和用户数据,运行mysqlbinlog可以用 --server-id-bits一套32使得可以看到这些数据。
只有NDB Cluster发行版随附的mysqlbinlog版本或NDB Cluster支持的内置版本的mysqlbinlog才支持此选项 。
--server-public-key-path=file_name
包含服务器用于基于RSA密钥对的密码交换所需的公用密钥的客户端副本的文件的路径名。该文件必须为PEM格式。此选项适用于使用sha256_password或 caching_sha2_password身份验证插件进行身份验证的客户端 。对于未通过这些插件之一进行身份验证的帐户,将忽略此选项。如果未使用基于RSA的密码交换,也将被忽略,例如客户端使用安全连接连接到服务器时。
如果 给出--server-public-key-path=file_name并指定了有效的公共密钥文件,则它优先于--get-server-public-key 。
对于sha256_password,仅当MySQL是使用OpenSSL构建的时,此选项才适用。
--set-charset=charset_name
在输出中 添加一条语句以指定用于处理日志文件的字符集。 SET NAMES charset_name
--shared-memory-base-name=name
在Windows上,共享内存名称,用于使用共享内存与本地服务器建立的连接。默认值为MYSQL。共享内存名称区分大小写。
仅当服务器在shared_memory启用系统变量以支持共享内存连接的情况下启动时,此选项才适用 。
--short-form, -s
仅显示日志中包含的语句,而没有任何其他信息或基于行的事件。这仅用于测试,不应在生产系统中使用。不推荐使用,它将在以后的版本中删除。
--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"
否则通常不建议在生产中使用此选项。
--socket=path, -S path
对于与的连接localhost,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。
在Windows上,仅当在named_pipe 启用了支持命名管道连接的系统变量的情况下启动服务器时,此选项才适用。另外,建立连接的用户必须是named_pipe_full_access_group 系统变量指定的Windows组的成员 。
--ssl*
以开头的选项 --ssl指定是否使用SSL连接到服务器,并指示在何处查找SSL密钥和证书。请参阅 加密连接的命令选项。
--ssl-fips-mode={OFF|ON|STRICT}
控制是否在客户端上启用FIPS模式。该--ssl-fips-mode选项与其他选项的不同之处在于,该 选项 不用于建立加密连接,而是影响允许的加密操作。
这些--ssl-fips-mode 值是允许的:
OFF:禁用FIPS模式。
ON:启用FIPS模式。
STRICT:启用“ 严格 ” FIPS模式。
注意
如果OpenSSL的FIPS对象模块不可用时,对于唯一的允许值 --ssl-fips-mode是 OFF。在这种情况下,设置 --ssl-fips-mode为 ON或STRICT导致客户端在启动时发出警告并以非FIPS模式运行。
--start-datetime=datetime
在第一个事件的时间戳等于或晚于datetime参数的时候开始读取二进制日志 。该 datetime值相对于运行mysqlbinlog的计算机上的本地时区 。该值应采用DATETIME或 TIMESTAMP数据类型可接受的格式 。例如:
shell>mysqlbinlog --start-datetime="2005-12-25 11:25:56" binlog.000003
此选项对于时间点恢复很有用。请参见 第7.3节“示例备份和恢复策略”。
--start-position=N, -j N
在位置等于或大于的第一个事件开始读取二进制日志 N。此选项适用于在命令行上命名的第一个日志文件。
--stop-datetime=datetime
在第一个事件的时间戳等于或晚于datetime参数的情况下,停止读取二进制日志 。此选项对于时间点恢复很有用。有关值的--start-datetime 信息,请参见选项 说明datetime。
--stop-never
此选项与一起使用 --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发生冲突。
--stop-never-slave-server-id=id
此选项已被弃用,并将在以后的版本中删除。--connection-server-id 而是使用该 选项为mysqlbinlog指定要报告的服务器ID。
--stop-position=N
在第一个事件中停止读取二进制日志,该事件的位置等于或大于 N。此选项适用于在命令行上命名的最后一个日志文件。
此选项对于时间点恢复很有用。
--tls-ciphersuites=ciphersuite_list
使用TLSv1.3的加密连接的允许密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。可以为此选项命名的密码套件取决于用于编译MySQL的SSL库。
该选项是在MySQL 8.0.16中添加的。
--tls-version=protocol_list
加密连接允许的TLS协议。该值是一个或多个逗号分隔的协议名称的列表。可以为此选项命名的协议取决于用于编译MySQL的SSL库。有关详细信息,请参见 第6.3.2节“加密的连接TLS协议和密码”。
--to-last-log, -t
不要在从MySQL服务器请求的二进制日志的结尾处停止,而要继续打印直到最后一个二进制日志的结尾。如果将输出发送到同一MySQL服务器,则可能导致无限循环。此选项要求 --read-from-remote-server。
--user=user_name, -u user_name
连接到远程服务器时要使用的MySQL帐户的用户名。
--verbose, -v
重建行事件并将其显示为带注释的SQL语句,并在适用时带有表分区信息。如果两次给出此选项(通过传递“ -vv”或“ --verbose --verbose”),则输出将包含指示列数据类型和某些元数据的注释,以及诸如行查询日志事件之类的信息日志事件(如果存在)的 binlog_rows_query_log_events 系统变量被设置为TRUE。
有关显示行事件输出--base64-output及其 --verbose对行事件输出的影响的示例 ,请参见第4.6.8.2节“ mysqlbinlog行事件显示”。
--verify-binlog-checksum, -c
验证二进制日志文件中的校验和。
--version, -V
显示版本信息并退出。
使用此选项时显示 的mysqlbinlog版本号为3.4。
--zstd-compression-level=level
用于与使用zstd压缩算法的服务器的连接的压缩级别。允许的级别为1到22,更大的值表示压缩级别增加。默认 zstd压缩级别为3。压缩级别设置对不使用zstd压缩的连接无效。
MySQL 8.0.18中添加了此选项。
您可以将mysqlbinlog的输出通过管道传递到mysql客户端,以执行二进制日志中包含的事件。使用旧备份时,可以使用此技术从崩溃中恢复(请参见 第7.5节“使用二进制日志进行时间点(增量)恢复”)。例如:
shell>mysqlbinlog binlog.000001 | mysql -u root -p
要么:
shell>mysqlbinlog binlog.[0-9]* | mysql -u root -p
如果mysqlbinlog生成的语句可能包含BLOB值,则在mysql处理它们时可能会引起问题。在这种情况下,请使用 选项调用mysql--binary-mode。
如果您需要先修改语句日志(例如,删除由于某种原因不想执行的语句), 也可以将mysqlbinlog的输出重定向 到文本文件。编辑文件后,通过将其用作mysql程序的输入来执行包含的语句:
shell>mysqlbinlog binlog.000001 > tmpfile
shell>... edit tmpfile ...
shell>mysql -u root -p < tmpfile
当使用该选项调用 mysqlbinlog时--start-position,它仅显示二进制日志中具有大于或等于给定位置的偏移量的那些事件(给定位置必须与一个事件的开头匹配)。当看到具有给定日期和时间的事件时,它还具有停止和启动的选项。这使您可以使用--stop-datetime选项执行时间点恢复 (例如,可以说“ 将我的数据库前滚到上午10:30的状态 ”)。
处理多个文件。 如果要在MySQL服务器上执行多个二进制日志,那么安全的方法是使用与服务器的单个连接来处理它们。这是一个示例,说明什么可能是不安全的:
shell>mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!
shell>mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!
如果第一个日志文件包含一条CREATE TEMPORARY TABLE语句,第二个日志包含使用临时表的语句,则使用到服务器的多个连接以这种方式处理二进制日志会引起问题 。当第一个 mysql进程终止时,服务器删除临时表。当第二个mysql 进程尝试使用该表时,服务器报告 “ 未知表”。”
为避免此类问题,请使用单个 mysql进程执行要处理的所有二进制日志的内容。这是一种方法:
shell>mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
另一种方法是将所有日志写入单个文件,然后处理该文件:
shell>mysqlbinlog binlog.000001 > /tmp/statements.sql
shell>mysqlbinlog binlog.000002 >> /tmp/statements.sql
shell>mysql -u root -p -e "source /tmp/statements.sql"
从MySQL 8.0.12开始,您还可以使用外壳管道将多个二进制日志文件作为流输入提供给mysqlbinlog。压缩二进制日志文件的归档文件可以解压缩并直接提供给 mysqlbinlog。在此示例中, binlog-files_1.gz包含多个二进制日志文件以进行处理。管道中提取的内容 binlog-files_1.gz,管道二进制日志文件mysqlbinlog可以作为标准输入,以及管道的输出mysqlbinlog可以进入 MySQL的客户机以供执行:
shell>gzip -cd binlog-files_1.gz | ./mysqlbinlog - | ./mysql -uroot -p
您可以指定多个存档文件,例如:
shell>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启用了该 功能。请参见 第6.1.6节“ LOAD DATA LOCAL的安全性问题”。
警告
为LOAD DATA LOCAL语句创建的临时文件 不会 自动删除,因为在实际执行这些语句之前,需要使用它们。不再需要语句日志后,应自行删除临时文件。这些文件可以在临时文件目录中找到,并且名称类似于 original_file_name-#-#。