데이터베이스 마이그레이션을 위해 플라이 웨이가 어떻게 작동하는지 이해할수록 좋아집니다.flyway mysqldump migration
나는 flyway에서 mysqldump -d에서 생성 된 마이그레이션을 읽으려고하고 있는데 이상한 행동을 발견했습니다. 홈페이지에
그것은 mysqldump를 내 보낸
DDL은 철새 이동 경로의 이동에 변경 사용할 수 있습니다 말한다.
내 경험이 약간 다릅니다. flyway에서 mysqldump가 생성 한 파일을 어떻게 사용합니까?
내가하려고했던 :
내가이 일을 수행하고 나에게 이런 식으로 뭔가를 보이는 파일을 제공
mysqldump -h host --user=user -p -d --hex-blob databasename > V1__Basic.sql
를 사용하여 DDL을 받고 시도 (예 그것은이다 Activiti의 데이터베이스 스키마) :
-- MySQL dump 10.13 Distrib 5.5.28, for osx10.6 (i386)
--
-- Host: host Database: database
-- ------------------------------------------------------
-- Server version 5.5.27-log
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @[email protected]@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `ACT_GE_BYTEARRAY`
--
DROP TABLE IF EXISTS `ACT_GE_BYTEARRAY`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ACT_GE_BYTEARRAY` (
`ID_` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '',
`REV_` int(11) DEFAULT NULL,
`NAME_` varchar(255) COLLATE utf8_bin DEFAULT NULL,
`DEPLOYMENT_ID_` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`BYTES_` longblob,
`GENERATED_` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`ID_`),
KEY `ACT_FK_BYTEARR_DEPL` (`DEPLOYMENT_ID_`),
CONSTRAINT `ACT_FK_BYTEARR_DEPL` FOREIGN KEY (`DEPLOYMENT_ID_`) REFERENCES `ACT_RE_DEPLOYMENT` (`ID_`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `ACT_GE_PROPERTY`
--
DROP TABLE IF EXISTS `ACT_GE_PROPERTY`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
등등.
나는 flyway 설정 (간단한 스프링 통합)을 가지고 있으며 파일을 선택하고 있습니다.
INFO @ 14 Mar 2013 22:34:41,646 @ com.googlecode.flyway.core.command.DbMigrate - Current version of schema "PUBLIC": << Empty Schema >>
INFO @ 14 Mar 2013 22:34:41,647 @ com.googlecode.flyway.core.command.DbMigrate - Migrating schema "PUBLIC" to version 1
DEBUG @ 14 Mar 2013 22:34:41,649 @ com.googlecode.flyway.core.command.DbMigrate - Successfully completed and committed migration of schema "PUBLIC" to version 1
DEBUG @ 14 Mar 2013 22:34:41,651 @ com.googlecode.flyway.core.command.DbMigrate - Finished migrating schema "PUBLIC" to version 1 (execution time 00:00.002s)
내가 첫번째 SQL 문 앞에 모든 행을 제거 할 경우 (DROP TABLE
) 이동 경로는 드롭 테이블을 실행하고 나중에 중지 : 그러나 그것은 아무것도 (어떤 SQL이 실행되지 않습니다)하지 않습니다.
DEBUG @ 14 Mar 2013 22:34:41,698 @ com.googlecode.flyway.core.dbsupport.SqlScript - Found statement at line 1: DROP TABLE IF EXISTS `ACT_GE_BYTEARRAY`
DEBUG @ 14 Mar 2013 22:34:41,698 @ com.googlecode.flyway.core.dbsupport.SqlScript - Executing SQL: DROP TABLE IF EXISTS `ACT_GE_BYTEARRAY`
DEBUG @ 14 Mar 2013 22:34:41,700 @ com.googlecode.flyway.core.command.DbMigrate - Successfully completed and committed migration of schema "PUBLIC" to version 1.1
DEBUG @ 14 Mar 2013 22:34:41,700 @ com.googlecode.flyway.core.command.DbMigrate - Finished migrating schema "PUBLIC" to version 1.1 (execution time 00:00.004s)
나는 CREATE TABLE
이동 경로까지 모든
ERROR @ 14 Mar 2013 22:45:01,270 @ com.googlecode.flyway.core.command.DbMigrate - Caused by org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "CREATE TABLE ""ACT_GE_BYTEARRAY"" (
""ID_"" VARCHAR(64) COLLATE[*] UTF8_BIN NOT NULL DEFAULT '',
어떻게 내가 좋아하는 무언가의 이동 경로에 mysqldump에의 출력을 얻을 수있는 구문을 좋아하지 않는 제거하면? 많은 분들께 감사드립니다!
테스트 및 프로덕션 용 MySQL과 유닛 테스트 용 H2가 있습니다. 내 생각은 생산 DB에서 DDL을 추출하여 모든 환경의 기초로 사용하는 것이 었습니다. 내가 너를 올바르게 이해한다면 이것은 효과가 없다. 이것은 V1 및 다른 모든 버전 모두에 대해 단위 테스트 및 생산을위한 별도의 스크립트가 있어야한다는 것을 의미합니까? 이 올바른지? – David
H2와 호환되도록 덤프를 정리하고 차후의 마이그레이션이 두 DB와 호환되는 구문을 사용하도록하십시오. 또는 더 나은 옵션을 찾으십시오 : dev에있는 mysql을 사용하고 다른 환경을 제거하십시오. –
그게 바로 내가 끝내 준 것입니다, 감사합니다! 나는 MySQL 덤프를 청소했다. 하지만 앞으로는 이것을 MySQL로 옮기는 것이 합리적입니다. – David