DB Migration 数据库版本管理工具 学习笔记

来源:互联网 发布:unix网络编程源码下载 编辑:程序博客网 时间:2024/05/16 12:57

一.什么是DB Migrations

二.DB Migratoins的使用

三.补充(异常)

 

一.什么是DB Migrations

    DB Migrations是一个开源的用于DB版本控制的命令行工具。LinuxWindows都可以使用

    Migrations 通过生成统一的DDL脚本模板,在目标DB中记录版本信息和当前状态,使得多人开发团队可以在多个DB环境上井然有序的工作,为敏捷和迭代开发提供强有力的技术保障。并且常用命令不到10个。   

 

二.DB Migratoins的使用

2.1 Migration的安装

由于没有装翻墙软件,所以可以在csdn下一个:http://download.csdn.net/detail/lkmtao/8140901

然后配置环境变量,/etc/profile文件中加入(Windows系统相应的加入环境变量即可,下面是Linux加入环境变量)

<span style="font-size:14px;">JAVA_HOME=/home/saas/jdk1.8/jdk1.8.0_45MIGRATIONS_HOME=/home/saas/migrations/mybatis-migrations-3.2.0PATH=$JAVA_HOME/bin:$MIGRATIONS_HOME/bin:$PATHCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport JAVA_HOMEexport PATHexport CLASSPATH</span>

重启即可。

 

2.2 Migration的使用

2.2.1 初始化。使用 migrate init --path=你的文件夹路径 。如下图 图2.1 初始化图:

                             

                                                                                图2.1 初始化图

 

    有时候会初始化失败,也会遇到一些sql异常,一般来说,sql异常是你的配置没有配好。

    初始化之后,Migration会给我们创建3个文件夹,如图 2.2 Migrations自动创建文件夹图:

                                                                   

 

他们分别用来存放DB驱动,各个环境DB连接参数和DB变更脚本。

    然后,把项目实际使用的DB驱动复制到drives下。打开environments目录,编辑development.properties为Migrations指定开发环境DB的连接参数,修改时区为time_zone=GMT+8:00

 

2.2.2 实际的使用

    对于数据库的全部操作,都需要通过这个工具,不能我们直接用SQL客户端操作数据库,或者用phpmyadmin操作数据库都是不可以的。举例,当我需要更新数据库的时候。

1. 使用migrate new "xxx" 命令,表示的意思是告诉Migration需要更新数据库,并且让Migration为我们产生sql脚本模板。其中 xxx 相当于注释,比如说A程序员加入了什么表,或者修改了什么东西。如下图2.3 添加修改图

                                     

2.3 添加修改图

    执行完之后,会在你的目录的scripts中产生一个sql文件。如下图 2.4 增加sql脚本图

                                        

图 2.4 增加sql脚本图

    2.可以看到上图的右侧有刚才添加了 20150523194934_whc_add_table_user5.sql.打开可以看到图2.5 sql脚本图1

                                                          

2.5 sql脚本图1

那么,我们就可以往第一个空白处填我们修改的东西的sql脚本。第二个空白出回滚的东西的sql脚本。两个都必须填,必然没办法更新和回退。

    比如说,我这样填写了:

<span style="font-size:14px;">-- // whc add table user3-- Migration SQL that makes the change goes here.DROP TABLE IF EXISTS `user3`;/*!40101 SET @saved_cs_client     = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `user3` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` char(10) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;</span><p>-- //@UNDO</p><p>-- SQL to undo the change goes here.</p><p>--<span style="font-family:文泉驿点阵正黑;">记得要填你的回滚代码,这里我测试省略了</span></p>

3.填好之后,就可以让Migration帮我们操作数据库,更新我们的数据库,命令为 migrate up 如下图 2.6更新数据库图:

                                   

图 2.6更新数据库图

    这样就是一个流程了,观察你的数据库就知道更新了。

    Psmigrate up 后面可以接一个号码,也就是说更新到哪一个版本,默认是全部都更新了。同理,也有migrate down这个命令,可以回到以前的数据库版本。

 

2.3 Migrationsql脚本的导出

    导出的话使用如下格式的命令:

migrate script 20130614164456 20130709163435 > release20130710.sql

    migrate script 固定,第一个是你之前的版本,第二个是你之后的版本,比如说我需要110之间的版本。最后就是导出的文件。

例如,如下图2.7 sql版本图:

                                    

2.6 sql版本图

    如上图,补充一点,migrate status可以查看我们的数据库版本,有一个pending标示的,就是你还有一个没有更新。上图没有,表示已经是最新版了。

    在上图中,第一个版本是20150523093948,最后一个版本是20150523194934,就可以利用最后一个命令生成总的sql文件了。生成的total.sql文件可以看下,如下:

<span style="font-size:14px;">-------------------------------------------------------------------------- MyBatis Migrations - script-------------------------------------------------------------------------- 20150523093949_first_migration.sql--  First migration.-- Migration SQL that makes the change goes here.DROP TABLE IF EXISTS `user`;/*!40101 SET @saved_cs_client     = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` char(10) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO CHANGELOG (ID, APPLIED_AT, DESCRIPTION) VALUES (20150523093949, '2015-05-23 20:10:16', 'first migration');-- 20150523094355_whc_add_table_user.sql--  whc add table user-- Migration SQL that makes the change goes here.DROP TABLE IF EXISTS `user1`;/*!40101 SET @saved_cs_client     = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `user1` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` char(10) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO CHANGELOG (ID, APPLIED_AT, DESCRIPTION) VALUES (20150523094355, '2015-05-23 20:10:16', 'whc add table user');--....</span>

好长,就不一一列举出来了。

 

三.补充

有时会报ScripRunner的报错,如下图 3.1 Migration异常图:

                                      

图 3.1 Migration异常图

    

    ScripRunner的报错是需要在目录中执行migrate命令,暂时不知道为什么。比如说上面,我所在的目录是scripts,需要退回db1

 

2.有时会报sqlRunner的错误,这个是因为你的environments中的development.properties没有配置好。比如说,连接的数据库名字写错了,用户名密码错了等等这些。

3.只能通过Migraton操作数据库,不然没有记录,以后就可能会出错。

4.那么和别人的同步怎么办,这个migraton并不能帮你解决。只能通过svn上传下载相互的sql文件,然后再利用这个migration来进行更新。




0 0
原创粉丝点击