programing

새로운 DB 버전에서 이전 Flyway 마이그레이션이 비활성화되는 경우 어떻게 처리합니까?

kingscode 2022. 10. 19. 21:17
반응형

새로운 DB 버전에서 이전 Flyway 마이그레이션이 비활성화되는 경우 어떻게 처리합니까?

몇 년 전에 이전 버전의 MariaDB에 성공적으로 적용된 Flyway 마이그레이션이 있습니다.

MariaDB의 새로운 릴리스는 더 엄격해지고 동일한 마이그레이션에서 오류가 발생합니다.베이스라인에서 신규 실행(CI 환경 또는 신규 개발자의 노트북 구축 등)과 기존 모든 데이터베이스(새로운 MariaDB 릴리스로 업그레이드하기 전) 모두에 대해 수정해야 할 문제가 있습니다.

올바른 해결책은 무엇입니까?

  • 이행을 변경하고 새로 생성된 DB의 경우 사실상 불가능하지만 기존 DB를 수정할 수 있는 동일한 수정(다른 ALTER TABLE...)을 수행하는 새로운 이행을 추가합니다.
  • 문제가 해결된 마이그레이션 버전이 고장 나기 직전에 잘못된 순서로 새 마이그레이션 버전을 추가합니다.이행이 중단되기 직전에 새로운 DB가 적용되고 새로운 이행 전에 기존 설치가 적용되기를 바랍니다.

구체적으로 말하면, 문제는 원래 사용하던 테이블을 마이그레이션하는 것이었습니다.ENGINE=MyISAM ROW_FORMAT=FIXED로.ENGINE=InnoDB--MariaDB 10.1은 그것을 받아들입니다만, 새로운 MariaDB 릴리스는, 제가 추가하지 않는 한 실패하는 것 같습니다.ROW_FORMAT=DEFAULT.


베이스라인

CREATE TABLE FOO ( ... )
   ENGINE=MyISAM ROW_FORMAT=FIXED;

이후의 이행

ALTER TABLE FOO
  ENGINE=InnoDB;

이 후자의 문장은 새로운 MariaDB 릴리즈에서는 실패합니다(MySQL의 경우도 마찬가지입니다만, 잘 모르겠습니다).

단, 이 스테이트먼트는 유효합니다.

ALTER TABLE FOO
  ENGINE=InnoDB ROW_FORMAT=DEFAULT;

이 문제는 앞의 문장이 내부적으로 다음과 같은 처리를 시도하지만 실패한다는 것입니다.

CREATE TABLE FOO ( ... )
   ENGINE=InnoDB ROW_FORMAT=FIXED;

이 문제를 해결하는 가장 좋은 방법은 아마도 이행을 신중하게 수정하고flyway repair데이터베이스의 체크섬을 디스크의 새 체크섬과 다시 정렬합니다.

InnoDB에는 ROW_FORMAT=RESS가 없습니다.이전 버전에서는 변수 innodb_mode가 0으로 설정되어 있으며, 이 경우 경고가 발생하며 변환 시 ROW_FORMAT=LOSE가 사용됩니다.

ALTER TABLE FOO ENGINE=InnoDB;
Query OK, 0 rows affected, 1 warning (0.07 sec)    
Records: 0  Duplicates: 0  Warnings: 1

mysql [localhost] {msandbox} (test) > SHOW WARNINGS;
+---------+------+--------------------------------------+
| Level   | Code | Message                              |
+---------+------+--------------------------------------+
| Warning | 1478 | InnoDB: assuming ROW_FORMAT=COMPACT. |
+---------+------+--------------------------------------+

새로운 버전에서는 innodb_strict_mode가 1로 설정되어 있기 때문에 오류가 반환됩니다.

ALTER TABLE FOO ENGINE=InnoDB;
ERROR 1005 (HY000): Can't create table `test`.`FOO` (errno: 140 "Wrong create options")

오래된 동작을 복제하기 위해 세션 기간 동안 변수0 을 설정할 수 있습니다.

set innodb_strict_mode=0;

참고 자료:

Setup mariadb 10.1 to strict mode let me export and import the data on mariadb 10.3

wrong create table options error message is gone.

set innodb_strict_mode=0;

https://mariadb.com/kb/en/innodb-strict-mode/

ReferenceURL : https://stackoverflow.com/questions/55928783/how-to-handle-a-previous-flyway-migration-becoming-invalid-in-newer-db-versions

반응형