故障解析丨导入字符串NULL导致主从报错

1.背景概述

目前需要搭建一个从库,由于单表数据量较大,时间比较有限,考虑到导入导出的时间,并且GreatSQL支持并行load data的功能,能够加速数据的导入,因此决定使用 select into outfile 和 load data 的方式进行数据的迁移;

在数据导入完成后进行数据同步,从库发生报错 1032 找不到记录,但是登录从库中可以查询到此条记录,这里就很奇怪;

最后通过解析relaylog,根据relaylog中的update记录,以每个字段为查询条件进行查询,发现是由于NULL值列导致的,主库这列的值是 NULL,从库在导入后导成了字符串"NULL",因此导致回放update操作时匹配不到数据而报错1032.

2.问题复现

本次测试基于 GreatSQL 8.0.32-24

2.1 初始化2个单机实例

2.2 主节点创建测试表

greatsql> create database test; greatsql> use test; greatsql> create table t1 (id int, name varchar(30), age int, addr varchar(30), school varchar(30), unique key (id)) engine=innodb; greatsql> insert into t1 values (1,'小红',10,'北京','一中'), (2,'小绿',11,'北京','一中'), (3,'小黄',12,'北京',NULL), (4,'小蓝',13,'北京',NULL), (5,'小黑',14,'北京',NULL);