MySQL主从同步出现的诡异HA_ERR_KEY_NOT_FOUND故障( 二 )


三、问题总结1、
slave_rows_search_algorithms参数的作用
此参数是从节点接收到数据时,采用何种方式进行数据查找,取值如下:

  • TABLE_SCAN,INDEX_SCAN(默认值)
  • INDEX_SCAN,HASH_SCAN
  • TABLE_SCAN,HASH_SCAN
  • TABLE_SCAN,INDEX_SCAN,HASH_SCAN
上面出现问题的原因,是在于没有启用TABLE_SCAN全表扫描,导致主从同步更新时,报出HA_ERR_KEY_NOT_FOUND没有找到数据的错误,但实际数据是存在,虽然有联合唯一索引,但写入SQL的操作方式并不生效:
MySQL主从同步出现的诡异HA_ERR_KEY_NOT_FOUND故障

文章插图
 
导致走HASH_SCAN方式 。
2、HASH_SCAN方式存在缺陷
查阅相关资料,发现主从同步走HASH_SCAN方式,也出现过类似缺陷:
MySQL主从同步出现的诡异HA_ERR_KEY_NOT_FOUND故障

文章插图
 
3、建议的解决方式
如何保障性能效率,又能很好的解决此问题:
1) 不用修改主从同步参数
slave-rows-search-algorithms
仍采用“INDEX_SCAN,HASH_SCAN“方式,这样是可以提升主从同步的效率
2)表结构必须加上主键(可以是自增ID也可以是联合主键),从检索速度和稳定性来讲,没特殊需要,不建议采用字符类型作为主键 。

【MySQL主从同步出现的诡异HA_ERR_KEY_NOT_FOUND故障】


推荐阅读