我徒劳地试图从我的4节点MySQL集群的二进制日志中获取一些有用的信息。作为测试,我在上午11:01在主服务器上手动执行了一个UPDATE语句(它确实成功地更改了表中的一些数据)。不幸的是,我无法让mysqlbinlog向我显示执行的语句。
我尝试过--verbose选项, - hexdump选项和--base64-output = DECODE-ROWS --verbose。无论我做什么,实际的语句似乎仍然被编码(或者当应该有更新时有一个INSERT INTO)。
以下是我上午11点01分测试的相关输出,指定了--base64-output = DECODE-ROWS --verbose选项。为什么我的UPDATE语句无处可寻?并且,如果数据库将其优化为INSERT INTO,为什么我至少不能看到表名和原始语句的其他部分?
# at 1744
#121213 11:01:56 server id 1 end_log_pos 1808 Query thread_id=0 exec_time=0 error_code=0
SET TIMESTAMP=1355425316/*!*/;
BEGIN
/*!*/;
# at 1808
# at 1899
# at 1961
# at 2022
#121213 11:01:56 server id 1 end_log_pos 1899 Table_map: `source_words`.`players` mapped to number 1826
#121213 11:01:56 server id 1 end_log_pos 1961 Table_map: `mysql`.`ndb_apply_status` mapped to number 1817
#121213 11:01:56 server id 1 end_log_pos 2022 Write_rows: table id 1817
#121213 11:01:56 server id 1 end_log_pos 2071 Write_rows: table id 1826 flags: STMT_END_F
### INSERT INTO mysql.ndb_apply_status
### SET
### @1=1
### @2=14197993649471490
### @3=''
### @4=0
### @5=0
### INSERT INTO source_words.players
### SET
### @1='834770J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\x00\x00\x17yê\x00\x00\x17yê\x00\x00 \x00\x00\x00\x00\x00\x00\x00À'
### @6=0
# at 2071
#121213 11:01:56 server id 1 end_log_pos 2136 Query thread_id=0 exec_time=0 error_code=0
SET TIMESTAMP=1355425316/*!*/;
COMMIT
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
谢谢, 罗布
答案 0 :(得分:1)
binlog记录改变的内容,不一定是什么语句导致它(或者如果更新没有更新任何内容,也不会显示任何内容)。如果您的BINLOG_FORMAT
为STATEMENT
,则ROW
& MIXED
,你可以在MySQL认为适当的地方和时间获得这些条目。 binlog不是监视/检查数据库上的查询(使用常规查询日志),binlog仅用于记录数据的更改,因此您可以可靠地恢复备份或使用复制。它从来没有打算成为人类可读的。
另请注意,可能会设置哪些内容将不会被binlog,并且您的“默认架构”会对连接产生很大影响。如果你真的错过了一个陈述(请注意旧日志被轮换),我建议SHOW VARIABLES LIKE '%binlog%';