==[数据库DevOps]MySQL、Hudson、Gradle、Maven和Git实现数据库DevOps

//
使用MySQL、Hudson、Gradle、Maven和Git实现数据库DevOps
http://www.infoq.com/cn/articles/mysql-hudson-gradle-maven-git-devops

你可以开发自己的解决方案,或者使用像Flyway这样的框架。后续的章节里,我们会演示一个例子,在一个完整的构建中使用Flyway,整合了Maven、Gradle、Git和Hudson。

Flyway所执行的Oracle和MySQL脚本都能在SQL*Plus和其他Oracle兼容工具中执行(在替换了占位符之后)。Flyway有多种执行方式,包括Maven插件、Gradle或Ant,它还可以通过命令行来执行。接下来,让我们将注意力集中到Flyway的MySQL支持上。


DevOps概述
DevOps描述了一些让软件交付过程更顺畅的实践,强调让生产到开发的反馈更加顺畅,并缩短生产周期(就是从开始到交付的时间)。DevOps不仅让你能更快交付软件,还能帮助你开发成质量更高的软件,这更符合个性化需求和基本条件。
DevOps试图让开发和运维找到一致的目标、概念和工具,通过这些东西(怎么做)让两者的协作更为顺畅(为什么)。
DevOps能让组织的障碍最小化。“一个团队”的做法,让敏捷实践延伸到了运维中。开发和运维的专家现在都是“开发人员”了,也就意味着正他们紧密协作,在一同“开发”解决方案。
DevOps针对了多个不同的活动和方面。
多个活动和方面
DevOps包含了多个活动和方面,例如:
文化,这个概念强调人要胜过流程和工具。软件是由人开发,服务于人的。

自动化,这是DevOps能快速获得反馈的基础。
度量,DevOps找到了明确的度量方法,质量和共同的(起码是对等的)动机是关键。
分享,这创造了交换思想、知识和经验的平台。

为了定义并带成数据库DevOps的概念,最好能分清四个不同的领域。图2展示了DevOps的领域矩阵。领域1是将开发延伸到运维中,在数据库方面,常见的例子是将变化脚本放入版本控制系统,并且开发和运维都用相同的数据库迁移工具,比如Flyway,我们后续会讲到这个工具。
领域2是将运维延伸到开发中。对数据库DevOps而言,这意味着在生产系统里提供锁定行、阻塞查询和资源竞争等方面的可视化信息。
领域3是将开发嵌入到运维中。比如针对非功能性需求设置约束和共同目标。举些例子来说明共同目标,80%数据库搜索要在2秒钟内返回结果显示到屏幕上(共同的性能目标);系统中不能使用任何会妨碍从一个Linux发行版迁移到另一个发行版的技术(共同的可移植性目标);数据库要在保持性能目标的前提下,在特定硬件上保存两千万会员信息(共同的容量目标);必须要有针对所有组件的自动化测试,包括基础设施代码(共同的可维护性目标)。
领域4是将运维嵌入到开发中。这可以增强两者的协作,比如让开发能够在不牵扯数据库管理员的前提下访问数据,这就能避免DBA成为看门人。


自动发布数据库。自动发布数据库时有一个比较高难度的挑战,就是如何将数据库的当前版本(即当前的结构元素,比如表、字段及其数据),也可以说是当前状态,与组成本次完整发布的其他部分的当前版本关联起来。通过把数据库元素纳入版本控制,你可以创建标签(tags,通常也被称为标记[labels]),把所有配置项添加到一个规定的基线里。
要自动部署数据库变更,就需要有一套流程,它能支持增量应用数据库变更,同时还要保持当前的结构和内容。目前有不少方法都能更新现有数据库,他们都有如下共同的活动:
将所有代码和数据库元素(所有变更集)纳入版本控制。

创建用于将数据库推进至下一版本和回滚到上一版本的SQL脚本。这些脚本要放到一个变更集里。
调研一下是否需要回滚机制。可以通过提速开发流程来避免增加复杂性,打补丁(hot fix)也是个不错的策略。
针对每个变更集创建一个文件,在里面放置对应的变更内容。给文件一个唯一的名字,其中包含数字编号。变更集推动数据库向前或向后变化,而且变更集都是运用在一个基线上的。因此,一个变更集中的具体内容可能和上一个变更集里的内容是矛盾的,换言之,每个变更集都包含了多条SQL语句。为了管好一个特定的变更集,最好用一个文件而非多个文件,这能更好地实施基于任务的开发。
打造基线,其中会冻结应用程序的所有配置项,包含数据库元素。
为部署获取基线。在完整安装的情况下,要基于数据库元素的初始基线,运行所有增量变更集。在增量安装的情况下,检查特定数据库的当前状态(版本号),运行该版本之后的所有新变更集(之前没有运行过的)。
确保部署过程是从版本控制中获取基线的。把数据库变更集放到专门的工作目录里。
保存数据库版本。一种方法是使用那些持有元信息的数据表,特别是数据库表结构的版本。此外,还可以为要执行的SQL脚本或回滚脚本创建一些字段,这样Shell脚本就能使用数据库里保存的信息来执行变更或者回滚。
计划通过监控来最小化平均修复时间(MTTR,mean time to repair)、平均检测时间(MTTD,mean time to detect),还要计划执行冒烟测试。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容