Flyway:简单的数据库迁移工具

flywaydb

Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate、clean、info、validate、baseline、repair等命令。它支持SQL(PL/SQL、T-SQL)方式和Java方式,支持命令行客户端等,还提供一系列的插件支持(Maven、Gradle、SBT、ANT等)。

主要特性

  • 普通SQL:纯SQL脚本(包括占位符替换)没有专有的XML格式,没有锁定。
  • 无限制:使用Java 代码来进行一些高级数据操作
  • 零依赖:只需运行在Java6(及以上)和数据库所需的JDBC驱动
  • 约定优于配置:迁移时,自动查找系统文件和类路径中的SQL文件或Java类
  • 高可靠性:在集群环境下进行数据库升级是安全可靠的
  • 云支持:完全支持 Microsoft SQL Azure, Google Cloud SQL& App Engine、Heroku Postgres 和 Amazon RDS
  • 自动迁移:使用Fly提供的API,让应用启动和迁移同时工作
  • 快速失败:损坏的数据库或失败的迁移可以防止应用程序启动
  • 数据库清理:在一个数据库中删除所有的表、视图、触发器,而不是删除数据库本身

支持的数据库

  • Oracle:10g及更新所有版本(包括 Amazon RDS)
  • SQL Server:2008及更新版本(包括 Amazon RDS)
  • SQL Azure:最新版本
  • MySQL:5.1及更新版本(包括 Amazon RDS & Google Cloud SQL)
  • MariaDB:10.0及更新版本(包括 Amazon RDS)
  • Phoenix:4.2.2及更新版本
  • PostgreSQL:9.0及更新版本(包括 Heroku & Amazon RDS)
  • Vertica:6.5及更新版本
  • AWS Redshift:最新版本
  • DB2:9.7及更新版本
  • DB2 z/OS:9.1及更新版本
  • Derby:10.8.2.2及更新版本
  • H2:1.2.137及更新版本
  • Hsql:1.8及更新版本
  • SQLite:3.7.2及更新版本
  • SAP HANA:最新版本
  • solidDB:6.5及更新版本
  • Sybase ASE:12.5及更新版本

工作原理

最简单的场景是当你用Flyway迁移到一个空数据库时。

emptydb

Flyway将会试图查找数据库中的元数据表(metadata table)。由于数据库是空的,Flyway 将不会查找,而是创建一个新元数据表。

现在数据库中将有一张名为SCHEMA_VERSION的表:

emptyschemaversion

此表将用于跟踪数据库的状态。

之后,使用Flyway进行迁移时将扫描系统文件或者应用的类路径中特定的文件,它们可以由SQL或Java编写。

然后Flyway将基于他们的版本号进行排序并依次执行:

migration-1-2

随着每次执行,对应地更新元数据表:

schema_version表
schema_version
元数据表的创建和初始化,我们现在可以讨论迁移到一个新的版本。

Fly进行迁移时会重新扫描系统文件或者应用的类路径中特定的文件,并且与元数据表进行校验,如果它们的版本号低于或等于当前标记的版本,它们将被忽略。

而高于标记的文件将等待迁移:状态为可用(available),但是未执行 。

pendingmigration

Flyway会将它们按照版本号进行排序并依次执行。

migration21

元数据表相应的更新:

schema_version表
schema_version2
就是如此简单!我们可以非常容易的创建一个高于当前标记版本的迁移文件,用来更新数据库,无论是表结构的变化或是数据的更新。下次Flyway开始迁移时,它会找到这个文件并相应更新数据库。

最新版本

可以从这里获取最新的下载,包括:

  • Command-line Tool
  • API
  • Maven Plugin
  • Gradle Plugin
  • Ant Tasks
  • SBT Plugin

Maven

通过Maven添加Flyway依赖可使用下面脚本:

Gradle

通过Gradle添加Flyway依赖:

了解Flyway

开发资源

官方网站:https://flywaydb.org/
开源地址:https://github.com/flyway/flyway

1 2 收藏

资源整理者简介:wangtg

简介还没来得及写 :) 个人主页 · 贡献了1个资源 · 1


直接登录
最新评论

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1439 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer