服务器的二进制日志由包含“ 事件 ”的文件组成,这些 事件描述了对数据库内容的修改。服务器以二进制格式写入这些文件。要以文本格式显示其内容,请使用 mysqlbinlog实用程序。您还可以使用 mysqlbinlog在复制设置中显示从服务器写入的中继日志文件的内容,因为中继日志的格式与二进制日志相同。第5.4.4节“二进制日志”和第17.2.2节“复制中继和状态日志”中将进一步讨论二进制日志和中继日志 。
像这样 调用mysqlbinlog:
shell> mysqlbinlog [options] log_file ...
例如,要显示名为二进制日志文件的内容binlog.000003,请使用以下命令:
shell> 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-output |
使用base-64编码打印二进制日志条目 |
|
--bind-address |
使用指定的网络接口连接到MySQL服务器 |
5.6.1 |
--binlog-row-event-max-size |
二进制日志最大事件大小 |
|
--character-sets-dir |
安装字符集的目录 |
|
--connection-server-id |
用于测试和调试。请参阅文本以了解适用的默认值和其他详细信息。 |
5.6.20 |
--database |
仅列出此数据库的条目 |
|
--debug |
写调试日志 |
|
--debug-check |
程序退出时打印调试信息 |
|
--debug-info |
程序退出时打印调试信息,内存和CPU统计信息 |
|
--default-auth |
要使用的身份验证插件 |
5.6.2 |
--defaults-extra-file |
除常用选项文件外,还可以读取命名选项文件 |
|
--defaults-file |
只读命名选项文件 |
|
--defaults-group-suffix |
选项组后缀值 |
|
--disable-log-bin |
禁用二进制日志 |
|
--exclude-gtids |
不要在提供的GTID集中显示任何组 |
5.6.5 |
--force-if-open |
即使打开或未正确关闭,也要读取二进制日志文件 |
|
--force-read |
如果mysqlbinlog读取它无法识别的二进制日志事件,则会输出警告 |
|
--help |
显示帮助消息并退出 |
|
--hexdump |
在注释中显示日志的十六进制转储 |
|
--host |
MySQL服务器所在的主机 |
|
--include-gtids |
仅显示提供的GTID集中的组 |
5.6.5 |
--local-load |
在指定目录中为LOAD DATA准备本地临时文件 |
|
--login-path |
从.mylogin.cnf中读取登录路径选项 |
5.6.6 |
--no-defaults |
不读选项文件 |
|
--offset |
跳过日志中的前N个条目 |
|
open_files_limit |
指定要保留的打开文件描述符的数量 |
|
--password |
连接到服务器时使用的密码 |
|
--plugin-dir |
安装插件的目录 |
5.6.2 |
--port |
用于连接的TCP / IP端口号 |
|
--print-defaults |
打印默认选项 |
|
--protocol |
要使用的连接协议 |
|
--raw |
将原始(二进制)格式的事件写入输出文件 |
|
--read-from-remote-master |
从MySQL主服务器读取二进制日志而不是读取本地日志文件 |
5.6.5 |
--read-from-remote-server |
从MySQL服务器读取二进制日志而不是本地日志文件 |
|
--result-file |
直接输出到命名文件 |
|
--secure-auth |
不要以旧的(4.1之前的)格式向服务器发送密码 |
5.6.17 |
--server-id |
仅提取由具有给定服务器ID的服务器创建的事件 |
|
--server-id-bits |
当mysqld的server-id-bits设置为小于最大值时,告诉mysqlbinlog如何解释二进制日志中的服务器ID; 仅受MySQL Cluster版本的mysqlbinlog支持 |
|
--set-charset |
将SET NAMES charset_name语句添加到输出 |
|
--shared-memory-base-name |
用于共享内存连接的共享内存的名称 |
|
--short-form |
仅显示日志中包含的语句 |
|
--skip-gtids |
不要打印任何GTID; 从包含GTID的二进制日志中写入转储文件时使用此选项。 |
5.6.5 |
--socket |
Unix套接字文件或Windows命名管道使用 |
|
--ssl-crl |
包含证书吊销列表的文件 |
5.6.3 |
--ssl-crlpath |
包含证书吊销列表文件的目录 |
5.6.3 |
--ssl-mode |
期望的与服务器连接的安全状态 |
30年6月5日 |
--start-datetime |
从第一个事件读取二进制日志,时间戳等于或晚于datetime参数 |
|
--start-position |
从第一个事件读取二进制日志,其位置等于或大于参数 |
|
--stop-datetime |
在时间戳等于或大于datetime参数的第一个事件处停止读取二进制日志 |
|
--stop-never |
阅读完最后的二进制日志文件后,保持与服 |
|
--stop-never-slave-server-id |
连接到服务器时要报告的从服务器ID |
|
--stop-position |
在位置等于或大于参数的第一个事件处停止读取二进制日志 |
|
--to-last-log |
不要在MySQL服务器请求的二进制日志结束时停止,而是继续打印到最后一个二进制日志的末尾 |
|
--user |
连接到服务器时使用的MySQL用户名 |
|
--verbose |
将行事件重建为SQL语句 |
|
--verify-binlog-checksum |
验证二进制日志中的校验和 |
5.6.1 |
--version |
显示版本信息并退出 |
|
--help, -?
显示帮助消息并退出。
--base64-output=value
此选项确定何时应使用BINLOG语句将事件编码为base-64字符串 。该选项具有这些允许值(不区分大小写):
AUTO(“自动”)或 UNSPEC(“未指定”)BINLOG在必要时自动显示 语句(即格式描述事件和行事件)。如果没有 --base64-output给出选项,则效果与...相同 --base64-output=AUTO。
注意
BINLOG 如果您打算使用mysqlbinlog的输出重新执行二进制日志文件内容,则 自动显示是唯一安全的行为。其他选项值仅用于调试或测试目的,因为它们可能会生成不包含可执行形式的所有事件的输出。
NEVER导致 BINLOG语句不显示。如果找到必须使用的行事件,mysqlbinlog将退出并显示错误BINLOG。
DECODE-ROWS指定要 通过指定选项将行事件解码并显示为注释的SQL语句的 mysqlbinlog--verbose。比如NEVER, DECODE-ROWS禁止显示 BINLOG语句,但NEVER与之不同的是,如果找到行事件,它不会以错误退出。
有关显示行事件输出--base64-output和 --verbose对行事件输出的影响的示例 ,请参见第4.6.8.2节“mysqlbinlog行事件显示”。
--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
安装字符集的目录。请参见 第10.14节“字符集配置”。
--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。
在--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。(特别是,不应使用跨数据库更新。)
--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
关于使用哪个客户端身份验证插件的提示。请参见第6.2.11节“可插入验证”。
--defaults-extra-file=file_name
在全局选项文件之后读取此选项文件,但在用户选项文件之前(在Unix上)。如果文件不存在或无法访问,则会发生错误。 file_name如果作为相对路径名而不是完整路径名给出,则相对于当前目录进行解释。
有关此选项和其他选项文件选项的其他信息,请参见第4.2.2.3节“影响选项文件处理的命令行选项”。
--defaults-file=file_name
仅使用给定的选项文件。如果文件不存在或无法访问,则会发生错误。 file_name如果作为相对路径名而不是完整路径名给出,则相对于当前目录进行解释。
有关此选项和其他选项文件选项的其他信息,请参见第4.2.2.3节“影响选项文件处理的命令行选项”。
例外:即使使用--defaults-file,客户端程序也会 读取.mylogin.cnf。
--defaults-group-suffix=str
不仅要读取常用选项组,还要读取通常名称和后缀的组 str。例如, mysqlbinlog通常会读取 [client]和 [mysqlbinlog]组。如果--defaults-group-suffix=_other 给出了该 选项,mysqlbinlog也会读取[client_other]和 [mysqlbinlog_other]组。
有关此选项和其他选项文件选项的其他信息,请参见第4.2.2.3节“影响选项文件处理的命令行选项”。
--disable-log-bin, -D
禁用二进制日志。如果您使用该--to-last-log选项并将输出发送到同一MySQL服务器,这对于避免无限循环很有用 。在崩溃后进行恢复时,此选项也很有用,以避免重复记录的语句。
此选项使mysqlbinlogSET sql_log_bin = 0在其输出中包含一个语句,以禁用其余输出的二进制日志记录。sql_log_bin操作系统变量的会话值 是受限操作,因此该选项要求您具有足以设置受限会话变量的权限。请参见第5.1.8.1节“系统变量权限”。
--exclude-gtids=gtid_set
不显示中列出的任何组 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服务器获取二进制日志。
--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.6节“ mysql_config_editor - MySQL配置实用程序”。
有关此选项和其他选项文件选项的其他信息,请参见第4.2.2.3节“影响选项文件处理的命令行选项”。
--no-defaults
不要读任何选项文件。如果程序启动由于从选项文件中读取未知选项而失败, --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日志中的第一个条目。
--open-files-limit=N
指定要保留的打开文件描述符的数量。
--password[=password], -p[password]
用于连接服务器的MySQL帐户的密码。密码值是可选的。如果没有给出, mysqlbinlog会提示输入一个。如果给定的,必须有没有空间之间 --password=或 -p以下,并输入密码。如果未指定密码选项,则默认为不发送密码。
在命令行上指定密码应该被认为是不安全的。要避免在命令行上输入密码,请使用选项文件。请参见 第6.1.2.1节“密码安全的最终用户指南”。
要明确指定没有密码并且mysqlbinlog不应提示输入密码 ,请使用该 --skip-password 选项。
--plugin-dir=dir_name
查找插件的目录。如果该--default-auth选项用于指定身份验证插件但 mysqlbinlog找不到,请指定此选项 。请参见 第6.2.11节“可插入验证”。
--port=port_num, -P port_num
用于连接远程服务器的TCP / IP端口号。
--print-defaults
打印程序名称以及从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的其他信息,请参见第4.2.2.3节“影响选项文件处理的命令行选项”。
--protocol={TCP|SOCKET|PIPE|MEMORY}
用于连接服务器的连接协议。当其他连接参数通常导致使用除所需协议之外的协议时,它很有用。有关允许值的详细信息,请参见 第4.2.4节“使用命令选项连接到MySQL服务器”。
--raw
默认情况下,mysqlbinlog读取二进制日志文件并以文本格式写入事件。该 --raw选项告诉 mysqlbinlog以原始二进制格式写入它们。它的使用 --read-from-remote-server 也需要使用,因为文件是从服务器请求的。 mysqlbinlog为从服务器读取的每个文件写入一个输出文件。该 --raw选项可用于备份服务器的二进制日志。使用该 --stop-never选项,备份是“ 实时 ”,因为 mysqlbinlog保持连接到服务器。默认情况下,输出文件将写入当前目录,其名称与原始日志文件的名称相同。可以使用该--result-file选项修改输出文件名。有关更多信息,请参见 第4.6.8.3节“使用mysqlbinlog备份二进制日志文件”。
--read-from-remote-master=type
从与所述一个MySQL服务器读取二进制日志 COM_BINLOG_DUMP或 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 使用此选项需要 该权限。
--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选项值被视为修改输出文件名的前缀。
--secure-auth
不要以旧的(4.1之前的)格式向服务器发送密码。这可以防止除使用较新密码格式的服务器之外的连接。默认情况下启用此选项; 使用 --skip-secure-auth 禁用它。MySQL 5.6.17中添加了此选项。
注意
使用4.1之前的哈希方法的密码不如使用本机密码哈希方法的密码安全,应该避免使用。不推荐使用4.1之前的密码,并且在将来的MySQL版本中将删除对它们的支持。有关帐户升级说明,请参见第6.4.1.3节“迁移远离4.1之前的密码散列和mysql_old_password插件”。
注意
此选项已弃用,将在以后的版本中删除。从MySQL 5.7.5开始,它始终处于启用状态,并且尝试禁用它会产生错误。
--server-id=id
仅显示由具有给定服务器ID的服务器创建的事件。
--server-id-bits=N
仅使用第一N的位 server_id来识别服务器。如果二进制日志是由mysqld写入的 ,server-id-bits设置为小于32,用户数据存储在最高位,则运行mysqlbinlog并 --server-id-bits设置为32可以看到这些数据。
此选项仅受NDB Cluster分发随附的mysqlbinlog版本支持 ,或者由NDB Cluster源构建。
--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密钥和证书。请参阅 加密连接的命令选项。
--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。此选项适用于命令行上指定的第一个日志文件。
此选项对于时间点恢复很有用。请参见 第7.3节“备份和恢复策略示例”。
--stop-datetime=datetime
在时间戳等于或晚于datetime参数的第一个事件处停止读取二进制日志 。此选项对于时间点恢复很有用。--start-datetime 有关该datetime值的信息,请参阅该选项 的说明。
此选项对于时间点恢复很有用。请参见 第7.3节“备份和恢复策略示例”。
--stop-never
此选项用于 --read-from-remote-server。它告诉mysqlbinlog保持连接到服务器。否则, 当从服务器传输最后一个日志文件时,mysqlbinlog将退出。--stop-never 暗示--to-last-log,因此只需要在命令行上命名要传输的第一个日志文件。
--stop-never通常用于--raw进行实时二进制日志备份,但也可以--raw在服务器生成日志事件时不使用它 来维护日志事件的连续文本显示。
--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”。
--stop-position=N
在位置等于或大于的第一个事件处停止读取二进制日志 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和 --verbose对行事件输出的影响的示例 ,请参见第4.6.8.2节“mysqlbinlog行事件显示”。
--verify-binlog-checksum, -c
验证二进制日志文件中的校验和。
--version, -V
显示版本信息并退出。
在MySQL 5.6.11之前,显示的mysqlbinlog 版本号为3.3。在MySQL 5.6.11及更高版本中,这是3.4。(Bug#15894381,Bug#67643)
你可以管的输出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"
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-#-#。