非主键列不一致时,mysql同步追踪

参数设置,主从都设置成"ROW"模式
mysql> show variables like '%binlog_format%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.01 sec)

从库:
mysql> show variables like '%log_slave_update%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| log_slave_updates | ON    |
+-------------------+-------+
1 row in set (0.00 sec)

更改从库数据,使主从不一致(id是主键)
mysql> select * from tb_rpl;
+----+--------+
| id | name   |
+----+--------+
|  1 | wubx   |
|  2 | mysql1 |
|  3 | test   |
+----+--------+
3 rows in set (0.00 sec)

mysql> update tb_rpl set name='mysql22' where name = 'mysql1';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

这时更改主库数据

mysql> select * from tb_rpl;
+----+--------+
| id | name   |
+----+--------+
|  1 | wubx   |
|  2 | mysql1 |
|  3 | test   |
+----+--------+
3 rows in set (0.00 sec)

mysql> update tb_rpl set name='mysql11' where name = 'mysql1';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

从库同步成功:

mysql> select * from tb_rpl;
+----+---------+
| id | name    |
+----+---------+
|  1 | wubx    |
|  2 | mysql11 |
|  3 | test    |
+----+---------+
3 rows in set (0.00 sec)

这过程发生了什么呢?

先分析下主库log


如果用这个语句去更新从库数据,显然不行。

所以还需要分析下从库的日志


真相大白,从库执行时把@2这个变量给改了,这中间应该还有我没看到事发生。

这过程与我想象中的where里只有主键的条件不一样。

补充:

mysql> select version();
+------------+
| version()  |
+------------+
| 5.6.21-log |
+------------+
1 row in set (0.03 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园2.0是高校信息化建设的新阶段,它面对着外部环境变化和内生动力的双重影响。国家战略要求和信息技术的快速发展,如云计算、大数据、物联网等,为智慧校园建设提供了机遇,同也带来了挑战。智慧校园2.0强调以服务至上的办学理念,推动了教育模式的创新,并对传统人才培养模式产生了重大影响。 智慧校园建设的解决之道是构建一个开放、共享的信息化生态系统,利用互联网思维,打造柔性灵活的基础设施和强大的基础服务能力。这种生态系统支持快速迭代的开发和持续运营交付能力,同注重用户体验,推动服务创新和管理变革。智慧校园的核心思想是“大平台+微应用+开放生态”,通过解耦、重构和统一运维监控,实现服务复用和深度融合,促进业务的快速迭代和自我演化。 智慧校园的总体框架包括多端协同,即“端”,它强调以人为中心,全面感知和捕获行为数据。这涉及到智能感知设备、超级APP、校园融合门户等,实现一“码”或“脸”通行,提供线上线下服务端的无缝连接。此外,中台战略是智慧校园建设的关键,包括业务中台和数据中台,它们支持教育资源域、教学服务域等多个领域,实现业务的深度融合和数据的全面治理。 在技术层面,智慧校园的建设需要分期进行,逐步解耦应用,优先发展轻量级应用,并逐步覆盖更多业务场景。技术升级路径包括业务数据化、数据业务化、校园设施智联化等,利用IoT/5G等技术实现设备的泛在互联,并通过人工智能与物联网技术的结合,建设智联网。这将有助于实现线上线下一网通办,提升校园安全和学习生活体验,同支持人才培养改革和后勤管理的精细化。 智慧校园的建设不仅仅是技术的升级,更是对教育模式和管理方式的全面革新。通过构建开放、共享的信息化生态系统,智慧校园能够更好地适应快速变化的教育需求,提供更加个性化和高效的服务,推动教育创新和人才培养的高质量发展。
`INSERT INTO ... ON DUPLICATE KEY UPDATE` 是一种SQL语句模式,它用于在插入新记录如果发现主键(或其他唯一索引)已经存在,则更新那些已存在的字段,而不是插入一个新的记录。这种机制通常用于实现某种形式的数据复制或同步。 然而,有以下几个原因可能促使禁用这个特性: 1. **数据一致性**:在一个事务中执行 `INSERT` 和 `UPDATE` 可能导致数据一致。如果插入失败,`ON DUPLICATE KEY UPDATE` 操作可能会继续进行,导致部分更新的数据与预期不符。因此,在某些情况下,禁用它可以强制执行更严格的事务管理。 2. **性能**:频繁的更新操作可能导致表锁定,影响并发性能。如果数据库设计得当,不需要频繁地通过 `ON DUPLICATE KEY UPDATE` 来修改现有记录,那么禁用这个选项可以提高系统的响应速度。 3. **业务逻辑**:有些场景下,比如希望始终保持数据一致性状态,或者插入操作总是创建新的实体,而不允许覆盖现有数据,那么就应该明确禁止 `ON DUPLICATE KEY UPDATE`。 4. **审计追踪**:禁用这个功能可以帮助简化日志跟踪,因为不会混淆插入和更新的操作。 要完全禁用 `ON DUPLICATE KEY UPDATE`,可以在创建表的候定义主键或唯一索引,并设置其 `ON UPDATE` 或 `ON DELETE` 为 `NO ACTION` 或 `RESTRICT`,这样就不允许在插入更新数据。例如: ```sql CREATE TABLE table_name ( id INT PRIMARY KEY, ... UNIQUE (unique_column) ON UPDATE NO ACTION ); ``` 请注意,具体禁用策略取决于数据库管理系统和实际业务需求。在某些数据库(如MySQL)中,可以通过配置来全局控制这个行为,而在其他情况下,可能需要在每个触发该行为的存储过程或查询中手动处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值