【问题标题】:liquibase does not generate table DATABASECHANGELOGliquibase 不生成表 DATABASECHANGELOG
【发布时间】:2017-06-01 15:35:17
【问题描述】:

我是 liquibase 的新手,我想在生产中的数据库上使用它。 这是一个小型应用程序,但我不想手动创建架构,而是使用更专业的东西,例如 liquibase。

我打算做的是在生产中的当前模式和为新应用程序准备好的新模式之间制作一个变更日志。我已经学习了很多教程,但仍然缺少一些东西。输出 changelog.xml 始终导入所有架构,并且与现有架构没有区别。我看到 liquibase 必须创建表 DATABASECHANGELOG,但我在计算机上看不到它们。

我做了什么:

  • 在生产中转储当前数据库并在开发计算机上导入
  • 从核心项目添加 liquibase.properties 并启动以下命令:mvn clean resources:resources liquibase:generateChangeLog
  • 这生成了一个包含所有架构的master.xml,但没有在DB中创建表DATABASECHANGELOG(注释outputChangeLogFile时创建了表DATABASECHANGELOGLOCK,LOCKED值为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

注意:注释 outputChangeLogFile 使 liquibase 创建了表 DATABASECHANGELOGLOCK,但只有这个。

maven 输出:

[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] ------------------------------------------------------------------------

【问题讨论】:

  • 您正在使用&lt;pluginManagement&gt;,有关行为的解释和修复,请参阅链接问题。
  • 我现在已经更改了这部分(参见编辑的 pom.xml),但问题仍然存在:没有创建表
  • Liquibase 提供了从当前工作数据库自动生成模式的工具,在您的情况下它是生产。您只需将工具指向您的数据库,它就会为您创建架构。 stackoverflow.com/questions/12449824/…检查这个解决方案。

标签: java maven liquibase


【解决方案1】:

检查您的配置,如果路径是相对路径。如果标签中的路径值错误,liquibase不会报错,但不会执行sql脚本。

【讨论】:

    【解决方案2】:

    您当前的问题似乎是:

    [我跑的时候]

    mvn clean resources:resources liquibase:generateChangeLog

    [为什么] liquibase 不生成表 DATABASECHANGELOG?

    这个问题的答案是 DATABASECHANGELOG 表被 Liquibase 用来跟踪哪些变更日志已应用于当前表,因此它仅在 update 和类似命令期间创建。命令generateChangeLog 不会运行任何更改日志,因此无需在DATABASECHANGELOG 中创建任何条目。

    我怀疑这可能不是您的根本问题。你为什么关心 Liquibase 是否创建DATABASECHANGELOG

    这个问题是否被编辑过多次?这里的很多答案都没有解决目前的问题。

    我想知道您的真正问题是否更像是“当已经存在一些现有架构时,我如何使用 Liquibase 来管理架构更改”?如果是这样,教程页面“How to set up Liquibase with an Existing Project and Multiple Environments”会在某种程度上回答这个问题。

    GL!

    【讨论】:

      【解决方案3】:

      Liquibase 通过变更日志和变更集工作。它首先尝试定位主变更日志文件,然后按顺序执行该文件中提到的变更集。如果您指定了任何数据库连接,则 Liquibase 将使用该凭据,如果没有,则您可以指定 liquibase 数据库凭据。

      请参阅 liquibase 的 spring boot 文档以获取属性列表 - https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#data-migration-properties

      liquibase 属性示例

        liquibase:
          change-log: classpath:db/changelog/db.changelog-master.xml
          enabled: true
          drop-first: false
          liquibase-tablespace: 
          liquibase-schema: 
          default-schema: 
      

      【讨论】:

        【解决方案4】:

        由于您在属性文件中指定了 outputChangeLogFile,因此 Liquibase 正在尝试根据您指定的连接为您创建 (via liquibase:generateChangeLog)。尝试在您的 liquibase.prperties 中使用 changeLogFile

        url=jdbc:mysql://localhost:3306/my_db
        username=user
        password=pass
        driver=com.mysql.jdbc.Driver
        changeLogFile=src/main/resources/liquibase/master.xml
        

        【讨论】:

          【解决方案5】:

          它不支持'19'timestamp 精度是关于MySQL 中的Data Type

          MySQL 不支持您的Data Type 列用于您的Entity

          【讨论】:

            【解决方案6】:

            仔细检查您的文件是否缩进良好,以及您是否正确编写了诸如 changeSet 之类的标签

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2020-10-12
                • 1970-01-01
                • 2021-01-13
                • 2017-07-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多