DB Migration 数据库版本管理工具 学习笔记
来源:互联网 发布:unix网络编程源码下载 编辑:程序博客网 时间:2024/05/16 12:57
一.什么是DB Migrations
二.DB Migratoins的使用
三.补充(异常)
一.什么是DB Migrations
DB Migrations是一个开源的用于DB版本控制的命令行工具。Linux和Windows都可以使用
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更新数据库图
这样就是一个流程了,观察你的数据库就知道更新了。
Ps:migrate up 后面可以接一个号码,也就是说更新到哪一个版本,默认是全部都更新了。同理,也有migrate down这个命令,可以回到以前的数据库版本。
2.3 Migration的sql脚本的导出
导出的话使用如下格式的命令:
migrate script 20130614164456 20130709163435 > release20130710.sql
migrate script 固定,第一个是你之前的版本,第二个是你之后的版本,比如说我需要1到10之间的版本。最后就是导出的文件。
例如,如下图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来进行更新。
- DB Migration 数据库版本管理工具 学习笔记
- Deltasql 数据库版本管理工具学习笔记
- 我的Laravel学习之路之migration Laravel自带命令行数据库创建和管理工具
- 【技术支持】各种数据库DB管理工具
- 添加数据库版本,单元测试不通过,报DB Migration 348 does not have a test. Please add one!
- 数据库版本管理工具flyway
- 数据库版本管理工具flyway
- 数据库版本管理工具Flyway
- 数据库版本管理工具-flyway
- 数据库版本管理工具Flyway
- git版本管理工具学习
- Rails学习笔记(2) ————migration(数据库迁移)
- 数据库迁移/数据库版本管理(Database Migration/VCS for database)
- process migration(进程迁移) 学习笔记
- Git学习(一) 版本管理工具
- Git学习(一) 版本管理工具
- Git版本管理工具的学习
- 版本管理工具学习随笔(一)
- java常用设计模式
- 2015.5.23-5.24大连之行
- Matlab聚类分析_层次聚类+kmeans聚类等
- apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法
- Metaio SDK 6.0.2自带Example自己实现(一)
- DB Migration 数据库版本管理工具 学习笔记
- DP-MinAbsSum
- Spring JdbcTemplate框架(一)——基本原理
- 机器学习-线性回归
- git学习
- kyeremal-poj1113-Wall-凸包
- 设计模式之Strategy Pattern
- java面向对象_概述
- 【iOS开发】iOS常见设计模式简介