2
我越瞭解flyway對數據庫遷移的影響,我越喜歡它。flyway mysqldump遷移
我試圖讓遷飛閱讀從mysqldump的-d產生的遷移和我偶然發現了一些奇怪的行爲。
在主頁上,它說
DDL通過mysqldump的出口可以在遷飛路線遷移不變地使用。
我的經驗是有點不同。 你如何使用mysqldump與flyway生成的文件?
我是想:
我嘗試用
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 */;
依此類推。
我有遷徙路線設置(簡單的彈簧集成),並且拿起文件。 然而,它沒有做任何事情(不執行SQL):
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
)遷徙路線只執行刪除表,之後停止。
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。我的想法是從生產數據庫中提取DDL並將其用作所有環境的基礎。如果我正確理解你,這是行不通的。這是否意味着我將不得不爲單元測試和V1和所有其他版本生產單獨的腳本。它是否正確? – David 2013-03-15 08:26:10
您可以清理轉儲以使其與H2兼容,並確保將來的遷移使用與兩個DB兼容的語法。或者選擇更好的選擇:在開發環境中使用mysql,並刪除您的產品環境的另一個區別。 – 2013-03-15 10:30:45
這就是我現在所做的,謝謝!我清理了MySQL轉儲。不過,將它轉移到MySQL是有道理的。 – David 2013-03-15 16:32:28