2016-12-14 20 views
7

Tôi đã cố gắng tìm ra giải pháp cho vấn đề dưới đây, nhưng không ai trong số họ làm việc cho tôi. Tôi đang phát triển Angular + Spring Boot ứng dụng sử dụng MySQL + đường bay. Vui lòng hướng dẫn những gì xảy ra ở đây.Gây ra bởi: org.flywaydb.core.api.FlywayException: Xác thực không thành công. Di cư Checksum không phù hợp cho việc di trú 2

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Validate failed. Migration Checksum mismatch for migration 2 
-> Applied to database : 1499248173 
-> Resolved locally : -1729781252 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1054) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:829) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) ~[spring-context-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:764) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE] 
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:357) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:305) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1124) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1113) [spring-boot-1.3.1.RELEASE.jar:1.3.1.RELEASE] 
    at com.boot.App.main(App.java:9) [classes/:na] 
Caused by: org.flywaydb.core.api.FlywayException: Validate failed. Migration Checksum mismatch for migration 2 
-> Applied to database : 1499248173 
-> Resolved locally : -1729781252 
    at org.flywaydb.core.Flyway.doValidate(Flyway.java:1108) ~[flyway-core-3.2.1.jar:na] 
    at org.flywaydb.core.Flyway.access$300(Flyway.java:62) ~[flyway-core-3.2.1.jar:na] 
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1012) ~[flyway-core-3.2.1.jar:na] 
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1006) ~[flyway-core-3.2.1.jar:na] 
    at org.flywaydb.core.Flyway.execute(Flyway.java:1418) ~[flyway-core-3.2.1.jar:na] 
    at org.flywaydb.core.Flyway.migrate(Flyway.java:1006) ~[flyway-core-3.2.1.jar:na] 
    at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66) ~[spring-boot-autoconfigure-1.3.1.RELEASE.jar:1.3.1.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] 
    ... 18 common frames omitted 

application.properties

logging.level.org.springframework.web=DEBUG 

server.port=8080 

spring.h2.console.enabled=true 
spring.h2.console.path=/h2 

## For H2 DB 
#spring.datasource.url=jdbc:h2:file:~/dasboot 
#spring.datasource.username=sa 
#spring.datasource.password= 
#spring.datasource.driver-class-name=org.h2.Driver 

## For MYSQL DB 
spring.datasource.url=jdbc:mysql://localhost:3306/dasboot 
spring.datasource.username=root 
spring.datasource.password=root 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

spring.datasource.max-active=10 
spring.datasource.max-idle=8 
spring.datasource.max-wait=10000 
spring.datasource.min-evictable-idle-time-millis=1000 
spring.datasource.min-idle=8 
spring.datasource.time-between-eviction-runs-millis=1 

flyway.baseline-on-migrate=true 
spring.jpa.hibernate.ddl-auto=false; 

#datasource.flyway.url=jdbc:h2:file:~/dasboot 
#datasource.flyway.username=sa 
#datasource.flyway.password= 
#datasource.flyway.driver-class-name=org.h2.Driver 


datasource.flyway.url=jdbc:mysql://localhost:3306/dasboot 
datasource.flyway.username=root 
datasource.flyway.password=root 
datasource.flyway.driver-class-name=com.mysql.jdbc.Driver 

pom.xml

<parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.1.RELEASE</version> 
    </parent> 

    <name>das-boot</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.flywaydb</groupId> 
      <artifactId>flyway-core</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
     </dependency> 
    </dependencies> 

V2__create_shipwreck.sql

-- For H2 DB 
--CREATE TABLE SHIPWRECK(
-- ID INT AUTO_INCREMENT, 
-- NAME VARCHAR(255), 
-- DESCRIPTION VARCHAR(2000), 
-- CONDITION VARCHAR(255), 
-- DEPTH INT, 
-- LATITUDE DOUBLE, 
-- LONGITUDE DOUBLE, 
-- YEAR_DISCOVERED INT 
--); 

CREATE TABLE `dasboot`.`shipwreck` (
    `ID` INT NOT NULL AUTO_INCREMENT, 
    `NAME` VARCHAR(255) NULL, 
    `DESCRIPTION` VARCHAR(2000) NULL, 
    `CONDITION` VARCHAR(255) NULL, 
    `DEPTH` INT NULL, 
    `LATITUDE` DOUBLE NULL, 
    `LONGITUDE` DOUBLE NULL, 
    `YEAR_DISCOVERED` INT NULL, 
    PRIMARY KEY (`ID`)); 

enter image description here

+0

Bản sao có thể có của [Đường dẫn trên cơ sở dữ liệu sản xuất - Kiểm tra không khớp di chuyển] (http://stackoverflow.com/questions/29920122/flyway-on-production-database-migration-checksum-mismatch) – Adam

Trả lời

15

Đường bay đang so sánh tổng kiểm tra tập lệnh SQL với mã kiểm tra trước đó. Ngoại lệ này thường xảy ra nếu bạn thay đổi một kịch bản lệnh SQL đã được áp dụng bởi Flyway, do đó gây ra sự kiểm tra không khớp.

Nếu điều này là phát triển, bạn có thể thả cơ sở dữ liệu của mình và bắt đầu di chuyển từ đầu.

Nếu bạn đang sản xuất, không bao giờ chỉnh sửa tập lệnh SQL đã được áp dụng. Chỉ tạo các tập lệnh SQL mới trong tương lai.

+0

Tôi chỉ cần di chuyển cơ sở dữ liệu từ H2 DB đến MYSQL. Sau đó, tôi chỉ cần cập nhật V2__create_shipwreck.sql. Vui lòng hướng dẫn cách tôi có thể giải quyết nó. Tôi đã chỉnh sửa V2__create_shipwreck.sql trong bài đăng ở trên. Ngay cả bảng đắm tàu ​​không được tạo trong MYSQL. –

+0

Thả cơ sở dữ liệu và chạy lại Flyway và nó sẽ xây dựng lại nó từ đầu. –

+0

Thả cơ sở dữ liệu? Nếu bạn có nhiều dữ liệu thử nghiệm? Thả không phải là giải pháp. Nó hoạt động nhưng nó không phải là cách khắc phục vấn đề. – Djalas

1

NẾU BẠN KHÔNG SẢN XUẤT, bạn có thể tìm trong số flywayTable trong cơ sở dữ liệu và xóa dòng có chứa tên của tập lệnh đã được áp dụng.

flywayTable là một lựa chọn dự án mà xác định tên của bảng trong db sử dụng bởi đường bay có chứa thông tin về các phiên bản của db này, đã áp dụng các kịch bản ...

4

Giải pháp tốt nhất là nên làm những bước:

  1. Xóa tệp có tên - V2__create_shipwreck.sql, làm sạch và tạo lại dự án.
  2. Chạy lại dự án, đăng nhập vào h2 và xóa bảng có tên "schema_version".

    bảng thả schema_version;

  3. Bây giờ, hãy tạo tệp V2__create_shipwreck.sql bằng ddl và chạy lại dự án.

  4. Đừng nhớ này, thêm phiên bản 4.1.2 cho đường bay lõi trong pom.xml như

    <dependency> 
        <groupId>org.flywaydb</groupId> 
        <artifactId>flyway-core</artifactId> 
        <version>4.1.2</version> 
    </dependency> 
    

Nó sẽ làm việc ngay bây giờ. Hy vọng điều này sẽ giúp.

+0

Tôi không thể xóa schema_version. tôi nên làm gì? – Pavel

1

Tôi chỉ đơn giản là xóa khỏi schema_version di chuyển/s mà lệch khỏi việc di chuyển được áp dụng. Bằng cách này bạn không vứt bỏ bất kỳ dữ liệu thử nghiệm nào mà bạn có thể có.

Ví dụ:

SELECT * from schema_version order by installed_on desc 

V_005_five.sql 
V_004_four.sql 
V_003_three.sql 
V_002_two.sql 
V_001_one.sql 

Migrations được áp dụng

V_005_five.sql 
* V_004_addUserTable.sql * 
V_003_three.sql 
V_002_two.sql 
V_001_one.sql 

Giải pháp ở đây là để xóa từ schema_version

V_005_five.sql 
V_004_four.sql 

khi bạn chạy đường bay nó sẽ chỉ tái áp dụng

V_005_five.sql 
* V_004_addUserTable.sql * 

schema_version mới sẽ

V_005_five.sql 
* V_004_addUserTable.sql * 
V_003_three.sql 
V_002_two.sql 
V_001_one.sql 

Hy vọng nó giúp

0

Cập nhật kỷ lục schema_version của bạn để mach giá trị "giải quyết cục bộ" mà trong trường hợp của bạn là -1729781252

0

Trên thực tế có một giải pháp khác , nhưng đó là một cách giải quyết, điều đó không nên được thực hiện trong một dự án được quản lý đúng cách. Tuy nhiên tôi đã gặp một tình huống, nơi mà nó không thể đi xuống con đường tốt hơn :)

Bạn có thể cập nhật bảng schame_version và thực sự thay đổi tổng kiểm tra sang bảng mới. Điều này sẽ làm cho quá trình di chuyển đi qua, nhưng có thể có các tác dụng phụ khác.

Khi triển khai vào các môi trường khác nhau (kiểm tra, uat, sản, vv) thì có thể xảy ra, bạn phải cập nhật cùng một kiểm tra trên nhiều môi trường hơn. Và khi nói đến gitflow, và giải phóng các chi nhánh, bạn có thể dễ dàng hòa trộn toàn bộ.

Các vấn đề liên quan