`

mysqlbinlog

 
阅读更多

mysqlbinlog:用于处理二进制日志文件的实用工具

mysqlbinlog [options] log-files
       
服务器生成的二进制日志文件写成二进制格式。要想检查这些文本格式的文件,应使用mysqlbinlog实用工具。
例如,要想显示二进制日志binlog.000003的内容,使用下面的命令:
shell> mysqlbinlog DIR/binlog.0000003 | less
输出包括在binlog.000003中包含的所有语句,以及其它信息例如每个语句花费的时间、客户发出的线程ID、发出线程时的时间戳等等。

通常情况,可以使用mysqlbinlog直接读取二进制日志文件并将它们用于本地MySQL服务器。也可以使用--read-from-remote-server选项从远程服务器读取二进制日志。
当读取远程二进制日志时,可以通过连接参数选项来指示如何连接服务器,但它们经常被忽略掉,除非你还指定了--read-from-remote-server选项。这些选项是--host、--password、--port、--protocol、--socket和--user。

mysqlbinlog支持下面的选项:
---help,-?
显示帮助消息并退出。
---database=db_name,-d db_name
只列出该数据库的条目(只用本地日志)。
--force-read,-f
使用该选项,如果mysqlbinlog读它不能识别的二进制日志事件,它会打印警告,忽略该事件并继续。没有该选项,如果mysqlbinlog读到此类事件则停止。
--hexdump,-H
在注释中显示日志的十六进制转储。该输出可以帮助复制过程中的调试。在MySQL 5.1.2中添加了该选项。
--host=host_name,-h host_name
获取给定主机上的MySQL服务器的二进制日志。
--local-load=path,-l pat
为指定目录中的LOAD DATA INFILE预处理本地临时文件。
--offset=N,-o N
跳过前N个条目。
--password[=password],-p[password]
当连接服务器时使用的密码。如果使用短选项形式(-p),选项和 密码之间不能有空格。如果在命令行中--password或-p选项后面没有 密码值,则提示输入一个密码。
--port=port_num,-P port_num
用于连接远程服务器的TCP/IP端口号。
--position=N,-j N
不赞成使用,应使用--start-position。
--protocol={TCP | SOCKET | PIPE | -position
使用的连接协议。
--read-from-remote-server,-R
从MySQL服务器读二进制日志。如果未给出该选项,任何连接参数选项将被忽略。这些选项是--host、--password、--port、--protocol、--socket和--user。
--result-file=name, -r name
将输出指向给定的文件。
--short-form,-s
只显示日志中包含的语句,不显示其它信息。
--socket=path,-S path
用于连接的套接字文件。
--start-datetime=datetime
从二进制日志中第1个日期时间等于或晚于datetime参量的事件开始读取。datetime值相对于运行mysqlbinlog的机器上的本地时区。该值格式应符合DATETIME或TIMESTAMP数据类型。例如:
shell> mysqlbinlog --start-datetime="2004-12-25 11:25:56" binlog.000003
该选项可以帮助点对点恢复。
--stop-datetime=datetime
从二进制日志中第1个日期时间等于或晚于datetime参量的事件起停止读。关于datetime值的描述参见--start-datetime选项。该选项可以帮助及时恢复。
--start-position=N
从二进制日志中第1个位置等于N参量时的事件开始读。
--stop-position=N
从二进制日志中第1个位置等于和大于N参量时的事件起停止读。
--to-last-logs,-t
在MySQL服务器中请求的二进制日志的结尾处不停止,而是继续打印直到最后一个二进制日志的结尾。如果将输出发送给同一台MySQL服务器,会导致无限循环。该选项要求--read-from-remote-server。
--disable-logs-bin,-D
禁用二进制日志。如果使用--to-last-logs选项将输出发送给同一台MySQL服务器,可以避免无限循环。该选项在崩溃恢复时也很有用,可以避免复制已经记录的语句。注释:该选项要求有SUPER权限。
--user=user_name,-u user_name
连接远程服务器时使用的MySQL用户名。
--version,-V

显示版本信息并退出。

还可以使用--var_name=value选项设置下面的变量:

open_files_limit

指定要保留的打开的文件描述符的数量。

可以将mysqlbinlog的输出传到mysql客户端以执行包含在二进制日志中的语句。如果你有一个旧的备份,该选项在崩溃恢复时也很有用(参见5.9.1节,“数据库备份”):

shell> mysqlbinlog hostname-bin.000001 | mysql

或:

shell> mysqlbinlog hostname-bin.[0-9]* | mysql

如果你需要先修改含语句的日志,还可以将mysqlbinlog的输出重新指向一个文本文件。(例如,想删除由于某种原因而不想执行的语句)。编辑好文件后,将它输入到mysql程序并执行它包含的语句。

mysqlbinlog有一个--position选项,只打印那些在二进制日志中的偏移量大于或等于某个给定位置的语句(给出的位置必须匹配一个事件的开始)。它还有在看见给定日期和时间的事件后停止或启动的选项。这样可以使用--stop-datetime选项进行点对点恢复(例如,能够说“将数据库前滚动到今天10:30 AM的位置”)。

如果MySQL服务器上有多个要执行的二进制日志,安全的方法是在一个连接中处理它们。下面是一个说明什么是不安全的例子:

shell> mysqlbinlog hostname-bin.000001 | mysql # DANGER!!

shell> mysqlbinlog hostname-bin.000002 | mysql # DANGER!!

使用与服务器的不同连接来处理二进制日志时,如果第1个日志文件包含一个CREATE TEMPORARY TABLE语句,第2个日志包含一个使用该临时表的语句,则会造成问题。当第1个mysql进程结束时,服务器撤销临时表。当第2个mysql进程想使用该表时,服务器报告 “不知道该表”。

要想避免此类问题,使用一个连接来执行想要处理的所有二进制日志中的内容。下面提供了一种方法:

shell> mysqlbinlog hostname-bin.000001 hostname-bin.000002 | mysql

另一个方法是:

shell> mysqlbinlog hostname-bin.000001 >  /tmp/statements.sql

shell> mysqlbinlog hostname-bin.000002 >> /tmp/statements.sql

shell> mysql -e "source /tmp/statements.sql"

mysqlbinlog产生的输出可以不需要原数据文件即可重新生成一个LOAD DATA INFILE操作。mysqlbinlog将数据复制到一个临时文件并写一个引用该文件的LOAD DATA LOCAL INFILE语句。由系统确定写入这些文件的目录的默认位置。要想显式指定一个目录,使用--local-load选项。

因为mysqlbinlog可以将LOAD DATA INFILE语句转换为LOAD DATA LOCAL INFILE语句(也就是说,它添加了LOCAL),用于处理语句的客户端和服务器必须配置为允许LOCAL操作。参见5.6.4节,“LOAD DATA LOCAL安全问题”。

警告:为LOAD DATA LOCAL语句创建的临时文件不会自动删除,因为在实际执行完那些语句前需要它们。不再需要语句日志后应自己删除临时文件。文件位于临时文件目录中,文件名类似original_file_name-#-#。

--hexdump选项可以在注释中产生日志内容的十六进制转储:

shell> mysqlbinlog --hexdump master-bin.000001

上述命令的输出应类似:

/*!40019 SET @@session.max_insert_delayed_threads=0*/;

/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;

# at 4

#051024 17:24:13 server id 1  end_log_pos 98

# Position  Timestamp   Type   Master ID        Size      Master Pos    Flags

# 00000004 9d fc 5c 43   0f   01 00 00 00   5e 00 00 00   62 00 00 00   00 00

# 00000017 04 00 35 2e 30 2e 31 35  2d 64 65 62 75 67 2d 6c |..5.0.15.debug.l|

# 00000027 6f 67 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |og..............|

# 00000037 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |................|

# 00000047 00 00 00 00 9d fc 5c 43  13 38 0d 00 08 00 12 00 |.......C.8......|

# 00000057 04 04 04 04 12 00 00 4b  00 04 1a                |.......K...|

#       Start: binlog v 4, server v 5.0.15-debug-log created 051024 17:24:13

#       at startup

ROLLBACK;

十六进制转储的输出包含下面的元素:

Position: The byte position within the log file.

Timestamp: The event timestamp. In the example just shown, '9d fc 5c 43' is the representation of '051024 17:24:13' in hexadecimal.

Type: The type of the log event. '0f' means that the example event is a FORMAT_DESCRIPTION_EVENT. The types are:

       00  UNKNOWN_EVENT

           This event should never be present in the log.

       01  START_EVENT_V3

           This indicates the start of a log file written by MySQL 4 or earlier.

       02  QUERY_EVENT

           The most common type of events.  These contain queries executed

           on the master.

       03  STOP_EVENT

           Indicates that master has stopped.

       04  ROTATE_EVENT

           Written when the master switches to a new log file.

       05  INTVAR_EVENT

           Used mainly for AUTO_INCREMENT values and if the LAST_INSERT_ID()

           function is used in the statement.

       06  LOAD_EVENT

           Used for LOAD DATA INFILE in MySQL 3.23.

       07  SLAVE_EVENT

           Reserved for future use.

       08  CREATE_FILE_EVENT

           Used for LOAD DATA INFILE statements.  This indicates the start

           of execution of such a statement.  A temporary file is created

           on the slave.  Used in MySQL 4 only.

       09  APPEND_BLOCK_EVENT

           Contains data for use in a LOAD DATA INFILE statement.  The

           data is stored in the temporary file on the slave.

       0a  EXEC_LOAD_EVENT

           Used for LOAD DATA INFILE statements.  The contents of the

           temporary file is stored in the table on the slave.

           Used in MySQL 4 only.

       0b  DELETE_FILE_EVENT

           Rollback of LOAD DATA INFILE statement.  The temporary file

           should be deleted on slave.

       0c  NEW_LOAD_EVENT

           Used for LOAD DATA INFILE in MySQL 4 and earlier.

       0d  RAND_EVENT

           Used to send information about random values if the RAND()

           function is used in the query.

       0e  USER_VAR_EVENT

           Used to replicate user variables.

       0f  FORMAT_DESCRIPTION_EVENT

           This indicates the start of a log file written by MySQL 5 or later.

       10  XID_EVENT

           Event indicating commit of XA transaction

       11  BEGIN_LOAD_QUERY_EVENT

           Used for LOAD DATA statements in MySQL 5 and later.

       12  EXECUTE_LOAD_QUERY_EVENT

           Used for LOAD DATA statements in MySQL 5 and later.

       13  TABLE_MAP_EVENT

           Reserved for future use

       14  WRITE_ROWS_EVENT

           Reserved for future use

       15  UPDATE_ROWS_EVENT

           Reserved for future use

       16  DELETE_ROWS_EVENT

           Reserved for future use

Master ID: The server id of the master that created the event.

Size: The size in bytes of the event.

Master Pos: The position of the event in the original master log file.

Flags: 16 flags.

       01  LOG_EVENT_BINLOG_IN_USE_F

           Log file correctly closed (Used only in FORMAT_DESCRIPTION_EVENT)

           If this flag is set (if the flags are e.g. '01 00') in an

           FORMAT_DESCRIPTION_EVENT, then the log file has not been

           properly closed.  Most probably because of a master crash (for

           example, due to power failure).

       02  Reserved for future use.

       04  LOG_EVENT_THREAD_SPECIFIC_F

           Set if the event is dependent on the connection it was

           executed in (example '04 00'), e.g. if the event uses

           temporary tables.

       08  LOG_EVENT_SUPPRESS_USE_F

           Set in some circumstances when the event is not dependent on

           the current database

其它标志保留用于将来使用。

在以后的版本中十六进制转储输出的格式可能会改变。

分享到:
评论

相关推荐

    mysqlbinlog.exe文件,win 7mysql 5.6下可用

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,而`mysqlbinlog`是MySQL中一个非常重要的工具,主要用于记录数据库的二进制日志(Binary Log)。在MySQL 5.6版本中,`mysqlbinlog`用于查看和操作这些日志,这...

    windows mysqlbinlog Ver 3.4 for Win64 at x86_64.zip

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,而MySQLbinlog是MySQL数据库系统中的一个重要工具,用于处理和解析MySQL的二进制日志(binlog)。在本案例中,我们讨论的是针对Windows 64位(Win64)x86_64架构...

    MYSQL的mysqlbinlog.exe文件

    mysqlbinlog.exe处理二进制日志文件!想看增量备份的dml日志文件,却看不懂,这个文件可以帮你查看,不弄多说,你懂的。 提示: 有的人说用了这个文件也看不了!那是你无能,见下面方法: 1、把mysqlbinlog.exe放到...

    mysqlbinlog工具详解

    mysqlbinlog工具详解 mysqlbinlog工具是MySQL数据库中一个非常重要的工具,用于将二进制日志文件转换为SQL语句,以便于数据库的回复和恢复。mysqlbinlog工具的使用非常广泛,特别是在数据库出现故障或崩溃时,需要...

    mysqldump.exe程序,mysqlbinlog.exe程序

    MySQL是世界上最受欢迎的开源数据库系统之一,而`mysqldump.exe`和`mysqlbinlog.exe`是MySQL数据库管理中的两个重要工具。这两个程序在数据库备份、恢复、迁移和故障排查中发挥着至关重要的作用。 首先,我们来详细...

    mysqlbinlog二进制日志资料.pdf

    `mysqlbinlog`是MySQL提供的一款命令行实用程序,专门用于处理和解析二进制日志文件。 在MySQL配置文件`my.cnf`或`my.ini`中启用二进制日志记录,需要在`mysqld`段落中添加`log-bin`选项,指定日志文件的名称或路径...

    mysqlbinlog工具

    MySQLbinlog工具是MySQL数据库系统中的一个重要组成部分,主要用于处理数据库的二进制日志文件(binary log)。这个日志文件记录了所有改变数据库状态的事务,对于数据恢复、备份、复制以及故障排查等方面都至关重要...

    mysqlbinlog.exe

    MySQLbinlog.exe是MySQL数据库系统中的一个重要工具,主要用于读取并解析MySQL的二进制日志(binary log),它是MySQL数据库事务和查询操作的历史记录。这个工具在数据库备份、恢复和故障排查中扮演着关键角色。 一...

    mysqlbinlog和binlog2sql的使用及mysql通过binlog日志恢复数据库数据

    mysqlbinlog和binlog2sql的使用及mysql通过binlog日志恢复数据库数据

    mysqlbinlog二进制日志.pdf

    MySQL二进制日志文件的使用和mysqlbinlog工具的应用 MySQL二进制日志文件是MySQL数据库中的一种日志文件,用于记录数据库的所有操作,包括增、删、改、查等操作。二进制日志文件的主要作用是用于数据库的备份和恢复...

    mysqlbinlog_flashback, 产生在线mysqlbinlog的回滚的sql.zip

    MySQLbinlog flashback 是一个开源工具,它主要用于从MySQL的二进制日志(binary log)中提取出可以执行的回滚SQL语句,以便在不影响线上服务的情况下进行数据恢复或故障排查。这个工具的核心功能是对MySQL binlog...

    mysql 逆向解析mysqlbinlog成sql工具,可以解析5.7json字段,批量执行

    先私信后购买,解析binlog利器,回滚恢复误删除数据

    mysqlbinlog.zip

    解决phpstudy没有mysqlbonlog.exe问题。包含三个文件:mysqlbinlog.exe(主);msvcp120.dll(依赖);msvcr120.dll(依赖)把三个文件放置在MySQL\bin目录下即可。我测试5.3和5.7下都可以用,不同版本应该可以通用

    使用mysqlbinlog工具恢复删除的数据库记录.docx

    MySQLbinlog 工具恢复删除的数据库记录 MySQLbinlog 是 MySQL 数据库管理系统中的一个重要工具,它允许用户查看和恢复数据库的二进制日志记录。 二进制日志记录是 MySQL 数据库中的一种日志记录方式,它记录了...

Global site tag (gtag.js) - Google Analytics