mysql查看binlog_MySQL的binlog数据如何查看
binlog介绍binlog,即⼆进制⽇志,它记录了数据库上的所有改变.
改变数据库的SQL语句执⾏结束时,将在binlog的末尾写⼊⼀条记录,同时通知语句解析器,语句执⾏完毕.
binlog格式基于语句,⽆法保证所有语句都在从库执⾏成功,⽐如update ... limit 1;
基于⾏,将每⼀次改动记为binlog中的⼀⾏.在执⾏⼀个特别复杂的update或者delete操作时,基于⾏的格式会有优势.
登录到mysql查看binlog只查看第⼀个binlog⽂件的内容show binlog events;
查看指定binlog⽂件的内容show binlog events in 'mysql-bin.000002';
查看当前正在写⼊的binlog⽂件show master status\G
获取binlog⽂件列表show binary logs;
⽤mysqlbinlog⼯具查看
注意:不要查看当前正在写⼊的binlog⽂件
不要加--force参数强制访问
如果binlog格式是⾏模式的,请加 -vv参数
本地查看基于开始/结束时间mysqlbinlog --start-datetime='2013-09-10 00:00:00' --stop-datetime='2013-09-10 01:01:01' -d 库名 ⼆进制⽂件
基于pos值mysqlbinlog --start-postion=107 --stop-position=1000 -d 库名 ⼆进制⽂件
远程查看指定开始/结束时间,并把结果重定向到本地t.binlog⽂件中.mysqlbinlog -u username -p password -hl-
db1.dba.beta6.qunar -P3306 \
--read-from-remote-server --start-datetime='2013-09-10 23:00:00' --stop-datetime='2013-09-10 23:30:00' mysql-bin.000001 > t.binlog
是否启⽤了⽇志
mysql>show variables like 'log_bin';
怎样知道当前的⽇志
mysql> show master status;
看⼆进制⽇志⽂件⽤mysqlbinlog
shell>mysqlbinlog mail-bin.000001
或者shell>mysqlbinlog mail-bin.000001 | tail
mysqlbinlog mysql-bin.000036 | less
查询包含⼏个字段的语句:
mysqlbinlog mysql-bin.000036| egrep
'(2011030610002460|2011030310001730|2011030410011680|2011030410006280)'
mysqlbinlog查看⼆进制⽇志的问题在使⽤mysqlbinlog查看⽇志的时候碰到了⼀个问题, 错误提⽰如
下:/usr/local/mysql/bin/mysqlbinlog: unknown variable 'default-character-set=utf8' 产⽣这个问题的原因是因为我在myf中的client选项组中添加了default-character-set=utf8要解决这个bug的⽅法还是有的, ⼀种⽅法是使⽤:--no-defaults./mysqlbinlog --no-defaults mysql-bin.000063 另⼀种⽅法:使⽤mysqlbinlog⼯具查看⼆进制⽇志时会重新读取的mysql的配置⽂件
myf(windows下是my.ini),⽽不是服务器已经加载进内存的配置⽂件。也就是说只要修改并保存了myf⽂件,⽽不需要重起mysql服务器,则使⽤mysqlbinlog查看时修改后的myf配置⽂件对mysqlbinlog⽽⾔已经⽣效。所以这⾥可以使⽤此⽅法:把client选项组中default-character-set=utf8选项屏蔽掉,如 #default-character-set=utf8然后运⾏mysqlbinlog⼯具,则不会产⽣任何问题了。当然记得在不在使⽤mysqlbinlog⼯具时,把#default-character-set=utf8
选项恢复为default-character-set=utf8
⼀、mysqlbinlog简介
binlog⼜叫⼆进制⽇志⽂件,它会将mysql中所有修改数据库数据的Query以⼆进制的形式记录到⽇志⽂件中,如:
create,insert,drop,update等;(对于select操作则不会被记录到binlog⾥,因为它并没有修改数据库的数
据)。binlog⼀般存储在数据⽬录下,并且命名为:mysql-bin.***(这个可以在配置⽂件中修改myf:log-bin=mysql-bin,就是⽂件名的前缀;mysqld在每个 binlog名后⾯添加⼀个数字扩展名。每次启动服务器或刷新⽇志时增加⽂件的⼤⼩⼤于max_binlog_size,⼀个事务不会被拆分开)。
binlog主要是⽤于保证数据完整的,如主从备份,通过从binlog⽂件中读取操作来在salve机上进⾏同样的操作,保证主从备份,当然不可能每次都从开始的地⽅redo,所以每条记录都有⼀个时间截TIMESTAMP。
⼆、binglog的类型
binlog的格式有三种,这也反应了mysql的复制技术:基于SQL语句的复制(statement-based replication, SBR),基于⾏的复制(row-based replication, RBR),混合模式复制(mixed-based replication, MBR)。相应地,binlog的格式也有三种:
STATEMENT,ROW,MIXED。
mysql>showvariables like 'binlog_format' #查看binlog的格式
三、简单的使⽤binlog及查看修改其类型
show binary logs; #显⽰binlog⽂件
purge binary logsto 'mysql-bin.**' #删除到**⽂件
bin/mysqlbinlog binlogfile #解析binlog⽂件
具体使⽤可以查看帮助⽂件,也可以参考官⽅⽤法:
利⽤binlog恢复数据:
bin/mysqlbinlog --start-datetime='2011-7-7 18:0:0'--stop-datetime='2011-7-7 20:07:13' data/mysql-bin.000008 |mysql -u root
查看及修改binlog的类型可以通过查看myf⽂件,如混合型的设置如下:
log-bin=mysql-bin
#binlog_format=STATEMENT #binlog_format=ROW
binlog_format=mixed
另外也可以通过查看binlog⽇志⽂件的内容,具体上⾯已进⾏讲解。 也可以通过查看sql状态来查看:mysql>show variables like
'%log%';+-----------------------------------------+--------------------------------+| Variable_name | Value |+-----------------------------------------+--------------------------------+| back_log | 50 ||
binlog_cache_size | 32768 || binlog_direct_non_transactional_updates | OFF || binlog_format | MIXED
不复启mysql重新加载myf⽂件的情况下,修改mysqlbinlog类型的⽅法:mysql> SET SESSION binlog_format =
'STATEMENT';mysql> SET SESSION binlog_format = 'ROW';mysql> SET SESSION binlog_format = 'MIXED';mysql> SET GLOBAL binlog_format = 'STATEMENT';mysql> SET GLOBAL binlog_format = 'ROW';mysql> SET GLOBAL binlog_format =
'MIXED';
四、binlog记录的格式
每个binlog的开始都是由4个字节:fe 62 69 6e,后⾯三个字节就是bin。
然后接下来的就是⼀条记录的内容它包括:Common-Header,这部分不同版本的⼤⼩不⼀样,4.0以上的都是19个字节。在这个之后就是BODY。
Common-Header格式:(单位:字节)
windows怎么使用mysqlTimestamp(4)Type(1)Server_id(4)Total_size(4)End_log_pos(4)Flag(2)
Timestamp:从1970开始
Type:此log event type如FORMAT_DESCRIPTION_EVENT、QUERY、LOAD_EVENT等,其中每个binlog的第⼀条记录的类型都是FORMAT_DESCRIPTION_EVENT,它记录了该binlog的相关信息,如版本,这些信息对于后序分析binlog记录是有⽤的,所以对于任务要读取binlog的内容的⼯具都必须先读取第⼀条记录。QUERY包括我们经常操作的如:create,drop,update,insert等。
Server_id:创建这个事件的server id。防⽌循环主从导致的主机被从写。The master's server id (is preserved in therelay log; used to prevent from infinite loops in circular replication).
Total_size:该记录的⼤⼩,包括common_header及body。
End_log_pos:此下⼀条记录的开始位置。也是此条记录结束位置的上⼀个字节。
Flag:标志位。
QUERY类型的记录:
QUERY类型的记录除了开始的common-header之外,在body的开头是⼀个Post-header,然后之后才是真正的body内容。
Query Post-Header:(单位字节)
Thread_id(4)Exec_time(4)Db_len(1)Error_code(2)Status_var_len(2)
Thread_id:is used to distinguish temporary tables that belong to differentclients.
Exec_time:The time from whenthe query started to when it was logged in the binlog, in seconds.QUERY到达到这个binlog事件⽣成的时间间隔。
Db_len:当前数据库的名称长度。
Error_code:执⾏出错的错误号。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论