flyway数据库管理

最近学习新项目时,数据库使用flyway进行管理的,以前并没哟使用过,第一次遇到有点懵,因而了解了一下。java

官方文档git

简介

flyway是一款数据库迁移工具,在开发中,数据库须要迁移到不少不一样的环境,开发环境,测试环境,生产环境等等。sql

clipboard.png

经过备份来迁移数据库,你根本不知道你如今的数据库处于哪一个状态,数据库升级脚本有没有执行成功,执行到了哪一步这些信息都不知道,在代码上有git能够进行版本控制,可是在数据库咱们却没有什么很好的方式进行数据库版本管理和迁移。数据库

使用flyway,就能够跟踪数据库版本的改变,明确数据库处于那个状态,而且以肯定的方式从数据库的当前版本迁移到新版本。app

原理

当你使用flyway时,它会在数据库寻找一个历史版本的表,通常表名是schema_version,若是没有flyway会建立这么一个表,专门用来管理数据库的版本信息。工具

clipboard.png

紧接着flyway会扫描类路径或文件系统下面的文件,能够是sql文件或java程序,根据版本号排序并执行。学习

clipboard.png

每执行一个版本时,flyway都会在schema_version表中记录下此次升级,以后再执行中,对与表里已经存在的版本,下一次就不会再执行了。测试

clipboard.png

经过这种方式,咱们能够指定数据库的版本,而且每次数据库版本升级的信息都储存在数据库里,升级的内容是执行的sql文件,这样以来就能够追踪数据库版本的改变,迁移也都是自动完成。spa

使用中遇到的问题

一开始不熟悉flyway,一遇到未知的问题就只能还原备份,后来我才发现,我遇到的flyway错误,通常都是运行的sql文件会与数据库已经确立的结构冲突,flyway遇到这种错误状况,就取消此次版本的升级,而且记录此次版本升级失败。
好比当我执行这个1.3.0的数据库升级,想要在apply表中添加一个check_status字段:版本控制

clipboard.png

可是执行时却失败了,控制台的报错是这样的:

clipboard.png

它明确的告诉了失败的缘由,错误sql脚本的位置、语句等,惋惜我以前都没注意到。
这里的失败是apply已经有一列check_status了,因此再添加一列相同的字段就会出错。能够把apply的这个字段删除就成功经过了。

在schema_version表中明确记录此次执行是失败的,success字段为0.

clipboard.png

这样出错了就能够去查看排除,而不是一味地还原数据库了。

总结

如今有愈来愈多强大的工具,合理运用能够帮助咱们开发。

相关文章
相关标签/搜索