(此文档仅供参考)
问题现象
连接mysql8.0作为知识库,空库启动后报错:Multiple primary key defined
问题原因
smartbi部署在空库启动的时候,会先创建表执行create table, 然后去ALTER TABLE ADD CONSTRAINT PRIMARY KEY添加(联合)主键,例如:
//创建用户角色表 create table tx_user_role(c_userid varchar(255) binary not null,c_roleid varchar(255) binary not null) ENGINE = InnoDB //添加主键 ALTER TABLE tx_user_role ADD CONSTRAINT tx_user_role_pk PRIMARY KEY (c_userid,c_roleid);
而MYSQL8.0.30之后增加了一个新特性sql_generate_invisible_primary_key,会在创建表时自动为表生成一个不可见的主键。在开启了此设置项后,此时创建的表已经有一个隐式生成的主键,那么再次通过ALTER TABLE尝试显式地添加或修改主键时,MySQL 会报错,因为它不允许一个表有多个主键。
解决方案
1、检查MySQL的配置文件是否配置了sql_generate_invisible_primary_key=1,如有可注释/删除掉此行代码,重启MySQL。
修改路径:编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改。
如果找不到my.cnf可以通过“mysql --help | grep my.cnf ”命令去寻找my.cnf文件。Linux下该文件在/etc/下,查找my.cnf文件相关命令:find / -name "my.*"
2、再重新空库部署启动smartbi服务验证。