MySQL 基于语句的复制:binlog 是否包含在 master 上执行的确切查询?
MySQL statement based replication: Does binlog contain exact queries executed on master?
我们不得不为几天前发生的事件调试 Web 应用程序,而我们所拥有的只是 MySQL 复制二进制日志(语句复制)。我们可以依赖那些与我们的 Web 应用程序在 master 上执行的 SQL 查询完全相同的查询吗?
我们的应用程序在 table 中对单行进行大量更新,但这些总是像 UPDATE y SET x = x + 1 ...
或 x = x - 2
这样的查询,从来没有 UPDATE y SET x = 23 ...
,并且在二进制日志中,我们发现了许多 x = 23
种更新。难道那些严格赋值的UPDATE查询实际上是由复制机制创建的吗?
实际上应用程序正在执行那些 SET x=23
类型的更新,但在某些条件下。
所以回答我自己的问题:您将在 binlog 中找到的查询与在 master 数据库上执行的查询相同,但您只会在那里找到 insert/update 个查询(显然没有选择),以及它们的顺序可能不一样(需要查看binlog中注释中的时间戳)。
我们不得不为几天前发生的事件调试 Web 应用程序,而我们所拥有的只是 MySQL 复制二进制日志(语句复制)。我们可以依赖那些与我们的 Web 应用程序在 master 上执行的 SQL 查询完全相同的查询吗?
我们的应用程序在 table 中对单行进行大量更新,但这些总是像 UPDATE y SET x = x + 1 ...
或 x = x - 2
这样的查询,从来没有 UPDATE y SET x = 23 ...
,并且在二进制日志中,我们发现了许多 x = 23
种更新。难道那些严格赋值的UPDATE查询实际上是由复制机制创建的吗?
实际上应用程序正在执行那些 SET x=23
类型的更新,但在某些条件下。
所以回答我自己的问题:您将在 binlog 中找到的查询与在 master 数据库上执行的查询相同,但您只会在那里找到 insert/update 个查询(显然没有选择),以及它们的顺序可能不一样(需要查看binlog中注释中的时间戳)。