Liquibase 与 MySQL 导致“表‘databasechangelog’已存在”错误

问题描述 投票:0回答:2

我正在尝试从 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 maven liquibase
2个回答
0
投票

创建新的数据库模式解决了该问题。 mysql空间无论如何都不应该被使用。


0
投票

只是为了解释问题是什么及其解决方案,如果任何机构面临同样的问题。

Liquibase 将所有数据库更改保存到变更集中,为了记录已执行的变更集,Liquibase 维护一个表

databasechangelog

当建立一个新的数据库时,Liquibase首先创建

databasechangelog
表,然后开始执行变更集,并将最近执行的变更集的记录插入到
databasechangelog
中。

将来,如果有任何变更集将运行,Liquibase 将插入变更集的记录。

在上面的问题中,Liquibase 正在尝试创建一个新的

databasechangelog
表,但由于它已经存在,因此导致错误。

一个可能的解决方案是删除数据库,它也会删除

databasechangelog
表,当 Liquibase 启动时,它将创建
databasechangelog
表的新实例。 从
这里
阅读有关databasechangelog表的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.