我正在尝试从 MariaDB 迁移到 MySQL。当使用 Maven 第二次运行 liquibase 时,出现以下错误:
Table 'databasechangelog' already exists
这是maven插件配置:
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>4.23.0</version>
<configuration>
<driver>com.mysql.cj.jdbc.Driver</driver>
<changeLogFile>changelog.mysql.sql</changeLogFile>
<url>jdbc:mysql://localhost:3306/mysql</url>
<username>root</username>
<password>password</password>
</configuration>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>update</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
</plugin>
liquibase 不检查表是否存在吗?我发现了一些类似的问题,其中大小写敏感似乎是原因。我的数据库架构设置为
lower_case_table_names=1
。
创建新的数据库模式解决了该问题。 mysql空间无论如何都不应该被使用。
只是为了解释问题是什么及其解决方案,如果任何机构面临同样的问题。
Liquibase 将所有数据库更改保存到变更集中,为了记录已执行的变更集,Liquibase 维护一个表
databasechangelog
。
当建立一个新的数据库时,Liquibase首先创建
databasechangelog
表,然后开始执行变更集,并将最近执行的变更集的记录插入到databasechangelog
中。
将来,如果有任何变更集将运行,Liquibase 将插入变更集的记录。
在上面的问题中,Liquibase 正在尝试创建一个新的
databasechangelog
表,但由于它已经存在,因此导致错误。
一个可能的解决方案是删除数据库,它也会删除
databasechangelog
表,当 Liquibase 启动时,它将创建 databasechangelog
表的新实例。
从这里阅读有关
databasechangelog
表的更多信息。