10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国Ltr)- 41.6 mb
PDF (A4)- 41.7 mb
手册(TGZ)- 262.1 kb
手册(Zip)- 372.2 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

4.6.9.2 mysqlbinlog行事件显示

下面的例子说明了如何操作mysqlbinlog显示指定数据修改的行事件。这些与事件相对应WRITE_ROWS_EVENTUPDATE_ROWS_EVENT,DELETE_ROWS_EVENT类型的代码。的——base64-output = DECODE-ROWS而且——详细选项可用于影响行事件输出。

假设服务器使用基于行的二进制日志记录,并且执行以下语句序列:

CREATE表t (id INT NOT NULL, name VARCHAR(20) NOT NULL, date date NULL)开始事务;INSERT INTO t VALUES(1, 'apple', NULL);UPDATE SET name = 'pear', date = '2009-01-01' WHERE id = 1;删除id = 1的数据提交;

默认情况下,mysqlbinlog显示编码为base-64字符串的行事件BINLOG语句。省略多余的行,由前面的语句序列产生的行事件的输出如下所示:

$ > mysqlbinloglog_file...#080828 15:03:08服务器id 1 end_log_pos 258 Write_rows:表id 17 flags: STMT_END_F BINLOG ' fas3sbmbaaaalaaaanoaaaaaaaabeaaaaaaaaabhrlc3qaaxqaawmpcgiuaaq = fas3sbcbaaaakaaaaaibaaaqabeaaaaaaaaaaaaavhchbszq == '/*!*/;...# at 302 #080828 15:03:08服务器id 1 end_log_pos 356 Update_rows:表id 17 flags: STMT_END_F BINLOG ' fas3sbmbaaaalaaaac4baaaaabeaaaaaaaaaaabhrlc3qaaxqaawmpcgiuaaq = fas3sbgbaaaangaaagqbaaaqabeaaaaaaaaaeaa//// AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP '/*!*/;...# at 400 #080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F BINLOG ' fas3sbmbaaaalaaaajabaaaaaaaaaaaaaaaaaaaaaaabhrlc3qaaxqaawmpcgiuaaq = fas3sbkbaaaakgaaalobaaaqabeaaaaaaaaaaaaaaqaaaarwzwfyibip '/*!*/;

的形式将行事件视为注释pseudo-SQL语句,运行mysqlbinlog——详细- v选择。这个输出级别还显示了表分区信息。输出包含以# # #

$> mysqlbinlog -vlog_file...#080828 15:03:08服务器id 1 end_log_pos 258 Write_rows:表id 17 flags: STMT_END_F BINLOG ' fas3sbmbaaaalaaaanoaaaaaaaabeaaaaaaaaabhrlc3qaaxqaawmpcgiuaaq = fas3sbcbaaaakaaaaaibaaaqabeaaaaaaaaaaaaavhchbszq == '/*!*/;插入到测试中。t组# # # # # # @1 = 1 # # # @2 =‘苹果’# # # @3 =零……# at 302 #080828 15:03:08服务器id 1 end_log_pos 356 Update_rows:表id 17 flags: STMT_END_F BINLOG ' fas3sbmbaaaalaaaac4baaaaabeaaaaaaaaaaabhrlc3qaaxqaawmpcgiuaaq = fas3sbgbaaaangaaagqbaaaqabeaaaaaaaaaeaa//// AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP '/*!*/;###更新测试t # # #, # # # @1 = 1 # # # @2 =‘苹果’# # # @3 = NULL # # # # # #设置@1 = 1 # # # @2 =“梨”# # # @3 =“2009:01:01”……# at 400 #080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F BINLOG ' fas3sbmbaaaalaaaajabaaaaaaaaaaaaaaaaaaaaaaabhrlc3qaaxqaawmpcgiuaaq = fas3sbkbaaaakgaaalobaaaqabeaaaaaaaaaaaaaaqaaaarwzwfyibip '/*!*/;###删除测试。t # # #, # # # @1 = 1 # # # @2 =“梨”# # # @3 =“2009:01:01”

指定——详细- v还可以显示每列的数据类型和一些元数据,以及信息日志事件,如行查询日志事件binlog_rows_query_log_events系统变量设置为真正的.输出包含在每一列更改之后的附加注释:

$> mysqlbinlog -vvlog_file...#080828 15:03:08服务器id 1 end_log_pos 258 Write_rows:表id 17 flags: STMT_END_F BINLOG ' fas3sbmbaaaalaaaanoaaaaaaaabeaaaaaaaaabhrlc3qaaxqaawmpcgiuaaq = fas3sbcbaaaakaaaaaibaaaqabeaaaaaaaaaaaaavhchbszq == '/*!*/;插入到测试中。t ### SET ### @1=1 /* INT meta=0 nullable=0 is_null=0 */ ## @2='apple' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */ ## @3=NULL /* VARSTRING(20) meta=0 nullable=1 is_null=1 */…# at 302 #080828 15:03:08服务器id 1 end_log_pos 356 Update_rows:表id 17 flags: STMT_END_F BINLOG ' fas3sbmbaaaalaaaac4baaaaabeaaaaaaaaaaabhrlc3qaaxqaawmpcgiuaaq = fas3sbgbaaaangaaagqbaaaqabeaaaaaaaaaeaa//// AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP '/*!*/;###更新测试t ### # WHERE ### # @1=1 /* INT meta=0 nullable=0 is_null=0 */ ### @2='apple' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */ ### @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */ ### @3='苹果' /* VARSTRING(20) meta=0 nullable=1 is_null=1 */ ### SET ### @1=1 */ ### SET ### @1=1 / ### #梨' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */ ### @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */# at 400 #080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F BINLOG ' fas3sbmbaaaalaaaajabaaaaaaaaaaaaaaaaaaaaaaabhrlc3qaaxqaawmpcgiuaaq = fas3sbkbaaaakgaaalobaaaqabeaaaaaaaaaaaaaaqaaaarwzwfyibip '/*!*/;###删除测试。t# ## WHERE ### @1=1 /* INT meta=0 nullable=0 is_null=0 */ ### @2='pear' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */ ### @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */

你可以看出mysqlbinlog为了压制BINLOG的行事件的语句——base64-output = DECODE-ROWS选择。这类似于——base64-output =没有但如果发现行事件,则不退出并显示错误。的组合——base64-output = DECODE-ROWS而且——详细提供了一种只将行事件视为SQL语句的方便方法:

$> mysqlbinlog -v——base64-output=DECODE-ROWSlog_file...# stmt_end_f# ## INSERT INTO test. #服务器id 1 end_log_pos 258 Write_rows:表id 17 flags:t组# # # # # # @1 = 1 # # # @2 =‘苹果’# # # @3 =零……# at 302 #080828 15:03:08 server id 1 end_log_pos 356 Update_rows:表id 17 flags: stmt_end_f# ## UPDATE test。t # # #, # # # @1 = 1 # # # @2 =‘苹果’# # # @3 = NULL # # # # # #设置@1 = 1 # # # @2 =“梨”# # # @3 =“2009:01:01”……# at 400 #080828 15:03:08 server id 1 end_log_pos 442 Delete_rows:表id 17 flags: stmt_end_f# ## DELETE FROM test。t # # #, # # # @1 = 1 # # # @2 =“梨”# # # @3 =“2009:01:01”
请注意

你不应该压抑BINLOG语句,如果您打算重新执行mysqlbinlog输出。

生成的SQL语句——详细因为行事件比相应的事件更具可读性BINLOG语句。但是,它们并不完全对应于生成事件的原始SQL语句。以下限制适用:

  • 原来的列名已丢失,取而代之的是@N,在那里N是列号。

  • 二进制日志中没有字符集信息,这会影响字符串列的显示:

    • 对应的二进制和非二进制字符串类型之间没有区别(二进制而且字符VARBINARY而且VARCHAR而且文本).输出使用的数据类型字符串对于固定长度的字符串和VARSTRING对于可变长度的字符串。

    • 对于多字节字符集,二进制日志中没有显示每个字符的最大字节数,因此字符串类型的长度以字节而不是字符显示。例如,字符串(4)用作来自以下列类型的值的数据类型:

      CHAR(4) CHARACTER SET latin1 CHAR(2) CHARACTER SET ucs2
    • 由于事件类型的存储格式UPDATE_ROWS_EVENT更新语句用在哪里前条款条款。

正确解释行事件需要二进制日志开头的格式描述事件提供的信息。因为mysqlbinlog不事先知道日志的其余部分是否包含行事件,默认情况下,它使用BINLOG语句的初始部分。

如果已知二进制日志不包含任何需要BINLOG语句(即没有行事件),则——base64-output =没有选项可用于阻止写入此标头。