WSO2 Identity Server 7版本运行MySQL NDB集群脚本报错求助
解决WSO2 Identity Server 7在MySQL NDB集群中执行数据库脚本的问题
问题1:IDV_CLAIM表外键约束创建失败(错误1296、1215)
原因
MySQL NDB集群存在硬性限制:当子表包含BLOB或TEXT类型列时,不允许外键约束配置ON DELETE CASCADE,这直接触发了外键创建失败的错误。
解决步骤
- 打开
<ISKM_CARBON_HOME>/dbscripts/identity/mysql-cluster.sql,定位到创建IDV_CLAIM表的语句 - 移除该表外键定义中的
ON DELETE CASCADE子句 - 如果业务需要级联删除逻辑,可通过应用层代码实现,或创建符合NDB集群要求的触发器替代(注意NDB对触发器的支持有限,需提前测试)
- 保存修改后的脚本,重新执行
问题2:创建API_ID_NAME_INDEX时提示SCOPE表不存在(错误1146)
原因
- 脚本中创建索引的语句在
SCOPE表的创建语句之前执行,导致索引创建时目标表未初始化 - 脚本中指定的数据库名
this_is_from_Node1与实际使用的数据库不匹配,或表名大小写不符合NDB集群的配置规则
解决步骤
- 检查脚本中
SCOPE表的创建位置,确保CREATE TABLE SCOPE语句在创建API_ID_NAME_INDEX索引的语句之前执行 - 将脚本中的
this_is_from_Node1.SCOPE替换为实际使用的WSO2 IS数据库名称 - 查看NDB集群的
lower_case_table_names配置,确保脚本中的表名大小写与集群配置一致(若配置为1,表名会自动转为小写,需将脚本中的SCOPE改为小写scope)
内容的提问来源于stack exchange,提问作者user666
相关产品推荐
相关产品推荐

