새로운 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;
참고 자료:
- https://mariadb.com/kb/en/library/xtradbinnodb-strict-mode/
- https://mariadb.com/kb/en/library/innodb-system-variables/#innodb_strict_mode
- https://mariadb.com/kb/en/library/myisam-storage-formats/#fixed-length
- https://mariadb.com/kb/en/library/innodb-storage-formats/
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
'programing' 카테고리의 다른 글
도커 MariaDB/Mysql 덤프 (0) | 2022.10.19 |
---|---|
MySQL의 연산자 <=>는 무엇입니까? (0) | 2022.10.19 |
Ubuntu에 mysql-server를 설치하는 방법 (0) | 2022.10.19 |
Vue Google 차트 사용 - Geochart.데이터 변경 시 차트가 새로고침되지만 범례가 삭제됩니다. (0) | 2022.10.19 |
pkg_resources라는 이름의 모듈이 없습니다. (0) | 2022.10.10 |