mysqlbinlog详解

mysqlbinlog用于处理二进制日志文件的实用工具详解mysqlbinlog
从二进制日志读取语句的工具。在二进制日志文件中包含的执行过的语句的日志可用来帮助从崩溃中恢复。

binlog日志打开方法

在my.cnf这个文件中加一行(Windows为my.ini)。

#vi /etc/my.cnf
[mysqld]
log-bin=mysqlbin-log #添加这一行就ok了=号后面的名字自己定义吧
然后我们可以对数据库做简单的操作后到mysql数据文件所在的目录来看binlog文件
[[email protected] mysql]# ll
-rw-rw—- 1 mysql mysql 813255 Nov 25 18:14 mysqlbin-log.000001
搞定了

mysqlbinlog用法详细说明

服务器生成的二进制日志文件写成二进制格式。要想检查这些文本格式的文件,应使用mysqlbinlog实用工具。
应这样调用mysqlbinlog:
shell> mysqlbinlog [options] log-files…例如,要想显示二进制日志binlog.000003的内容,使用下面的命令:
shell> mysqlbinlog binlog.0000003输出包括在binlog.000003中包含的所有语句,以及其它信息例如每个语句花费的时间、客户发出的线程ID、发出线程时的时间戳等等。
通常情况,可以使用mysqlbinlog直接读取二进制日志文件并将它们用于本地MySQL服务器。也可以使用–read-from-remote-server选项从远程服务器读取二进制日志。
当读取远程二进制日志时,可以通过连接参数选项来指示如何连接服务器,但它们经常被忽略掉,除非你还指定了–read-from-remote-server选项。这些选项是–host、–password、–port、–protocol、–socket和–user。
还可以使用mysqlbinlog来读取在复制过程中从服务器所写的中继日志文件。中继日志格式与二进制日志文件相同。

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客户端以执行包含在二进制日志中的语句。如果你有一个旧的备份,该选项在崩溃恢复时也很有用:
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.sqlshell> mysqlbinlog hostname-bin.000002 >> /tmp/statements.sqlshell> 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操作。

警告:为LOAD DATA LOCAL语句创建的临时文件不会自动删除,因为在实际执行完那些语句前需要它们。不再需要语句日志后应自己删除临时文件。文件位于临时文件目录中,文件名类似original_file_name-#-#。
–hexdump选项可以在注释中产生日志内容的十六进制转储:

shell> mysqlbinlog –hexdump master-bin.000001上述命令的输出应类似:
;;# 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 startupROLLBACK;十六进制转储的输出包含下面的元素:
·
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其它标志保留用于将来使用。
在以后的版本中十六进制转储输出的格式可能会改变。

来源http://blog.sina.com.cn/s/blog_4a80a5730101onh4.html

时间: 2024-10-04 10:36:39

mysqlbinlog详解的相关文章

Linux-6.5下 MariaDB-10基于LVM快照的备份数据 详解

理解部分: LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性.LVM可以对分区在线扩容,快照,镜像和条带化,功能非常强大.这篇文章的主题就是其中一个功能--快照. 快照(Snapshot)就是关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像.快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品: 其实

CentOS 6.5 MySQL/MariaDB数据备份与恢复备份详解

MySQL/MariaDB数据备份与恢复备份 数据对我们来说再重要不过了,那我们如何做到对数据尽可能的安全呢,当我们的数据丢失了那又该怎么做呢,所以说数据备份对我们的数据安全性来说太重要了. 数据对我们来说再熟悉不过了,也最平常不过了,我们每天都在接触各色各样的数据,数据记录了我们平常相关的业务信息,所以数据对于我们来说是很重要的,这么重要的数据如果我们的数据丢失了那我们是不是相关的业务都没法进行了呢,这应该是个很麻烦的问题,那我们怎么保护我们的数据的安全呢,这就要用到我们的数据备份了. 如何执

MySQL的binlog详解(转)

MySQL的binlog详解 什么是binlog binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句.语句以"事件"的形式保存,它描述数据更改. binlog作用 因为有了数据更新的binlog,所以可以用于实时备份,与master/slave复制 和binlog有关参数 log_bin 设置此参数表示启用binlog功能,并指定路径名称 log_bin_index 设置此参数是指定二进制索引文件的路径与名称 binlog_

xtrabackup备份工具使用详解

xtrabackup备份工具使用详解 innobackupex: 需要MySQL服务处于运行状态 [percona]下载 wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.8/RPM/rhel6/x86_64/percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm wget https://www.percona.com/downloads/percona-toolkit/2.2.

Mysql主从数据库架构的复制原理及配置详解

1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

MySQL主从架构详解

1.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

MySql日志详解及应用实战

1.mysql主从有主-从.主-主形式 其中主从形式,主负责写入,从负责读取,主数据库如果挂掉则将另一台从数据库提升为主,更换主库速度较慢 主主形式用于搜索引擎,与主从的区别为,当有数据写入时,如果写入数据库A成功则默认A为主库,一旦写入A异常则立即更换B库写入,此时B库就提升为主库,与主从形式相比,因为不存在严格的主从关系,所以更换主库速度快.缺点是因为两台数据库都可以变更数据,容易导致数据紊乱(主要表现在自增主键). 多台写入导致自增主键紊乱可以通过 修改自增主键自增量(如有2台数据库,可以

MySQL 5.5 主从复制异步、半同步以及注意事项详解

大纲 一.前言 二.Mysql 基础知识 三.Mysql 复制(Replication) 四.Mysql 复制(Replication)类型 五.Mysql 主从复制基本步骤 六.Mysql 主从复制(异步) 七.Mysql 主从复制(半同步) 八.Mysql 复制工具 九.Mysql 复制注意事项 十.Mysql 复制过滤 一.前言 从这一篇博客开始我们就来学习mysql的高级课程,在前面的几篇博客我们讲解了mysql基础知识.mysql日志类型.mysql配置文件.mysql备份策略,这一篇

Mysql 配置参数详解以及优化配置

mysql有以下几种日志: 错误日志:   log-err 查询日志:   log 慢查询日志:  log-slow-queries 更新日志:   log-update 二进制日志: log-bin 要把日志生成在 /var/log 目录下(是系统日志存放的地方,只有 root 账号有写权限),需要 MySQL进程对这个目录有读写权限,一般是不这么做的,也考虑到安全问题,包括 MySQL 本身的数据安全,因为对 MySQL 的所有操作,都会记录到常规查询日志.MySQL的日志就不要用 /var