mysqlbinlog的使用--来自官方文档

服务器的二进制日志由包含“ 事件 ”的文件组成,这些 事件描述了对数据库内容的修改。服务器以二进制格式写入这些文件。要以文本格式显示其内容,请使用 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

显示版本信息并退出

 

 

你可以管的输出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选项。

因为mysqlbinlogLOAD DATA语句转换 为 LOAD DATA LOCAL语句(即,它添加 LOCAL),所以必须使用LOCAL启用的功能配置用于处理语句的客户端和服务器 。请参见 第6.1.6节“LOAD DATA LOCAL的安全问题”

警告

LOAD DATA LOCAL语句创建的临时文件 不会 自动删除,因为在您实际执行这些语句之前需要它们。在不再需要语句日志后,应自行删除临时文件。这些文件可以在临时文件目录中找到,并且名称类似于 original_file_name-#-#。


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值