Flyway에서 MySQL 사용
flyway에서 MySQL를 연결하기까지 고난을 정리하고자 합니다.
flyway란 오픈소스 데이터베이스 마이그레이션 도구입니다.
실서버에서 데이터베이스의 구조가 변경하면, 위험요소가 너무 큽니다.
구조가 바뀜으로 서버에 오류가 발생할 수도 있습니다. 그렇기 때문에, Git처럼 형상관리를 하고자 사용하는 툴입니다.
1. 라이브러리 문제
문제 발생
Caused by: org.flywaydb.core.api.FlywayException: Unsupported Database: MySQL 8.0
발생 이유
Flyway는 특정 버전에서 MySQL의 일부 버전만 지원해서 Flyway와 MySQL의 버전을 맞춰야 합니다.
해결 방법
1. Flyway 버전 변경(❌)
MySQL 8.0을 사용하고 있는 데,
flyway -v // flyway 버전 확인

공식 사이트에 들어가면, flyway가 제공해 주는 버전이 나옵니다.


MySQL은 8.0으로 제한된 테스트 기능을 사용할 수 있다고 나옵니다.
저는 기존에 8.0으로 사용하고 있어서 문제가 8.0에 있는 줄 알고 업그레이드를 진행했습니다.
아래와 같은 MySQL 버전 변경하는 방법을 거쳐서 변경해 줍니다.
MySQL 버전 변경
- 기존에 돌리고 있는 MySQL 종료
- MySQL의 Data와 my.ini 백업 C:\ProgramData\MySQL\MySQL Server 8.0\Data 에 존재
- 다른 버전 MySQL 설치 https://downloads.mysql.com/archives/community/
- 설치 후, 환경 변수 설정
- 기존 데이터 복구
- MySQL 실행
기대를 품고 다시 실행한 결과
Caused by: org.flywaydb.core.api.FlywayException: Unsupported Database: MySQL 8.1
이번에는 8.1에서 문제 생긴 것을 알 수 있습니다.
2. flyway-mysql 라이브러리 추가(⭕)
공식 사이트에 검색해 본 결과, flyway-mysql 의존성을 추가해야 한다고 합니다.
친절하게 Flyway 10.7.0부터는 MariaDB 드라이버는 더 이상 기본적으로 MySQL URL을 허용하지 않는다고 합니다. MySQL를 사용하려면 따로 flyway-mysql 라이브러리를 추가 해야 한다고 나옵니다.

Gradle 설정
/* flyway */
implementation 'org.flywaydb:flyway-core'
implementation 'org.flywaydb:flyway-mysql'
2. Flyway 마이그레이션 실패
문제 발생
Caused by: org.flywaydb.core.api.exception.FlywayValidateException: Validate failed: Migrations have failed validation
발생 이유
- 쿼리문 잘못 작성
- flyway_schema_history 실패로 인한 실행 불가
- 데이터베이스 불일치
해결 방법
저의 경우에는 이미 success = 0 이 발생하여서 발생한 문제였습니다.
SELECT * FROM flyway_schema_history WHERE success = 0;

필드명을 바꾸는 와중에 필드명이 맞지 않았는 데, 수정하고 돌리니 이미 데이터베이스에 flyway가 적용되어서 실행된 flyway를 DELETE 하고 새로운 쿼리를 작성해야 합니다.
드디어 성공한 모습입니다.

Flyway를 적용하는 데 시간이 많이 발생했습니다. 긴 여정이었지만, 해결하고 정상적으로 돌아가는 모습을 보니 너무 뿌듯하다는 생각이 들었습니다.
참고 사이트
Flyway 공식 사이트: https://documentation.red-gate.com/flyway/getting-started-with-flyway/system-requirements/supported-databases-and-versions
MySQL 공식 사이트: https://downloads.mysql.com/archives/community/
stackOverflow: https://stackoverflow.com/questions/72711770/flyway-unsupported-database-mysql-8-0
'서버' 카테고리의 다른 글
| CI/CD란? (0) | 2023.10.04 |
|---|---|
| 젠킨스(Jenkins) VS GitHub Actions (1) | 2023.09.26 |
| [Nginx] Windows / Linux 명령어 (0) | 2022.06.04 |
| 외부접근 가능한 port 열기 (0) | 2022.04.14 |