当前位置: 首页 > 知识库问答 >
问题:

liquibase不生成表DATABASECHANGELOG

金阳曜
2023-03-14

我是liquibase的新手,我想在生产中的数据库上使用它。这是一个很小的应用程序,但我不想手工创建模式,而是想使用更专业的东西,比如LiquiBase。

我计划做的是在生产中的当前模式和新模式之间为新应用程序准备一个changelog。我已经遵循了许多教程,但仍然缺少一些东西。输出changelog.xml总是导入所有模式,并且与现有模式没有区别。我看到liquibase必须创建表DATABASECHANGELOG,但我在计算机上看不到它们。

我所做的:

  • 生产中当前数据库的转储和在开发计算机上的导入
  • 从core project添加了liquiBase.properties并启动了以下命令:mvn clean resources:resources liquiBase:generateChangelog
  • 这生成了一个包含所有模式的master.xml,但没有在DB中创建表databaseChangeloglog(表DATABASECHANGELOGLOCK是在注释outputChangeLogFile时创建的,锁定的值为0)
  • 从http://www.liquibase.org/databases.html手动创建DATABASECHANGELOG
  • 重新运行命令mvn liquibase:generateChangelog。仍然一无所获

pom.xml:

<dependencies>
    ...
    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
        <version>3.5.3</version>
    </dependency>
    <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.17</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
</dependencies>

 <!-- edited build after 1st comment. Still got the problem -->
<build>
    <plugins>
        <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>${liquibase.version}</version>
            <configuration>
                <promptOnNonLocalDatabase>true</promptOnNonLocalDatabase>
                <changeLogFile>${project.build.directory}/classes/changelog/db.changelog-master.xml</changeLogFile>
                <propertyFile>src/main/resources/liquibase.properties</propertyFile>
            </configuration>
        </plugin>
    </plugins>
</build>

<!--- old section build, left for history purpose --->
<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>${liquibase.version}</version>
                <configuration>
                    <promptOnNonLocalDatabase>true</promptOnNonLocalDatabase>
                    <changeLogFile>${project.build.directory}/classes/changelog/db.changelog-master.xml</changeLogFile>
                    <propertyFile>src/main/resources/liquibase.properties</propertyFile>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

LiquiBase.properties:

url=jdbc:mysql://localhost:3306/my_db
username=user
password=pass
driver=com.mysql.jdbc.Driver
outputChangeLogFile=src/main/resources/liquibase/master.xml
[INFO] ------------------------------------------------------------------------
[INFO] Building -CORE 0.0.2
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- liquibase-maven-plugin:3.5.3:generateChangeLog (default-cli) @ EDI-CORE ---
[INFO] ------------------------------------------------------------------------
[INFO] Parsing Liquibase Properties File
[INFO]   File: src/main/resources/liquibase.properties
[INFO]   'classpath' in properties file is not being used by this task.
[INFO] ------------------------------------------------------------------------
[INFO] Executing on Database: jdbc:mysql://localhost:3306/my_db
[INFO] Generating Change Log from database root@localhost @ jdbc:mysql://localhost:3306/my_db (Default Schema: edi)
INFO 17/01/17 15:01: liquibase: src\main\resources\liquibase\master.xml exists, appending
WARNING 17/01/17 15:01: liquibase: MySQL does not support a timestamp precision of '19' - resetting to the maximum of '6'
WARNING 17/01/17 15:01: liquibase: MySQL does not support a timestamp precision of '19' - resetting to the maximum of '6'
WARNING 17/01/17 15:01: liquibase: MySQL does not support a timestamp precision of '19' - resetting to the maximum of '6'
[INFO] Output written to Change Log file, src/main/resources/liquibase/master.xml
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

共有1个答案

曾英睿
2023-03-14

据我所知(我也是新手),表DATABASECHAGELOG和DATABASECHANGELOGLOCK是由update选项创建的:mvn liquibase:update

 类似资料:
  • 我想从我的changelog文件生成一个SQL文件,该文件只包含databasechangelog表,并在其中插入数据库的当前状态。在liquibase文档中有一篇文章(http://www.liquibase.org/2015/07/without-a-connection.html),其中写道,您可以将设置为,但在我的例子中它不起作用。我的属性文件如下所示: 但是,当我通过命令行使用时,它生成

  • 因此不需要总是从生成的变更日志中删除该属性是很好的。

  • case-0-3.sql: 我在进行任何更改之前标记数据库: 之后,我在每个文件应用后应用文件和标记数据库: 求求你,救命。可能有人在sql或其他格式中使用回滚操作?哪里错了?我做错了什么?它是工作液基功能吗?

  • 我想把liquibase介绍到我的项目中,首先,我想根据我的hibernate实体生成一个changelog文件。 感谢你的帮助.

  • 我还可以为不同的DBs生成不同的变更集,只要它在相同的migration.xml中即可 有什么办法可以做到这一点吗?

  • 使用liquibase可以从现有数据库生成changelog吗? 我希望每个表生成一个xml changelog(不是每个create table语句都在一个changelog中)。