You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JHipster集成MySQL首次启动失败:Liquibase表不合规报错

解决JHipster启动时Liquibase报错:"The table does not comply with the requirements by an external plugin"

问题重现

启动基于MySQL的JHipster应用时,Liquibase执行初始化SQL时抛出如下错误:

2019-07-30 09:55:40.583 ERROR 35895 --- [-service-task-1] i.g.j.c.liquibase.AsyncSpringLiquibase : Liquibase could not start correctly, your database is NOT ready: The table does not comply with the requirements by an external plugin. [Failed SQL: INSERT INTO compose.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('00000000000001', 'jhipster', 'config/liquibase/changelog/00000000000000_initial_schema.xml', NOW(), 1, '8:c5bfc567913b118109a43e981cd02883', 'createTable tableName=jhi_user; createTable tableName=jhi_authority; createTable tableName=jhi_user_authority; addPrimaryKey tableName=jhi_user_authority; addForeignKeyConstraint baseTableName=jhi_user_authority, constraintName=fk_authority_name, ...', '', 'EXECUTED', NULL, NULL, '3.6.3', '4491329886')]
liquibase.exception.DatabaseException: The table does not comply with the requirements by an external plugin. [Failed SQL: INSERT INTO compose.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, `DESCRIPTION`, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('00000000000001', 'jhipster', 'config/liquibase/changelog/00000000000000_initial_schema.xml', NOW(), 1, '8:c5bfc567913b118109a43e981cd02883', 'createTable tableName=jhi_user; createTable tableName=jhi_authority; createTable tableName=jhi_user_authority; addPrimaryKey tableName=jhi_user_authority; addForeignKeyConstraint baseTableName=jhi_user_authority, constraintName=fk_authority_name, ...', '', 'EXECUTED', NULL, NULL, '3.6.3', '4491329886')]
at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:356)
...
Caused by: java.sql.SQLException: The table does not comply with the requirements by an external plugin.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
...

错误原因分析

这个错误的核心是你的MySQL服务器启用了某个外部插件,而Liquibase自动创建的DATABASECHANGELOG表不符合该插件的强制规则。常见的触发场景包括:

  • 存储引擎插件(如Percona TokuDB):部分存储引擎对表结构有特殊要求,比如TokuDB可能要求表必须有单一列主键,而Liquibase的DATABASECHANGELOG默认使用(ID, AUTHOR, FILENAME)复合主键,触发了插件的校验规则。
  • 高可用插件(如MySQL Group Replication):Group Replication要求所有参与复制的表必须有主键,虽然DATABASECHANGELOG有复合主键,但部分版本的插件可能对复合主键的支持存在兼容性问题。
  • 安全/审计插件:某些安全插件会强制要求表满足特定规范,比如指定的字符集、排序规则,或者禁止使用某些数据类型。

解决方案

根据不同的插件场景,你可以尝试以下几种解决办法:

  • 检查并调整MySQL插件配置

    1. 登录MySQL执行SHOW PLUGINS;命令,确认启用了哪些外部插件。
    2. 如果是TokuDB这类存储引擎插件:可以在JHipster的application.yml中添加liquibase.parameters.storageEngine: InnoDB,指定DATABASECHANGELOG表使用InnoDB存储引擎;或者调整插件参数允许复合主键的表。
    3. 如果是Group Replication:确保MySQL版本与插件版本兼容,或者手动为DATABASECHANGELOG表添加一个自增单一主键列。
  • 手动创建符合要求的DATABASECHANGELOG表
    在应用启动前,手动登录MySQL创建DATABASECHANGELOG表,确保其结构满足插件要求。比如添加一个自增主键列:

    CREATE TABLE compose.DATABASECHANGELOG (
      ID VARCHAR(255) NOT NULL,
      AUTHOR VARCHAR(255) NOT NULL,
      FILENAME VARCHAR(255) NOT NULL,
      DATEEXECUTED DATETIME NOT NULL,
      ORDEREXECUTED INT NOT NULL,
      MD5SUM VARCHAR(255),
      `DESCRIPTION` VARCHAR(255),
      COMMENTS VARCHAR(255),
      EXECTYPE VARCHAR(10) NOT NULL,
      CONTEXTS VARCHAR(255),
      LABELS VARCHAR(255),
      LIQUIBASE VARCHAR(20) NOT NULL,
      DEPLOYMENT_ID VARCHAR(10),
      CHANGELOG_ID INT AUTO_INCREMENT PRIMARY KEY, -- 添加单一主键
      PRIMARY KEY (ID, AUTHOR, FILENAME)
    );
    

    启动应用时,Liquibase会识别已存在的表并跳过创建步骤。

  • 临时禁用冲突插件
    如果该插件不是当前启动阶段必须的,可以临时禁用它(修改MySQL配置文件后重启服务),待Liquibase完成数据库初始化后再重新启用插件。

  • 升级Liquibase或MySQL版本
    部分旧版本的Liquibase与MySQL插件存在兼容性问题,尝试升级Liquibase到最新稳定版(调整JHipster项目pom.xml或build.gradle中的依赖版本),或者升级MySQL到兼容的版本。

内容的提问来源于stack exchange,提问作者freecouch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:42:25