问题描述
使用MyCat1.6.7.6 + MySQL 8.0.25 部署 水平分表 ER 分表时,子表插入数据,抛出如下异常:
ERROR 1064 (HY000): can't find (root) parent sharding node for sql:INSERT INTO....
上面抛出异常为 找不到父节点,GitHub有类似的文章GitHub,但是我的插入不是在同一个事物中插入的,但是出现了这个问题,MySQL和MyCat配置如下:
## 订单表
CREATE TABLE orders(
id INT AUTO_INCREMENT,
order_type INT,
customer_id INT,
amount DECIMAL(10,2),
PRIMARY KEY(id)
);
## 订单详情
CREATE TABLE orders_detail(
id INT AUTO_INCREMENT,
detail VARCHAR(2000),
order_id INT,
PRIMARY KEY(id)
);
MyCat schema.xml 配置如下
<table name="orders" dataNode="dn1,dn2" rule="mod_rule">
<childTable name="orders_detail" primaryKey="id" joinKey="order_id" parentKey="id" />
</table>
解决如下
修改 MyCat schema.xml 并重启
## autoIncrement: 开启主键自增策略
## fetchStoreNodeByJdbc: 启用ER表使用JDBC方式获取DataNode
<table name="orders" dataNode="dn1,dn2" rule="mod_rule" autoIncrement="true" fetchStoreNodeByJdbc="true">
<childTable name="orders_detail" primaryKey="id" joinKey="order_id" parentKey="id" />
</table>
重启MyCat 重新测试数据插入 即可