当前位置: 首页 > 知识库问答 >
问题:

mysql 5.6在将binlog_格式更改为row后仍记录为语句

莫繁
2023-03-14

昨天下午我运行了“set global binlog_format='ROW'”,这是之前的声明

root@3306 (none)> show variables like '%format%';
+--------------------------+-------------------+
| Variable_name            | Value             |
+--------------------------+-------------------+
| binlog_format            | ROW               |

但是在检查binlog之后,仍然有一些SQL记录为语句,例如:

BEGIN
/*!*/;
# at 41498921
#160607 23:17:21 server id 1637  end_log_pos 41499120 CRC32 0xd701f3e2  Query   thread_id=1229089   exec_time=0 error_code=0
SET TIMESTAMP=1465312641/*!*/;
**INSERT INTO RECORD (id,shop_id,create_time) VALUES(6014464753,'3','2016-06-07 23:17:21')**
/*!*/;
# at 41499120
#160607 23:17:21 server id 1637  end_log_pos 41499273 CRC32 0xd1840cf1  Query   thread_id=1229089   exec_time=0 error_code=0
SET TIMESTAMP=1465312641/*!*/;
UPDATE log SET diamond = diamond + 400 WHERE id = 6014464753
/*!*/;
# at 41499273

虽然其他人可以记录为ROW,

 # at 77950217
#160607 23:38:17 server id 1637  end_log_pos 77950184 CRC32 0x0b0f7620  Rows_query
# **INSERT INTO record (id,shop_id,create_time) VALUES(6001495,'3','*2016-06-07 23:38:17*')**
# at 77950347
#160607 23:38:17 server id 1637  end_log_pos 77950259 CRC32 0x290541ab  Table_map: `test`.`record` mapped to number 1140
# at 77950422
#160607 23:38:17 server id 1637  end_log_pos 77950306 CRC32 0x06774669  Write_rows: table id 1140 flags: STMT_END_F
### INSERT INTO `test`.`record`
### SET
###   @1=6001495 /* INT meta=0 nullable=0 is_null=0 */
###   @2='3' /* VARSTRING(96) meta=96 nullable=0 is_null=0 */
###   @3='*2016-06-07 23:38:18*' /* DATETIME(0) meta=0 nullable=0 is_null=0 */
# at 77950469

对我来说很奇怪,我肯定更改是在"160607 23:17:21"之前完成的,但是为什么它仍然是声明呢?mysql版本是5.6.24。

顺便说一句:secord sql文本是"INSERT INTO记录(id,shop_id,create_time)VALUES(6001495,'3','2016-06-07 23:38:17')",但记录为"@3='2016-06-07 23:38:18'",为什么会这样,表def在这里

Create Table: CREATE TABLE `record` (
  `id` int(11) unsigned zerofill NOT NULL,
  `shop_id` varchar(32) NOT NULL,
  `create_time` datetime NOT NULL,
  KEY `id` (`id`),
  CONSTRAINT `rech_gif` FOREIGN KEY (`id`) REFERENCES `info` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

共有1个答案

华宏逸
2023-03-14

解决了第一个问题,因为binlog_格式是动态重置的,新值“row”只影响未来的连接,已建立的连接仍然采用“statement”。第二个问题仍然存在,对于“插入记录(id,shop_id,create_time)值(6001495,'3','2016-06-07 23:38:17')”,它将被重放为“插入记录(id,shop_id,create_time)值(6001495,'3','2016-06-07 23:38:18'),这会导致不一致。当master执行“delete from record where id=6001495”时,slave遇到了错误,因为无法找到匹配的记录

 类似资料:
  • 在本期续篇中 主代码: 然后我需要得到一个最接近给定日期的值列表: 然后弄一张这样的桌子: 但如何才能得到这种格式的结果: 我在此上下文中使用pivot的所有尝试都没有成功。 更新 根据@Gordon Linoff和@xxx的建议,尝试重做使用Dinamic SQL的代码,现在开始: ‘op为(选择op.id_object,op.id_param,name,op.cdate,op.value,RO

  • 我知道这是很常见的问题,但我想知道为什么当我试图将DateTime转换为单词时,它不起作用,所以我使用了这种格式 提供格式 结果/转换为 这是我尝试过的,但它返回一个错误需要帮助 样品

  • 我的组织在route53中有两个不同的托管区域,多个CNAME记录解析为负载平衡器的DNS名称。我希望更改这些记录,以指向我们的新型全球加速器的IP地址。我创建了一个json文件并用cli上传,收到了以下错误: 调用ChangeResourceRecordSets操作时出错(InvalidChangeBatch):[DNS名称为Foo.Bar.com的A类型的RRSet。因为在zone Bar.c

  • 我想把列表更改为json格式。我该怎么办? Java script部分我无法获得这样的代码部分

  • 我使用的是flume的纯节点(测试)模式;我的水槽以如下方式启动: 水槽节点-1-c$FQDN':amqp(“exchangeName=[exchange name]”,“bindings=[binding name]””,“host=127.0.0.1”,“port=5672”,“userName=[user]”,”password=[pass]“,”exchangeType=direct“,”