查看“Mysqlbinlog行事件显示”的源代码
←
Mysqlbinlog行事件显示
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
以下示例说明了mysqlbinlog如何显示指定数据修改的行事件。这些对应于具有WRITE_ROWS_EVENT、UPDATE_ROWS_EVENT和DELETE_ROWS_EVENT类型代码的事件。可以使用–base64-output=DECODE-ROWS和–verbose选项来影响行事件输出。 <br> 假设服务器正在使用基于行的二进制日志记录,并且您执行以下语句序列: <pre>CREATE TABLE t ( id INT NOT NULL, name VARCHAR(20) NOT NULL, date DATE NULL ) ENGINE = InnoDB; START TRANSACTION; INSERT INTO t VALUES(1, 'apple', NULL); UPDATE t SET name = 'pear', date = '2009-01-01' WHERE id = 1; DELETE FROM t WHERE id = 1; COMMIT;</pre> <br> 默认情况下, mysqlbinlog显示使用BINLOG语句编码为base -64字符串的行事件。省略无关的行,前面语句序列产生的行事件的输出看起来如下: <pre>$> mysqlbinlog log_file ... # at 218 #080828 15:03:08 server id 1 end_log_pos 258 Write_rows: table id 17 flags: STMT_END_F BINLOG ' fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ= fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ== '/*!*/; ... # at 302 #080828 15:03:08 server id 1 end_log_pos 356 Update_rows: table id 17 flags: STMT_END_F BINLOG ' fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ= fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP '/*!*/; ... # at 400 #080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F BINLOG ' fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ= fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP '/*!*/;</pre> <br> 若要将行事件作为“伪SQL ”语句形式的注释查看,请使用<code>--verbose</code>或<code>-v</code>选项运行mysqlbinlog 。此输出级别还显示适用的表分区信息。输出包含以###开头的行: <pre>$> mysqlbinlog -v log_file ... # at 218 #080828 15:03:08 server id 1 end_log_pos 258 Write_rows: table id 17 flags: STMT_END_F BINLOG ' fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ= fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ== '/*!*/; ### INSERT INTO test.t ### SET ### @1=1 ### @2='apple' ### @3=NULL ... # at 302 #080828 15:03:08 server id 1 end_log_pos 356 Update_rows: table id 17 flags: STMT_END_F BINLOG ' fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ= fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP '/*!*/; ### UPDATE test.t ### WHERE ### @1=1 ### @2='apple' ### @3=NULL ### SET ### @1=1 ### @2='pear' ### @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 ' fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ= fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP '/*!*/; ### DELETE FROM test.t ### WHERE ### @1=1 ### @2='pear' ### @3='2009:01:01'</pre> <br> 指定–verbose或-v两次以显示每个列的数据类型和一些元数据,如果binlog指定–verbose或-v两次以显示每个列的数据类型和一些元数据,如果binlog_rows_query_log_events系统变量设置为TRUE,则还显示行查询日志事件等信息性日志事件。输出在每个列更改后包含一个附加注释: <pre>$> mysqlbinlog -vv log_file ... # at 218 #080828 15:03:08 server id 1 end_log_pos 258 Write_rows: table id 17 flags: STMT_END_F BINLOG ' fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ= fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ== '/*!*/; ### INSERT INTO test.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 server id 1 end_log_pos 356 Update_rows: table id 17 flags: STMT_END_F BINLOG ' fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ= fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP '/*!*/; ### UPDATE test.t ### WHERE ### @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 */ ### SET ### @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 */ ... # at 400 #080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F BINLOG ' fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ= fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP '/*!*/; ### DELETE FROM test.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 */</pre> <br> 您可以使用–base64-output = DECODE-ROWS选项告诉mysqlbinlog抑制行事件的BINLOG语句。这与–base64-output = NEVER类似,但如果找到行事件,则不会退出并报错。–base64-output = DECODE-ROWS和–verbose的组合提供了一个方便的方法,仅将行事件显示为SQL语句: <pre>$> mysqlbinlog -v --base64-output=DECODE-ROWS log_file ... # at 218 #080828 15:03:08 server id 1 end_log_pos 258 Write_rows: table id 17 flags: STMT_END_F ### INSERT INTO test.t ### SET ### @1=1 ### @2='apple' ### @3=NULL ... # at 302 #080828 15:03:08 server id 1 end_log_pos 356 Update_rows: table id 17 flags: STMT_END_F ### UPDATE test.t ### WHERE ### @1=1 ### @2='apple' ### @3=NULL ### SET ### @1=1 ### @2='pear' ### @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 ### DELETE FROM test.t ### WHERE ### @1=1 ### @2='pear' ### @3='2009:01:01'</pre> <br> <blockquote>注意 如果您打算重新执行mysqlbinlog输出,则不应抑制BINLOG语句。 </blockquote> <br> –verbose生成的行事件SQL语句比相应的BINLOG语句更易读。然而,它们并不完全对应于生成事件的原始SQL语句。以下限制适用: <ul> <li><p>原始列名丢失并用@N替换,其中N是列号。</p></li> <li><p>二进制日志中没有字符集信息,这会影响字符串列的显示:</p></li> <li><p>没有区分相应的二进制和非二进制字符串类型(BINARY和CHAR,VARBINARY和VARCHAR,BLOB和TEXT)。输出使用STRING作为固定长度字符串的数据类型,VARSTRING用于可变长度字符串。</p></li> <li><p>对于多字节字符集,每个字符的最大字节数不在二进制日志中,因此字符串类型的长度以字节而不是字符显示。例如,STRING(4)用作以下任一列类型的数据类型:</p> <pre>CHAR(4) CHARACTER SET latin1 CHAR(2) CHARACTER SET ucs2</pre></li> <li><p>由于UPDATE_ROWS_EVENT类型的事件存储格式,UPDATE语句显示为WHERE子句在SET子句之前。</p></li> <li><p>正确解释行事件需要二进制日志开头的格式描述事件的信息。因为mysqlbinlog事先不知道日志的其余部分是否包含行事件,所以默认情况下,它使用BINLOG语句在输出的初始部分显示格式描述事件。</p></li> <li><p>如果已知二进制日志不包含任何需要BINLOG语句的事件(即没有行事件),则可以使用–base64-output=NEVER选项防止写入此标题。</p></li></ul> <br>
返回至“
Mysqlbinlog行事件显示
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
基础知识
正则表达式
Markdown
分布式
项目管理
系统集成项目管理基础知识
云原生
Docker
云原生安全
云原生词汇表
十二因素应用
Kubernetes
音频处理
音频合成
Edge-tts
CMS系统
Docsify
VuePress
Mediawiki
自动生成
Marp
CI/CD
GitLab
设计
颜色
平面设计
AI
数字人
操作系统
GNU/Linux
数据库
Mysql
工具
链入页面
相关更改
特殊页面
页面信息