4.6.7 mysqlbinlog-处理二进制日志文件的 Util
服务器的二进制日志由包含“事件”的文件组成,这些事件描述了对数据库内容的修改。服务器以二进制格式写入这些文件。要以文本格式显示其内容,请使用mysqlbinlogUtil。您还可以使用mysqlbinlog显示复制设置中从属服务器写入的中继日志文件的内容,因为中继日志的格式与二进制日志相同。 第 5.4.4 节“二进制日志”和第 16.2.4 节“中继日志和复制应用程序元数据存储库”中进一步讨论了二进制日志和中继日志。
像这样调用mysqlbinlog:
shell> mysqlbinlog [options] log_file ...
例如,要显示名为binlog.000003
的二进制日志文件的内容,请使用以下命令:
shell> mysqlbinlog binlog.0000003
输出包括binlog.000003
中包含的事件。对于基于语句的日志记录,事件信息包括 SQL 语句,在其上执行该语句的服务器的 ID,该语句在执行时的时间戳,所花费的时间等等。对于基于行的日志记录,该事件指示行更改,而不是 SQL 语句。有关日志记录模式的信息,请参见第 16.2.1 节“复制格式”。
事件之前有提供附加信息的标题 Comments。例如:
# at 141
#100309 9:28:36 server id 123 end_log_pos 245
Query thread_id=3350 exec_time=11 error_code=0
在第一行中,at
后面的数字 table 示二进制日志文件中事件的文件偏移量或起始位置。
第二行以日期和时间开头,该日期和时间指示该语句在事件起源的服务器上何时开始。为了进行复制,此时间戳会传播到从属服务器。 server id
是事件起源的服务器的server_id值。 end_log_pos
指示下一个事件的开始位置(即,它是当前事件 1 的结束位置)。 thread_id
指示哪个线程执行了事件。 exec_time
是在主服务器上执行事件所花费的时间。在从站上,它是从站上的结束执行时间减去主站上的开始执行时间的差。差异可作为复制落后于母版多少的 Metrics。 error_code
table 示执行事件的结果。零 table 示没有错误发生。
Note
使用事件组时,可以将事件的文件偏移量分组在一起,并且可以将事件的 Comments 分组在一起。不要将这些分组的事件误认为空白文件偏移量。
可以重新执行mysqlbinlog的输出(例如,通过将其用作mysql的 Importing)来重做日志中的语句。这对于服务器崩溃后的恢复操作很有用。有关其他用法示例,请参见本节后面和第 7.5 节“时间点(增量)恢复”中的讨论。
通常,您使用mysqlbinlog直接读取二进制日志文件,并将其应用于本地 MySQL 服务器。也可以通过使用--read-from-remote-server选项从远程服务器读取二进制日志。要读取远程二进制日志,可以指定连接参数选项以指示如何连接到服务器。这些选项是--host,--password,--port,--protocol,--socket和--user。
当针对大型二进制日志运行mysqlbinlog时,请注意文件系统有足够的空间容纳生成的文件。要配置mysqlbinlog用于临时文件的目录,请使用TMPDIR
环境变量。
mysqlbinlog在执行任何 SQL 语句之前将pseudo_slave_mode的值设置为 true。此系统变量影响 XA 事务的处理。
mysqlbinlog支持以下选项,可以在命令行或选项文件的[mysqlbinlog]
和[client]
组中指定这些选项。有关 MySQL 程序使用的选项文件的信息,请参见第 4.2.2.2 节“使用选项文件”。
table4.22 mysqlbinlog 选项
Option Name | Description | Introduced | Deprecated |
---|---|---|---|
--base64-output | 使用 base-64 编码打印二进制日志条目 | ||
--bind-address | 使用指定的网络接口连接到 MySQL Server | ||
--binlog-row-event-max-size | 二进制日志最大事件大小 | ||
--character-sets-dir | 字符集的安装目录 | ||
--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 | 如果 mysqlbinlog 读取了无法识别的二进制日志事件,则会输出警告 | ||
--get-server-public-key | 从服务器请求 RSA 公钥 | 5.7.23 | |
--help | 显示帮助信息并退出 | ||
--hexdump | 显示登录 Comments 的十六进制转储 | ||
--host | MySQL 服务器所在的主机 | ||
--idempotent | 使服务器仅在从此会话处理二进制日志更新时使用幂等模式 | ||
--include-gtids | 仅显示提供的 GTID 集中的组 | ||
--local-load | 在指定目录中为 LOAD DATA 准备本地临时文件 | ||
--login-path | 从.mylogin.cnf 中读取登录路径选项 | ||
--no-defaults | 不读取选项文件 | ||
--offset | 跳过日志中的前 N 个条目 | ||
open_files_limit | 指定要保留的打开文件 Descriptors 的数量 | ||
--password | 连接服务器时使用的密码 | ||
--plugin-dir | 安装插件的目录 | ||
--port | 用于连接的 TCP/IP 端口号 | ||
--print-defaults | 打印默认选项 | ||
--protocol | 使用的传输协议 | ||
--raw | 将事件以原始(二进制)格式写入输出文件 | ||
--read-from-remote-master | 从 MySQL 主服务器读取二进制日志,而不是读取本地日志文件 | ||
--read-from-remote-server | 从 MySQL 服务器而不是本地日志文件读取二进制日志 | ||
--result-file | 直接输出到命名文件 | ||
--rewrite-db | 从基于行的格式编写的日志中播放时,为数据库创建重写规则。可多次使用 | ||
--secure-auth | 不要以旧(4.1 之前)格式向服务器发送密码 | Yes | |
--server-id | 仅提取由具有给定服务器 ID 的服务器创建的那些事件 | ||
--server-id-bits | 告诉 mysqlbinlog 当 mysqld 编写的 server-id-bits 设置为小于最大值时,如何解释二进制日志中的服务器 ID;仅受 MySQL Cluster 版本的 mysqlbinlog 支持 | ||
--server-public-key-path | 包含 RSA 公钥的文件的路径名 | 5.7.23 | |
--set-charset | 在输出中添加 SET NAMES charset_name 语句 | ||
--shared-memory-base-name | 共享内存连接的共享内存名称(仅 Windows) | ||
--short-form | 仅显示日志中包含的语句 | ||
--skip-gtids | 不要打印任何 GTID。从包含 GTID 的二进制日志写入转储文件时使用此功能 | ||
--socket | Unix 套接字文件或 Windows 命名管道使用 | ||
--ssl | 启用连接加密 | ||
--ssl-ca | 包含受信任的 SSL 证书颁发机构列 table 的文件 | ||
--ssl-capath | 包含受信任的 SSL 证书颁发机构证书文件的目录 | ||
--ssl-cert | 包含 X.509 证书的文件 | ||
--ssl-cipher | 连接加密的允许密码 | ||
--ssl-crl | 包含证书吊销列 table 的文件 | ||
--ssl-crlpath | 包含证书吊销列 table 文件的目录 | ||
--ssl-key | 包含 X.509 密钥的文件 | ||
--ssl-mode | 与服务器连接的所需安全状态 | 5.7.11 | |
--ssl-verify-server-cert | 根据服务器证书的通用名身份验证主机名 | ||
--start-datetime | 从第一个事件中读取时间戳等于或晚于 datetime 参数的二进制日志 | ||
--start-position | 从第一个事件中位置等于或大于参数的二进制日志解码 | ||
--stop-datetime | 在时间戳等于或大于 datetime 参数的第一个事件时停止读取二进制日志 | ||
--stop-never | 读取最后一个二进制日志文件后保持与服务器的连接 | ||
--stop-never-slave-server-id | 连接到服务器时要报告的从服务器 ID | ||
--stop-position | 在第一个事件中停止解码二进制日志,位置等于或大于参数 | ||
--tls-version | 允许的 TLS 协议进行加密连接 | 5.7.10 | |
--to-last-log | 不要在从 MySQL 服务器请求的二进制日志的结尾处停止,而要 continue 打印到最后一个二进制日志的结尾 | ||
--user | 连接服务器时使用的 MySQL 用户名 | ||
--verbose | 将行事件重建为 SQL 语句 | ||
--verify-binlog-checksum | 验证二进制日志中的校验和 | ||
--version | 显示版本信息并退出 |
- --help,
-?
显示帮助消息并退出。
此选项确定何时使用BINLOG语句将事件显示为以 base-64 字符串编码。该选项具有以下允许值(不区分大小写):
AUTO
(“自动”)或UNSPEC
(“未指定”)在必要时(即,用于格式描述事件和行事件)自动显示BINLOG条语句。如果未提供--base64-output选项,则效果与--base64-output=AUTO相同。
Note
如果您打算使用mysqlbinlog的输出来重新执行二进制日志文件的内容,则自动显示BINLOG是唯一安全的行为。其他选项值仅用于调试或测试目的,因为它们可能会产生不包含可执行形式的所有事件的输出。
-
NEVER
导致不显示BINLOG语句。如果发现必须使用BINLOG显示的行事件,则mysqlbinlog退出并返回错误。 -
DECODE-ROWS
还通过指定--verbose选项,向mysqlbinlog指定您打算将行事件解码并显示为带 Comments 的 SQL 语句。像NEVER
一样,DECODE-ROWS
禁止显示BINLOG语句,但是与NEVER
不同,如果找到行事件,它不会错误退出。
有关显示--base64-output和--verbose对行事件输出的影响的示例,请参见第 4.6.7.2 节“ mysqlbinlog 行事件显示”。
在具有多个网络接口的计算机上,使用此选项选择用于连接到 MySQL 服务器的接口。
Property | Value |
---|---|
Command-Line Format | --binlog-row-event-max-size=# |
Type | Numeric |
Default Value | 4294967040 |
Minimum Value | 256 |
Maximum Value | 18446744073709547520 |
指定基于行的二进制日志事件的最大大小,以字节为单位。如果可能,将行分组为小于此大小的事件。该值应为 256 的倍数。默认值为 4GB。
字符集的安装目录。参见第 10.15 节“字符集配置”。
此选项用于测试 MySQL 服务器是否支持BINLOG_DUMP_NON_BLOCK
连接标志。正常操作不需要它。
此选项的有效默认值和最小值取决于mysqlbinlog是在阻止模式下运行还是在非阻止模式下运行。当mysqlbinlog以阻止模式运行时,默认(和最小值)为 1;默认值为 1.在非阻塞模式下运行时,默认(和最小值)值为 0.
- --database=db_name,
-d db_name
此选项使mysqlbinlog从二进制日志(仅限本地日志)输出在USE选择* db_name
*作为默认数据库时发生的条目。
mysqlbinlog的--database选项类似于mysqld的--binlog-do-db选项,但是只能用于指定一个数据库。如果多次给出--database,则仅使用最后一个实例。
此选项的效果取决于是否使用基于语句的日志记录格式或基于行的日志记录格式,就像--binlog-do-db的效果取决于是否使用基于语句的日志记录格式或基于行的日志记录格式一样。
基于语句的日志记录. --database选项的工作方式如下:
-
db_name
是默认数据库,但无论语句是修改db_name
*还是其他数据库中的 table,都会输出语句。
-
除非选择*
db_name
作为默认数据库,否则即使语句修改db_name
*中的 table 也不会输出语句。 -
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语句,因为没有默认数据库。它输出USE test之后的三个INSERT语句,但不输出USE db2之后的三个INSERT语句。
mysqlbinlog --database=db2不输出前两个INSERT语句,因为没有默认数据库。它不会在USE test之后输出三个INSERT语句,但是会在USE db2之后输出三个INSERT语句。
基于行的日志记录. mysqlbinlog仅输出更改属于* db_name
*的 table 的条目。默认数据库对此没有影响。假设刚刚描述的二进制日志是使用基于行的日志而不是基于语句的日志创建的。 mysqlbinlog --database=test仅输出在测试数据库中修改t1
的那些条目,而不考虑发出了USE还是默认数据库是什么。
如果服务器在binlog_format设置为MIXED
的情况下运行,并且希望可以将mysqlbinlog与--database选项一起使用,则必须确保修改的 table 位于USE选择的数据库中。 (特别是,不应使用跨数据库更新.)
与--rewrite-db选项一起使用时,首先应用--rewrite-db
选项;然后使用重写的数据库名称应用--database
选项。在这方面,提供选项的 Sequences 没有区别。
- --debug[=debug_options],
-# [debug_options]
编写调试日志。典型的* debug_options
*字符串是d:t:o,file_name
。默认值为d:t:o,/tmp/mysqlbinlog.trace
。
仅当使用WITH_DEBUG构建 MySQL 时,此选项才可用。使用此选项不是构建 Oracle 提供的 MySQL 发行版二进制文件。
程序退出时,打印一些调试信息。
仅当使用WITH_DEBUG构建 MySQL 时,此选项才可用。使用此选项不是构建 Oracle 提供的 MySQL 发行版二进制文件。
程序退出时,打印调试信息以及内存和 CPU 使用情况统计信息。
仅当使用WITH_DEBUG构建 MySQL 时,此选项才可用。使用此选项不是构建 Oracle 提供的 MySQL 发行版二进制文件。
有关使用哪个 Client 端身份验证插件的提示。参见第 6.2.13 节“可插入身份验证”。
在全局选项文件之后但在用户选项文件之前(在 Unix 上)读取此选项文件。如果该文件不存在或无法访问,则发生错误。 * file_name
*如果是相对路径名而不是完整路径名,则相对于当前目录进行解释。
有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”。
仅使用给定的选项文件。如果该文件不存在或无法访问,则发生错误。 * file_name
*如果是相对路径名而不是完整路径名,则相对于当前目录进行解释。
exception:即使使用--defaults-file,Client 端程序也读取.mylogin.cnf
。
有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”。
不仅阅读常规选项组,还阅读具有常规名称和后缀* str
*的组。例如,mysqlbinlog通常读取[client]
和[mysqlbinlog]
组。如果提供了--defaults-group-suffix=_other选项,则mysqlbinlog也会读取[client_other]
和[mysqlbinlog_other]
组。
有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”。
禁用二进制日志记录。如果使用--to-last-log选项并将输出发送到同一 MySQL 服务器,这对于避免无限循环很有用。在崩溃后进行恢复以避免重复记录的语句时,该选项也很有用。
此选项使mysqlbinlog在其输出中包含SET sql_log_bin = 0语句,以禁用其余输出的二进制日志记录。操纵sql_log_bin系统变量的会话值是受限制的操作,因此此选项要求您具有足以设置受限制的会话变量的特权。参见第 5.1.8.1 节“系统变量特权”。
不要显示* gtid_set
*中列出的任何组。
- --force-if-open,
-F
读取二进制日志文件,即使它们已打开或未正确关闭。
- --force-read,
-f
使用此选项,如果mysqlbinlog读取了无法识别的二进制日志事件,它将打印警告,忽略该事件,然后 continue。如果没有此选项,则mysqlbinlog会在读取此类事件时停止。
从服务器请求基于 RSA 密钥对的密码交换所需的公共密钥。此选项适用于使用caching_sha2_password
身份验证插件进行身份验证的 Client 端。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果不使用基于 RSA 的密码交换,也将被忽略,例如 Client 端使用安全连接连接到服务器时。
如果给出了--server-public-key-path=file_name并指定了有效的公共密钥文件,则它优先于--get-server-public-key。
有关caching_sha2_password
插件的信息,请参见第 6.4.1.4 节“缓存 SHA-2 可插入身份验证”。
--get-server-public-key选项已添加到 MySQL 5.7.23 中。
- --hexdump,
-H
显示登录 Comments 的十六进制转储,如第 4.6.7.1 节“ mysqlbinlog 十六进制转储格式”所述。十六进制输出对于复制调试很有帮助。
- --host=host_name,
-h host_name
从给定主机上的 MySQL 服务器获取二进制日志。
告诉 MySQL 服务器在处理更新时使用幂等模式;这会导致服务器在处理更新时在当前会话中遇到的任何重复键或未找到键错误得到抑制。每当需要或有必要将一个或多个二进制日志重播到可能不包含日志所引用的所有数据的 MySQL 服务器时,此选项就可能有用。
此选项的作用范围仅包括当前的mysqlbinlogClient 端和会话。
仅显示* gtid_set
*中列出的组。
- --local-load=dir_name,
-l dir_name
对于与LOAD DATA语句相对应的数据加载操作,mysqlbinlog从二进制日志事件中提取文件,将它们作为临时 ffiles 写入本地文件系统,并写入本地加载数据语句以导致文件被加载。默认情况下,mysqlbinlog将这些临时文件写入特定于 os 的目录。 --local-load选项可用于显式指定mysqlbinlog应该在其中准备本地临时文件的目录。
Important
mysqlbinlog或任何其他 MySQL 程序不会自动删除这些临时文件。
从.mylogin.cnf
登录路径文件中的命名登录路径中读取选项。 “登录路径”是一个选项组,其中包含一些选项,这些选项指定要连接到哪个 MySQL 服务器以及要作为身份验证的帐户。要创建或修改登录路径文件,请使用mysql_config_editorUtil。参见第 4.6.6 节“ mysql_config_editor-MySQL 配置 Util”。
有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”。
不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,则可以使用--no-defaults来防止读取它们。
exception 是在所有情况下都读取.mylogin.cnf
文件(如果存在)。这样即使在使用--no-defaults的情况下,也可以通过比命令行更安全的方式指定密码。 (.mylogin.cnf
由mysql_config_editorUtil 创建。请参见第 4.6.6 节“ mysql_config_editor-MySQL 配置 Util”。)
有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”。
- --offset=N,
-o N
跳过日志中的前* N
*个条目。
指定要保留的打开文件 Descriptors 的数量。
- --password[=password],
-p[password]
用于连接服务器的 MySQL 帐户的密码。密码值是可选的。如果未给出,mysqlbinlog提示 Importing 一个。如果提供,则--password=或-p
与后面的密码之间必须没有空格。如果未指定密码选项,则默认为不发送密码。
在命令行上指定密码应该被认为是不安全的。为避免在命令行上 Importing 密码,请使用选项文件。参见第 6.1.2.1 节,“最终用户密码安全准则”。
要明确指定没有密码并且mysqlbinlog不应提示 Importing 密码,请使用--skip-password选项。
在其中查找插件的目录。如果--default-auth选项用于指定身份验证插件,但mysqlbinlog找不到它,请指定此选项。参见第 6.2.13 节“可插入身份验证”。
- --port=port_num,
-P port_num
用于连接到远程服务器的 TCP/IP 端口号。
打印程序名称及其从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参见第 4.2.2.3 节“影响选项文件处理的命令行选项”。
用于连接到服务器的传输协议。当其他连接参数通常导致使用您想要的协议以外的协议时,此功能很有用。有关允许值的详细信息,请参见第 4.2.5 节“连接传输协议”。
默认情况下,mysqlbinlog读取二进制日志文件并以文本格式写入事件。 --raw选项告诉mysqlbinlog以其原始二进制格式写入它们。它的使用要求也使用--read-from-remote-server,因为文件是从服务器请求的。 mysqlbinlog为从服务器读取的每个文件写入一个输出文件。 --raw选项可用于备份服务器的二进制日志。使用--stop-never选项,由于mysqlbinlog保持与服务器的连接,因此备份是“活动的”。默认情况下,输出文件以与原始日志文件相同的名称写入当前目录。可以使用--result-file选项修改输出文件名。有关更多信息,请参见第 4.6.7.3 节“使用 mysqlbinlog 备份二进制日志文件”。
通过将选项值分别设置为BINLOG-DUMP-NON-GTIDS
或BINLOG-DUMP-GTIDS
,分别使用COM_BINLOG_DUMP
或COM_BINLOG_DUMP_GTID
命令从 MySQL 服务器读取二进制日志。如果--read-from-remote-master=BINLOG-DUMP-GTIDS与--exclude-gtids结合使用,则可以在主服务器上过滤掉事务,从而避免不必要的网络流量。
连接参数选项与此选项或--read-from-remote-server选项一起使用。这些选项是--host,--password,--port,--protocol,--socket和--user。如果未指定任何远程选项,则忽略连接参数选项。
使用此选项需要REPLICATION SLAVE特权。
从 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选项值被视为修改输出文件名的前缀。
从基于行或基于语句的日志中读取时,请将所有出现的* from_name
重写为 to_name
*。对于基于行的日志,对行进行重写;对于基于语句的日志,对USE子句进行重写。在 5.7.8 之前的 MySQL 版本中,此选项仅在还原使用基于行的格式记录的 table 时使用。
Warning
使用此选项时,table 名称与数据库名称匹配的语句不会重写为使用新名称。
如前所述,用作此选项的值的重写规则是格式为'from_name->to_name'
的字符串,因此必须用引号将其引起来。
要采用多个重写规则,请多次指定该选项,如下所示:
shell> mysqlbinlog --rewrite-db='dbcurrent->dbold' --rewrite-db='dbtest->dbcurrent' \
binlog.00001 > /tmp/statements.sql
与--database选项一起使用时,首先应用--rewrite-db
选项;然后使用重写的数据库名称应用--database
选项。在这方面,提供选项的 Sequences 没有区别。
这意味着,例如,如果mysqlbinlog以--rewrite-db='mydb->yourdb' --database=yourdb
开头,则对数据库mydb
和yourdb
中的任何 table 的所有更新都将包含在输出中。另一方面,如果它以--rewrite-db='mydb->yourdb' --database=mydb
开头,则mysqlbinlog完全不输出任何语句:由于在应用--database
选项之前,对mydb
的所有更新都首先被重写为yourdb
的更新,因此没有与--database=mydb
匹配的更新。
不要以旧(4.1 之前)格式向服务器发送密码。这样可以防止除使用较新密码格式的服务器以外的其他连接。
从 MySQL 5.7.5 开始,此选项已被弃用,并将在以后的 MySQL 版本中删除。它始终处于启用状态,尝试禁用它(--skip-secure-auth,--secure-auth=0)会产生错误。在 MySQL 5.7.5 之前,此选项默认为启用,但可以禁用。
Note
使用 4.1 之前的哈希方法的密码比使用本地密码哈希方法的密码安全性较低,应避免使用。不建议使用 4.1 之前的密码,并在 MySQL 5.7.5 中删除了对它们的支持。有关帐户升级的说明,请参阅第 6.4.1.3 节“迁移到 4.1 版之前的密码哈希和 mysql_old_password 插件”。
仅显示由具有给定服务器 ID 的服务器创建的事件。
仅使用server_id的前* N
*位来标识服务器。如果二进制日志是由mysqld写入的,其 server-id-bits 设置为小于 32,并且用户数据存储在最高有效位中,则在--server-id-bits
设置为 32 的情况下运行mysqlbinlog可以看到此数据。
NDB Cluster 发行版随附提供的或从 NDB Cluster 源构建的mysqlbinlog版本仅支持此选项。
PEM 格式的文件的路径名,其中包含服务器用于基于 RSA 密钥对的密码交换所需的公用密钥的 Client 端副本。此选项适用于使用sha256_password
或caching_sha2_password
身份验证插件进行身份验证的 Client 端。对于未通过这些插件之一进行身份验证的帐户,将忽略此选项。如果不使用基于 RSA 的密码交换,也将被忽略,例如 Client 端使用安全连接连接到服务器时。
如果给出了--server-public-key-path=file_name并指定了有效的公共密钥文件,则它优先于--get-server-public-key。
对于sha256_password
,仅当使用 OpenSSL 构建 MySQL 时,此选项才适用。
有关sha256_password
和caching_sha2_password
插件的信息,请参见第 6.4.1.5 节“ SHA-256 可插拔身份验证”和第 6.4.1.4 节“缓存 SHA-2 可插入身份验证”。
--server-public-key-path选项已添加到 MySQL 5.7.23 中。
在输出中添加设置名称 charset_name语句以指定用于处理日志文件的字符集。
在 Windows 上,共享内存名称,用于使用共享内存与本地服务器构建的连接。默认值为MYSQL
。共享内存名称区分大小写。
仅当在启用了shared_memory系统变量以支持共享内存连接的情况下启动服务器时,此选项才适用。
- --short-form,
-s
仅显示日志中包含的语句,而没有任何其他信息或基于行的事件。这仅用于测试,不应在生产系统中使用。
不要在输出中显示任何 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"
否则通常不建议在 Producing 使用此选项。
- --socket=path,
-S path
对于到localhost
的连接(要使用的 Unix 套接字文件),或者在 Windows 上,要使用的命名管道的名称。
在 Windows 上,仅当在启用了named_pipe系统变量以支持命名管道连接的情况下启动服务器时,此选项才适用。此外,构建连接的用户必须是named_pipe_full_access_group系统变量指定的 Windows 组的成员。
以--ssl
开头的选项指定是否使用 SSL 连接到服务器,并指示在何处查找 SSL 密钥和证书。参见加密连接的命令选项。
在第一个事件的时间戳等于或晚于* datetime
*参数的情况下开始读取二进制日志。 * datetime
*值相对于运行mysqlbinlog的计算机上的本地时区。该值应采用DATETIME或TIMESTAMP数据类型可接受的格式。例如:
shell> mysqlbinlog --start-datetime="2005-12-25 11:25:56" binlog.000003
此选项对于时间点恢复很有用。参见第 7.5 节“时间点(增量)恢复”。
- --start-position=N,
-j N
从第一个事件开始读取二进制日志,该事件的位置等于或大于* N
*。此选项适用于在命令行上命名的第一个日志文件。
此选项对于时间点恢复很有用。参见第 7.5 节“时间点(增量)恢复”。
在第一个事件的时间戳等于或晚于* datetime
参数的情况下,停止读取二进制日志。有关 datetime
*值的信息,请参见--start-datetime选项的描述。
此选项对于时间点恢复很有用。参见第 7.5 节“时间点(增量)恢复”。
此选项与--read-from-remote-server一起使用。它告诉mysqlbinlog保持与服务器的连接。否则,从服务器传输最后一个日志文件后,mysqlbinlog退出。 --stop-nevertable 示--to-last-log,因此仅需要在命令行上命名要传输的第一个日志文件。
--stop-never通常与--raw一起使用以进行实时二进制日志备份,但是也可以在没有--raw的情况下使用--stop-never来在服务器生成日志事件时保持日志事件的连续文本显示。
对于--stop-never,mysqlbinlog在连接到服务器时报告服务器 ID 65535. --stop-never-slave-server-id明确指定要报告的服务器 ID。它可用于避免与从属服务器或另一个mysqlbinlog进程的 ID 发生冲突。参见第 4.6.7.4 节“指定 mysqlbinlog 服务器 ID”。
在位置等于或大于* N
*的第一个事件处停止读取二进制日志。此选项适用于在命令行上命名的最后一个日志文件。
此选项对于时间点恢复很有用。参见第 7.5 节“时间点(增量)恢复”。
加密连接允许的 TLS 协议。该值是一个或多个逗号分隔的协议名称的列 table。可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 6.3.2 节“加密的连接 TLS 协议和密码”。
MySQL 5.7.10 中添加了此选项。
- --to-last-log,
-t
不要在从 MySQL 服务器请求的二进制日志的结尾处停止,而要 continue 打印直到最后一个二进制日志的结尾。如果将输出发送到同一 MySQL 服务器,则可能导致无限循环。此选项需要--read-from-remote-server。
- --user=user_name,
-u user_name
连接到远程服务器时要使用的 MySQL 帐户的用户名。
- --verbose,
-v
重建行事件并将其显示为带 Comments 的 SQL 语句。如果两次给出此选项(通过传递“ -vv”或“ --verbose --verbose”),则输出将包含指示列数据类型和某些元数据的 Comments,以及配置的行查询日志事件。
有关显示--base64-output和--verbose对行事件输出的影响的示例,请参见第 4.6.7.2 节“ mysqlbinlog 行事件显示”。
验证二进制日志文件中的校验和。
- --version,
-V
显示版本信息并退出。
在 MySQL 5.7 中,mysqlbinlog版本号是 3.4.
您可以将mysqlbinlog的输出传递到mysqlClient 端,以执行二进制日志中包含的事件。具有旧备份时,请使用此技术从崩溃中恢复(请参阅第 7.5 节“时间点(增量)恢复”)。例如:
shell> mysqlbinlog binlog.000001 | mysql -u root -p
Or:
shell> mysqlbinlog binlog.[0-9]* | mysql -u root -p
如果mysqlbinlog产生的语句可能包含BLOB值,则mysql处理它们时可能会导致问题。在这种情况下,请使用--binary-mode选项调用mysql。
如果您需要先修改语句日志(例如,删除由于某种原因不想执行的语句),也可以将mysqlbinlog的输出重定向到文本文件。编辑文件后,通过将其用作mysql程序的 Importing 来执行包含的语句:
shell> mysqlbinlog binlog.000001 > tmpfile
shell> ... edit tmpfile ...
shell> mysql -u root -p < tmpfile
当使用--start-position选项调用mysqlbinlog时,它仅显示二进制日志中具有大于或等于给定位置的偏移量的那些事件(给定位置必须与一个事件的开头匹配)。当看到具有给定日期和时间的事件时,它还具有停止和启动的选项。这样,您就可以使用--stop-datetime选项执行时间点恢复(例如,可以说“将我的数据库前滚到上午 10:30 的状态”)。
如果要在 MySQL 服务器上执行多个二进制日志,那么安全的方法是使用与服务器的单个连接来处理它们。这是一个示例,说明可能是不安全:
shell> mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!
shell> mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!
如果第一个日志文件包含创建临时 table语句,第二个日志包含使用临时 table 的语句,则使用到服务器的多个连接以这种方式处理二进制日志会导致问题。当第一个mysql进程终止时,服务器将删除临时 table。当第二个mysql进程尝试使用该 table 时,服务器报告“未知 table”。
为避免此类问题,请使用*** 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"
mysqlbinlog可以产生无需原始数据文件即可再现LOAD DATA操作的输出。 mysqlbinlog将数据复制到一个临时文件,并写一个本地加载数据引用该文件的语句。写入这些文件的目录的默认位置是特定于系统的。要明确指定目录,请使用--local-load选项。
因为mysqlbinlog将LOAD DATA语句转换为本地加载数据语句(即,它添加了LOCAL
),所以用于处理语句的 Client 端和服务器都必须配置为启用LOCAL
功能。参见第 6.1.6 节“ LOAD DATA LOCAL 的安全注意事项”。
Warning
不会自动删除为本地加载数据语句创建的临时文件,因为在您实际执行这些语句之前需要它们。不再需要语句日志后,应自行删除临时文件。这些文件可以在临时文件目录中找到,并且具有类似* original_file_name-#-#
*的名称。