服务器的二进制日志由包含描述数据库内容修改的“事件” 的文件组成 。服务器以二进制格式写入这些文件。要以文本格式显示它们的内容,请使用 mysqlbinlog实用程序。您还可以使用 mysqlbinlog来显示复制设置中副本服务器写入的中继日志文件的内容,因为中继日志与二进制日志具有相同的格式。二进制日志和中继日志将在 第 5.4.4 节“二进制日志”和 第 17.2.2 节“中继日志和复制元数据存储库”中进一步讨论。
像这样调用mysqlbinlog:
mysqlbinlog [options] log_file ...
例如,要显示名为 的二进制日志文件的内容binlog.000003
,请使用以下命令:
mysqlbinlog binlog.0000003
输出包括 中包含的事件
binlog.000003
。对于基于语句的日志记录,事件信息包括 SQL 语句、执行它的服务器的 ID、语句执行时的时间戳、花费的时间等等。对于基于行的日志记录,事件指示行更改而不是 SQL 语句。有关日志记录模式的信息
,请参阅第 17.1.2 节,“复制格式” 。
事件前面有提供附加信息的标题注释。例如:
# 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直接读取二进制日志文件并将其应用到本地 MySQL 服务器。也可以使用该
--read-from-remote-server
选项从远程服务器读取二进制日志。要读取远程二进制日志,可以提供连接参数选项以指示如何连接到服务器。这些选项是--host
、
--password
、
--port
、
--protocol
、
--socket
和
--user
。
当针对大型二进制日志运行mysqlbinlog时,请注意文件系统有足够的空间用于生成的文件。要配置
mysqlbinlog用于临时文件的目录,请使用
TMPDIR
环境变量。
在 MySQL 5.6.10 及更高版本中,mysqlbinlogpseudo_slave_mode
在执行任何 SQL 语句之前
将值设置为 true。
mysqlbinlog支持以下选项,可以在命令行或
选项文件的组中指定[mysqlbinlog]
。[client]
有关 MySQL 程序使用的选项文件的信息,请参阅第 4.2.2.2 节,“使用选项文件”。
表 4.20 mysqlbinlog 选项
选项名称 | 描述 | 介绍 |
---|---|---|
--base64-输出 | 使用 base-64 编码打印二进制日志条目 | |
--绑定地址 | 使用指定的网络接口连接到 MySQL 服务器 | |
--binlog-row-event-max-size | 二进制日志最大事件大小 | |
--字符集目录 | 安装字符集的目录 | |
--connection-server-id | 用于测试和调试。有关适用的默认值和其他详细信息,请参阅文本 | 5.6.20 |
- 数据库 | 仅列出该数据库的条目 | |
--调试 | 写调试日志 | |
--调试检查 | 程序退出时打印调试信息 | |
- 调试信息 | 程序退出时打印调试信息、内存和 CPU 统计信息 | |
--default-auth | 要使用的身份验证插件 | |
--defaults-extra-file | 除了通常的选项文件外,还读取命名的选项文件 | |
--defaults-文件 | 只读命名选项文件 | |
--defaults-group-suffix | 选项组后缀值 | |
--disable-log-bin | 禁用二进制日志记录 | |
--exclude-gtids | 不要显示提供的 GTID 集中的任何组 | |
--force-if-open | 读取二进制日志文件,即使打开或未正确关闭 | |
--强制阅读 | 如果 mysqlbinlog 读取了一个它无法识别的二进制日志事件,它会打印一条警告 | |
- 帮助 | 显示帮助信息并退出 | |
--hexdump | 在评论中显示日志的十六进制转储 | |
- 主持人 | MySQL 服务器所在的主机 | |
--include-gtids | 仅显示提供的 GTID 集中的组 | |
--local-load | 在指定目录下为LOAD DATA准备本地临时文件 | |
--登录路径 | 从 .mylogin.cnf 读取登录路径选项 | |
--no-defaults | 不读取选项文件 | |
- 抵消 | 跳过日志中的前 N 个条目 | |
open_files_limit | 指定要保留的打开文件描述符的数量 | |
- 密码 | 连接到服务器时使用的密码 | |
--插件目录 | 安装插件的目录 | |
- 港口 | 用于连接的 TCP/IP 端口号 | |
--print-defaults | 打印默认选项 | |
- 协议 | 使用的传输协议 | |
- 生的 | 以原始(二进制)格式将事件写入输出文件 | |
--从远程主机读取 | 从 MySQL 复制源服务器读取二进制日志而不是读取本地日志文件 | |
--从远程服务器读取 | 从 MySQL 服务器读取二进制日志而不是本地日志文件 | |
--结果文件 | 直接输出到命名文件 | |
--secure-auth | 不要以旧的(pre-4.1)格式向服务器发送密码 | 5.6.17 |
--server-id | 仅提取由具有给定服务器 ID 的服务器创建的那些事件 | |
--server-id-bits | 告诉 mysqlbinlog 当 log 由 server-id-bits 设置为小于最大值的 mysqld 写入时如何解释二进制日志中的服务器 ID;仅由 mysqlbinlog 的 MySQL Cluster 版本支持 | |
--set-字符集 | 将 SET NAMES charset_name 语句添加到输出 | |
--shared-memory-base-name | 共享内存连接的共享内存名称(仅限 Windows) | |
- 简写 | 只显示日志中包含的语句 | |
--skip-gtids | 不要在输出转储文件中包含二进制日志文件中的 GTID | |
- 插座 | 要使用的 Unix 套接字文件或 Windows 命名管道 | |
--ssl-crl | 包含证书吊销列表的文件 | |
--ssl-crlpath | 包含证书吊销列表文件的目录 | |
--ssl模式 | 连接到服务器的所需安全状态 | 5.6.30 |
--开始日期时间 | 从时间戳等于或晚于 datetime 参数的第一个事件读取二进制日志 | |
--起始位置 | 从位置等于或大于参数的第一个事件解码二进制日志 | |
--停止日期时间 | 在时间戳等于或大于 datetime 参数的第一个事件停止读取二进制日志 | |
--永不停止 | 读取最后一个二进制日志文件后保持与服务器的连接 | |
--stop-never-slave-server-id | 连接到服务器时要报告的从属服务器 ID | |
--停止位置 | 在位置等于或大于参数的第一个事件处停止解码二进制日志 | |
--to-last-日志 | 不要在 MySQL 服务器请求的二进制日志末尾停止,而是继续打印到最后一个二进制日志的末尾 | |
- 用户 | 连接到服务器时使用的 MySQL 用户名 | |
--冗长 | 将行事件重构为 SQL 语句 | |
--verify-binlog-校验和 | 验证二进制日志中的校验和 | |
- 版本 | 显示版本信息并退出 |
--help
,-?
显示帮助信息并退出。
此选项确定何时应使用
BINLOG
语句将事件编码为 base-64 字符串。该选项具有以下允许值(不区分大小写):AUTO
("automatic") 或UNSPEC
("unspecified")BINLOG
在必要时自动显示语句(即,对于格式描述事件和行事件)。如果没有--base64-output
给出选项,效果与--base64-output=AUTO
.笔记BINLOG
如果您打算使用mysqlbinlog的输出重新执行二进制日志文件内容, 自动显示是唯一安全的行为。其他选项值仅用于调试或测试目的,因为它们可能会产生不包含可执行形式的所有事件的输出。DECODE-ROWS
通过同时指定选项,向 mysqlbinlog指定您打算将行事件解码并显示为带注释的 SQL 语句--verbose
。与 一样NEVER
,DECODE-ROWS
禁止显示BINLOG
语句,但与 不同NEVER
的是,如果发现行事件,它不会退出并报错。
有关显示 行事件输出的影响的示例,请参阅
--base64-output
第 4.6.8.2 节,“mysqlbinlog 行事件显示”。--verbose
在具有多个网络接口的计算机上,使用此选项来选择用于连接到 MySQL 服务器的接口。
-
命令行格式 --binlog-row-event-max-size=#
类型 数字 默认值 4294967040
最小值 256
最大值 18446744073709547520
指定基于行的二进制日志事件的最大大小(以字节为单位)。如果可能,行被分组为小于此大小的事件。该值应为 256 的倍数。默认值为 4GB。
安装字符集的目录。请参阅 第 10.15 节,“字符集配置”。
--connection-server-id=
server_id
此选项用于测试 MySQL 服务器是否支持
BINLOG_DUMP_NON_BLOCK
连接标志,该连接标志在 MySQL 5.6.5 中被无意中删除,并在 MySQL 5.6.20 中恢复(Bug #18000079,Bug #71178)。正常操作不需要它。此选项的有效默认值和最小值取决于mysqlbinlog是在阻塞模式还是非阻塞模式下运行。当 mysqlbinlog以阻塞模式运行时,默认(和最小)值为 1;在非阻塞模式下运行时,默认(和最小)值为 0。
这个选项是在 MySQL 5.6.20 中添加的。
--database=
,db_name
-d
db_name
此选项导致mysqlbinlog从二进制日志(仅限本地日志)输出条目,这些条目在
db_name
被选为默认数据库时发生USE
。mysqlbinlog 的
--database
选项类似于 mysqld的选项 ,但只能用于指定一个数据库。如果 多次给出,则仅使用最后一个实例。--binlog-do-db
--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
。(特别是,不应使用跨数据库更新。)--debug[=
,debug_options
]-# [
debug_options
]写调试日志。典型的
debug_options
字符串是 . 默认值为 。d:t:o,
file_name
d:t:o,/tmp/mysqlbinlog.trace
仅当 MySQL 是使用
WITH_DEBUG
. Oracle 提供的 MySQL 发布二进制文件不是 使用此选项构建的。程序退出时打印一些调试信息。
仅当 MySQL 是使用
WITH_DEBUG
. Oracle 提供的 MySQL 发布二进制文件不是 使用此选项构建的。程序退出时打印调试信息以及内存和 CPU 使用统计信息。
仅当 MySQL 是使用
WITH_DEBUG
. Oracle 提供的 MySQL 发布二进制文件不是 使用此选项构建的。关于使用哪个客户端身份验证插件的提示。请参阅第 6.2.11 节,“可插入身份验证”。
--defaults-extra-file=
file_name
在全局选项文件之后但(在 Unix 上)在用户选项文件之前读取此选项文件。如果该文件不存在或无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
仅使用给定的选项文件。如果该文件不存在或无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
例外:即使有
--defaults-file
,客户端程序也会读取.mylogin.cnf
.不仅要阅读通常的选项组,还要阅读具有通常名称和后缀
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读取了一个它无法识别的二进制日志事件,它会打印一条警告,忽略该事件并继续。如果没有此选项,mysqlbinlog会在读取此类事件时停止。
--hexdump
,-H
在注释中显示日志的十六进制转储,如 第 4.6.8.1 节“mysqlbinlog 十六进制转储格式”中所述。十六进制输出有助于复制调试。
--host=
,host_name
-h
host_name
从给定主机上的 MySQL 服务器获取二进制日志。
仅显示 中列出的组
gtid_set
。--local-load=
,dir_name
-l
dir_name
对于
LOAD DATA
语句对应的数据加载操作, mysqlbinlog从二进制日志事件中提取文件,将其作为临时文件写入本地文件系统,并写入LOAD DATA LOCAL
语句使文件加载。默认情况下,mysqlbinlog将这些临时文件写入特定于操作系统的目录。该--local-load
选项可用于明确指定 mysqlbinlog应该准备本地临时文件的目录。重要的这些临时文件不会被 mysqlbinlog或任何其他 MySQL 程序自动删除。
从登录路径文件中指定的登录路径读取选项
.mylogin.cnf
。“ 登录路径”是一个选项组,其中包含指定要连接到哪个 MySQL 服务器以及要以哪个帐户进行身份验证的选项。要创建或修改登录路径文件,请使用 mysql_config_editor实用程序。请参阅 第 4.6.6 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
不要读取任何选项文件。如果程序启动因从选项文件中读取未知选项而失败,
--no-defaults
可用于防止它们被读取。例外情况是
.mylogin.cnf
文件在所有情况下都会被读取(如果存在)。这允许以比在命令行上更安全的方式指定密码,即使在--no-defaults
使用 时也是如此。要创建.mylogin.cnf
,请使用 mysql_config_editor实用程序。请参阅 第 4.6.6 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
--offset=
,N
-o
N
跳过
N
日志中的第一个条目。指定要保留的打开文件描述符的数量。
--password[=
,password
]-p[
password
]用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果没有给出, mysqlbinlog会提示输入一个。如果给定,则后面 的密码之间 不能有空格。如果未指定密码选项,则默认为不发送密码。
--password=
-p
在命令行上指定密码应该被认为是不安全的。为避免在命令行中提供密码,请使用选项文件。请参阅 第 6.1.2.1 节,“密码安全的最终用户指南”。
要明确指定没有密码并且 mysqlbinlog不应提示输入密码,请使用该
--skip-password
选项。在其中查找插件的目录。如果该
--default-auth
选项用于指定身份验证插件但 mysqlbinlog未找到它,请指定此选项。请参阅 第 6.2.11 节,“可插入身份验证”。--port=
,port_num
-P
port_num
用于连接到远程服务器的 TCP/IP 端口号。
打印程序名称和它从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
--protocol={TCP|SOCKET|PIPE|MEMORY}
用于连接到服务器的传输协议。当其他连接参数通常导致使用您想要的协议以外的协议时,它很有用。有关允许值的详细信息,请参阅 第 4.2.5 节“连接传输协议”。
默认情况下,mysqlbinlog读取二进制日志文件并以文本格式写入事件。该
--raw
选项告诉 mysqlbinlog以其原始二进制格式写入它们。它的使用要求--read-from-remote-server
也被使用,因为文件是从服务器请求的。 mysqlbinlog为从服务器读取的每个文件写入一个输出文件。该--raw
选项可用于备份服务器的二进制日志。使用该--stop-never
选项,备份是“实时”的,因为 mysqlbinlog保持与服务器的连接。默认情况下,输出文件以与原始日志文件相同的名称写入当前目录。可以使用该--result-file
选项修改输出文件名。有关详细信息,请参阅 第 4.6.8.3 节,“使用 mysqlbinlog 备份二进制日志文件”。--read-from-remote-master=
type
通过将选项值 分别设置为或 ,使用
COM_BINLOG_DUMP
或 命令 从 MySQL 服务器读取二进制日志 。如果 与 结合使用 ,可以在源上过滤掉事务,避免不必要的网络流量。COM_BINLOG_DUMP_GTID
BINLOG-DUMP-NON-GTIDS
BINLOG-DUMP-GTIDS
--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
此选项需要权限。--result-file=
,name
-r
name
如果没有该
--raw
选项,该选项指示 mysqlbinlog将文本输出写入到的文件。使用--raw
, mysqlbinlog为从服务器传输的每个日志文件写入一个二进制输出文件,默认情况下将它们写入当前目录,使用与原始日志文件相同的名称。在这种情况下,--result-file
选项值被视为修改输出文件名的前缀。不要以旧的(pre-4.1)格式向服务器发送密码。这会阻止除使用较新密码格式的服务器之外的连接。默认情况下启用此选项;用于
--skip-secure-auth
禁用它。这个选项是在 MySQL 5.6.17 中添加的。笔记使用 pre-4.1 哈希方法的密码不如使用本机密码哈希方法的密码安全,应避免使用。4.1 之前的密码已弃用;期望在未来的 MySQL 版本中删除对它们的支持。有关帐户升级说明,请参阅第 6.4.1.3 节,“从 4.1 版之前的密码哈希和 mysql_old_password 插件迁移”。
笔记此选项已弃用;希望在未来的版本中将其删除。从 MySQL 5.7.5 开始,它始终处于启用状态,尝试禁用它会产生错误。
仅显示由具有给定服务器 ID 的服务器创建的那些事件。
仅使用 的前
N
几位server_id
来标识服务器。如果二进制日志是由 mysqld写入的,其server-id-bits 设置为小于 32,并且用户数据存储在最高有效位中,则运行设置 为 32 的mysqlbinlog--server-id-bits
可以看到此数据。此选项仅受 NDB Cluster 发行版提供的 mysqlbinlog版本支持,或从 NDB Cluster 源构建。
在输出中添加一条语句以指定用于处理日志文件的字符集。
SET NAMES
charset_name
--shared-memory-base-name=
name
在 Windows 上,用于使用共享内存与本地服务器建立连接的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。仅当服务器启动时
shared_memory
启用了支持共享内存连接的系统变量时,此选项才适用。--short-form
,-s
仅显示日志中包含的语句,没有任何额外信息或基于行的事件。这仅用于测试,不应在生产系统中使用。
不要在输出中显示任何 GTID。从一个或多个包含 GTID 的二进制日志写入转储文件时需要这样做,如本例所示:
mysqlbinlog --skip-gtids binlog.000001 > /tmp/dump.sql mysqlbinlog --skip-gtids binlog.000002 >> /tmp/dump.sql 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 密钥和证书。请参阅 加密连接的命令选项。在时间戳等于或晚于
datetime
参数的第一个事件开始读取二进制日志。该datetime
值相对于您运行 mysqlbinlog的机器上的本地时区。该值应采用DATETIME
或TIMESTAMP
数据类型可接受的格式。例如:mysqlbinlog --start-datetime="2005-12-25 11:25:56" binlog.000003
此选项对于时间点恢复很有用。请参阅 第 7.3 节,“示例备份和恢复策略”。
--start-position=
,N
-j
N
在位置等于或大于 的第一个事件开始读取二进制日志
N
。此选项适用于在命令行上命名的第一个日志文件。此选项对于时间点恢复很有用。请参阅 第 7.3 节,“示例备份和恢复策略”。
在时间戳等于或晚于
datetime
参数的第一个事件处停止读取二进制日志。此选项对于时间点恢复很有用。--start-datetime
有关该值的信息, 请参阅选项的描述datetime
。此选项对于时间点恢复很有用。请参阅 第 7.3 节,“示例备份和恢复策略”。
This option is used with
--read-from-remote-server
. It tells mysqlbinlog to remain connected to the server. Otherwise mysqlbinlog exits when the last log file has been transferred from the server.--stop-never
implies--to-last-log
, so only the first log file to transfer need be named on the command line.--stop-never
is commonly used with--raw
to make a live binary log backup, but also can be used without--raw
to maintain a continuous text display of log events as the server generates them.--stop-never-slave-server-id=
id
使用
--stop-never
, mysqlbinlog在连接到服务器时报告服务器 ID 为 65535。--stop-never-slave-server-id
明确指定要报告的服务器 ID。它可用于避免与副本服务器或另一个mysqlbinlog进程的 ID 发生冲突。请参阅 第 4.6.8.4 节,“指定 mysqlbinlog 服务器 ID”。在第一个位置等于或大于 的事件处停止读取二进制日志
N
。此选项适用于在命令行中命名的最后一个日志文件。此选项对于时间点恢复很有用。请参阅 第 7.3 节,“示例备份和恢复策略”。
--to-last-log
,-t
不要在 MySQL 服务器请求的二进制日志结束时停止,而是继续打印直到最后一个二进制日志结束。如果将输出发送到同一个 MySQL 服务器,这可能会导致死循环。此选项需要
--read-from-remote-server
.--user=
,user_name
-u
user_name
连接到远程服务器时要使用的 MySQL 帐户的用户名。
--verbose
,-v
重建行事件并将它们显示为带注释的 SQL 语句。如果此选项给出两次(通过传入“-vv”或“--verbose --verbose”),则输出包括指示列数据类型和一些元数据的注释,以及行查询日志事件(如果已配置)。
有关显示 行事件输出的影响的示例,请参阅
--base64-output
第 4.6.8.2 节,“mysqlbinlog 行事件显示”。--verbose
验证二进制日志文件中的校验和。
--version
,-V
显示版本信息并退出。
Prior to MySQL 5.6.11, the mysqlbinlog version number shown was 3.3. In MySQL 5.6.11 and later, this is 3.4. (Bug #15894381, Bug #67643)
You can pipe the output of mysqlbinlog into the mysql client to execute the events contained in the binary log. This technique is used to recover from an unexpected exit when you have an old backup (see Section 7.5, “Point-in-Time (Incremental) Recovery Using the Binary Log”). For example:
mysqlbinlog binlog.000001 | mysql -u root -p
Or:
mysqlbinlog binlog.[0-9]* | mysql -u root -p
If the statements produced by mysqlbinlog may
contain BLOB
values, these may
cause problems when mysql processes them. In
this case, invoke mysql with the
--binary-mode
option.
You can also redirect the output of mysqlbinlog to a text file instead, if you need to modify the statement log first (for example, to remove statements that you do not want to execute for some reason). After editing the file, execute the statements that it contains by using it as input to the mysql program:
mysqlbinlog binlog.000001 > tmpfile
... edit tmpfile ...
mysql -u root -p < tmpfile
When mysqlbinlog is invoked with the
--start-position
option, it
displays only those events with an offset in the binary log
greater than or equal to a given position (the given position
must match the start of one event). It also has options to stop
and start when it sees an event with a given date and time. This
enables you to perform point-in-time recovery using the
--stop-datetime
option (to
be able to say, for example, “roll forward my databases to
how they were today at 10:30 a.m.”).
If you have more than one binary log to execute on the MySQL server, the safe method is to process them all using a single connection to the server. Here is an example that demonstrates what may be unsafe:
mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!
mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!
Processing binary logs this way using multiple connections to
the server causes problems if the first log file contains a
CREATE TEMPORARY
TABLE
statement and the second log contains a
statement that uses the temporary table. When the first
mysql process terminates, the server drops
the temporary table. When the second mysql
process attempts to use the table, the server reports
“unknown table.”
To avoid problems like this, use a single mysql process to execute the contents of all binary logs that you want to process. Here is one way to do so:
mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
Another approach is to write all the logs to a single file and then process the file:
mysqlbinlog binlog.000001 > /tmp/statements.sql
mysqlbinlog binlog.000002 >> /tmp/statements.sql
mysql -u root -p -e "source /tmp/statements.sql"
mysqlbinlog can produce output that
reproduces a LOAD DATA
operation
without the original data file. mysqlbinlog
copies the data to a temporary file and writes a
LOAD DATA
LOCAL
statement that refers to the file. The default
location of the directory where these files are written is
system-specific. To specify a directory explicitly, use the
--local-load
option.
Because mysqlbinlog converts
LOAD DATA
statements to
LOAD DATA
LOCAL
statements (that is, it adds
LOCAL
), both the client and the server that
you use to process the statements must be configured with the
LOCAL
capability enabled. See
Section 6.1.6, “Security Considerations for LOAD DATA LOCAL”.
LOAD DATA
LOCAL
为语句
创建的临时文件
不会
自动删除,因为在您实际执行这些语句之前需要它们。不再需要语句日志后,您应该自行删除临时文件。这些文件可以在临时文件目录中找到,名称类似于
original_file_name-#-#
.