mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

1、mysql提供了高效的数据导入命名 load data infile:
基本语法:
load data  [low_priority] [local] infile 'file_name txt' [replace | ignore]
into table tbl_name
[fields
[terminated by't']
[OPTIONALLY] enclosed by '']
[escaped by'\' ]]
[lines terminated by'n']
[ignore number lines]
[(col_name,   )]
具体说明请参考网上的一篇博客:http://blog.****.net/u014082714/article/details/53173975

2、示例环境
基于mycat1.6分支,es_seller_community(ER分片字表)
演示的表结构如下:
CREATE TABLE `es_seller_community` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `seller_id` int(11) DEFAULT NULL COMMENT '商家ID',
  `community_id` int(11) DEFAULT NULL COMMENT '小区ID',
  `status` int(11) DEFAULT NULL COMMENT '预留字段',
  `comu_type` int(11) DEFAULT '1' COMMENT '小区服务类型:1-显示,2-配送',
  PRIMARY KEY (`id`),
  KEY `inx_es_seller_community_csid` (`seller_id`,`community_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=25195 DEFAULT CHARSET=utf8 COMMENT='商户服务小区表';

该表作为es_seller的字表(ER分片),ER分片配置如下:

mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

3、导入步骤
1、将es_seller_community数据导出txt文件。本例使用Navicat for Mysql 工具进行导出
1)在es_seller_community表上右键,点击【导出向导】
mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)
2)设置需要导出的表以及存放路径

mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

3)选项导出的列:

mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

4)设置记录分割符与字段分割符,对应load data infile语法中的(fileds,line分隔符定义),一般默认即可。

mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

然后下一步,点击完成即可。
导出的文件数据如下:
mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

2、连接mycat,导入数据
# mysql -u root -p -P 8066 // 回车输入密码登录
# use es_db;                        //切换到schema,也可以使用show database;查看mycat定义的schema。
load data local infile 'data/es_community_sku.txt' into table es_community_sku;
mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

错误日志:

mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

修复代码:

mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

mycat1.6 报如下错误,跟踪代码发现,mycat1.6在处理数据迁移时留下一个小小的bug,如果是全局表,或非分片表,table标签上的rule属性为空,此处会报空指针,修复代码如下:

mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

如果是发行版的话,源码修复代码后,将编译成jar包,放入mycat安装目录下的lib目录下即可。
修复后,继续执行命令
load data local infile 'data/es_community_sku.txt' into table es_community_sku;
mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

继续跟踪日志:

mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

上面的错误提示我们,在往分片表插入数据时,insert 字段中要显示包括分片字段,也就是
 insert into es_community_sku(id,sku_id,community_id,goods_id,seller_id)  values (1,1,1,1),
load data infile语句可以显示字段:
# load data local infile 'data/es_community_sku.txt' into table es_community_sku(id,sku_id,community_id,goods_id,seller_id);
导入成功后的提示信息:
mycat1.6使用案例----load data file使用示例(ER分片字表数据导入)

这样数据将会自动分片,路由到指定的节点。

myact load data infile 数据导入就介绍到这里。

错误日志信息:
1、ERROR 3009 (HY000):  服务器可能出现了空指针异常。
2、ERROR 2013 (HY000): Lost connection to MySQL server during query;服务端报错,该类错误一般是不符合mycat的操作规范,比如在往ER分片字表出插入数据时需要指定分片键等等。