在产品迭代开发发布过程中,由于业务需求的增加,数据库难免会有结构调整等操作.

在每个版本发布过程中怎么控制每个版本server端程序与数据库版本保持一致,以及数

据库升级、回滚等操作.

本博文宅鸟将向大家推荐一款mysql数据库迁移工具mysql-php-migrations

由于具体需求不同,宅鸟根据自己公司的情况将mysql-php-migrations做了一些修改来满应用!

宅鸟修改改程序后的mysql迁移程序有以下目录:

config 配置文件

dbscript sql脚本目录

lib 迁移程序类库

migrate.php 迁移命令执行入口

执行php migrate.php

可以看到如下结果

我们可以看到migrate.php有很多命令

php migrate.php add  test

结果:

__ __         __      __

|\/|  (_ /  \|   __ |__)|__||__) __ |\/|. _  _ _ |_. _  _  _

|  |\/__)\_\/|__    |   |  ||       |  ||(_)| (_||_|(_)| )_)

/                                    _/

******************************************************************** v2.0.1 ***

New migration created: file

/var/www/mysqlMigrations/dbscript/2013_12_18_14_50_45_test.php

*******************************************************************************

cd dbscript

total 16

-rw-r--r-- 1 www-data www-data 4837 Sep 29 09:21 2013_06_18_17_14_16_v1.php

-rw-r--r-- 1 www-data www-data  802 Sep 29 13:29 2013_09_29_12_00_12_v1.php

-rw-r--r-- 1 root     www-data  240 Dec 18 14:50 2013_12_18_14_50_45_test.php

此时dbscript目录已经新添加一个2013_12_18_14_50_45_test.php文件,改文件格式如下:

<?php

class Migration_2013_12_18_14_50_45 extends MpmMysqliMigration

{

public function up(ExceptionalMysqli &$mysqli)

{

$mysqli->exec("DO 0");

}

public function down(ExceptionalMysqli &$mysqli)

{

$mysqli->exec("DO 0");

}

}

?>

把需要修改的数据库脚本写在up函数中:

把对应修改修改所做的回滚操作卸载down函数中

注意:在生产环境下建议只做数据库的向上变迁,不做down操作,避免用户有用数据丢失.

执行php migrate.php list 返回结果:

WARNING: Migration numbers may not be in order due to interleaving.

#         Timestamp

========================================================================

version           createtime              active  current note

1371546856        2013-06-18 17:14:16     1       0       v1

1380427212        2013-09-29 12:00:12     1       1       v1

1387349445        2013-12-18 14:50:45     0       0       test

Page 1 of 1, 3 migrations in all.

cd config 目录

cat db_config.php

<?php

$db_config = (object) array();

$db_config->host = '127.0.0.1';

$db_config->port = '3306';

$db_config->user = 'dbuser';

$db_config->pass = 'dbpasswd';

$db_config->name = 'dbname';

$db_config->db_path = 'var/www/mysqlMigrations/dbscript/';

$db_config->method = 2;   //1 pdo,2 mysqli

?>

了解该程序基本结构后,我们来开始使用一下它:

cd mysqlMigrations

php migrate.php add test2

在dbscript下生成 2013_12_18_15_06_14_test2.php

执行命令:php migrate.php list

可以看到版本结果:

#         Timestamp

========================================================================

version           createtime              active  current note

1371546856        2013-06-18 17:14:16     1       0       v1

1380427212        2013-09-29 12:00:12     1       1       v1

1387349445        2013-12-18 14:50:45     0       0       test

1387350374        2013-12-18 15:06:14     0       0       test2

Page 1 of 1, 4 migrations in all.

说明:

version 每次迁移的版本号

createtime 创建时间

active  是否已经激活生效

current 数据库当前所在版本标志

note  迁移的注释

执行命令:php migrate.php up 1387349445   可以把数据版本从 1380427212 迁移到 1387349445

#         Timestamp

========================================================================

version           createtime              active  current note

1371546856        2013-06-18 17:14:16     1       0       v1

1380427212        2013-09-29 12:00:12     1       0       v1

1387349445        2013-12-18 14:50:45     1       1       test

1387350374        2013-12-18 15:06:14     0       0       test2

Page 1 of 1, 4 migrations in all.

执行命令:php migrate.php down 1380427212        可以把数据版本从 1387349445 回滚到 1380427212

执行php migrate.php list查看数据库版本回滚结果

#         Timestamp

========================================================================

version           createtime              active  current note

1371546856        2013-06-18 17:14:16     1       0       v1

    1380427212        2013-09-29 12:00:12     1       1       v1

1387349445        2013-12-18 14:50:45     0       0       test

1387350374        2013-12-18 15:06:14     0       0       test2

Page 1 of 1, 4 migrations in all.

如果要迁移到数据库最大版本可以执行一下命令:

php migrate.php up max_version

返回结果:

Migrating to 2013-12-18 15:06:14 (ID 1387350374)...

Performing UP migration 2013-12-18 14:50:45 (ID 1387349445)... done.

Performing UP migration 2013-12-18 15:06:14 (ID 1387350374)... done.

*******************************************************************************

查看php migrate.php list

#         Timestamp

========================================================================

version           createtime              active  current note

1371546856        2013-06-18 17:14:16     1       0       v1

1380427212        2013-09-29 12:00:12     1       0       v1

1387349445        2013-12-18 14:50:45     1       0       test

1387350374        2013-12-18 15:06:14     1       1       test2

Page 1 of 1, 4 migrations in all.

执行回滚:

php migrate.php down 1380427212

返回一下结果:

Migrating to 2013-09-29 12:00:12 (ID 1380427212)...

Performing DOWN migration 2013-12-18 15:06:14 (ID 1387350374)... done.

Performing DOWN migration 2013-12-18 14:50:45 (ID 1387349445)... done.

#         Timestamp

========================================================================

version           createtime              active  current note

1371546856        2013-06-18 17:14:16     1       0       v1

1380427212        2013-09-29 12:00:12     1       1       v1

1387349445        2013-12-18 14:50:45     0       0       test

1387350374        2013-12-18 15:06:14     0       0       test2

Page 1 of 1, 4 migrations in all.

通过执行一下操作,查看数据库中数据变化

Mysql迁移工具在生产环境下的使用的更多相关文章

  1. mysql在生产环境下有大量锁表,又不允许重启的情况下的处理办法

    mysql在生产环境下有大量锁表,又不允许重启的情况下的处理办法 满头大汗的宅鸟该怎么办呢? mysql -u root -e "show processlist"|grep -i ...

  2. 四步法分析定位生产环境下MySQL上千条SQL中的问题所在

    第一步:通过以下两种方式之一来打开慢查询功能 (1)方式一:通过修改mysql的my.cnf文件 如果是5.0或5.1等版本需要增加以下选项: log-slow-queries="mysql ...

  3. 生产环境下,MySQL大事务操作导致的回滚解决方案

    如果mysql中有正在执行的大事务DML语句,此时不能直接将该进程kill,否则会引发回滚,非常消耗数据库资源和性能,生产环境下会导致重大生产事故. 如果事务操作的语句非常之多,并且没有办法等待那么久 ...

  4. 生产环境下JAVA进程高CPU占用故障排查

    问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过, ...

  5. 一次生产环境下MongoDB备份还原数据

    最近开发一个版本的功能当中用到了MongoDB分页,懒于造数据,于是就研究了下从生产环境上导出数据到本地来进行测试. 研究了一下,发现MongoDB的备份还原和MySQL语法还挺类似,下面请看详细介绍 ...

  6. 生产环境下JAVA进程高CPU占用故障排查---temp

    问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过, ...

  7. 生产环境下lnmp的权限说明

    https://www.cnblogs.com/zrp2013/p/4183546.html 有关权限说明:-rwxrw-r‐-1 root root 1213 Feb 2 09:39 50.html ...

  8. Python开发程序:生产环境下实时统计网站访问日志信息

    日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...

  9. 生产环境下一定要开启mysqlbinlog

    在没有备份数据库的情况下,可以用binlog进行恢复 在生产环境下安全第一,损失一点点效率换来的安全还是值得的. http://www.cnblogs.com/zc22/archive/2013/06 ...

随机推荐

  1. ubuntu 配置TFTP和NFS

    1.安装软件包 sudo apt-get install tftpd tftp xinetd 2.建立配置文件 在/etc/xinetd.d/下建立一个配置文件tftp sudo vi /etc/xi ...

  2. 为什么选择 Yeoman 及 Yeoman 的安装

    今天向您介绍一个我刚接触到的比较新的网络前端开发工具: Yeoman . 什么是Yeoman? Yeoman是Google的团队和外部贡献者团队合作开发的一个项目.通过内部三个工具(yo,grunt, ...

  3. .NET中使用Memcached的相关资源整理(转)

    Memcached官方站点:http://www.danga.com/memcached/ Memcached Win32 1.2.6下载:http://code.jellycan.com/memca ...

  4. java学习___File类的查看和删除

    一.查看目录下的子目录或文件 getName()获取文件或目录的名字 for(File file:files) 如果想看目录下的另外目录,引用递归调用,就是还要在获取的目录下再查看目录 二.如何删除一 ...

  5. nyoj 97 兄弟郊游问题

    点击打开链接 兄弟郊游问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 兄弟俩骑车郊游,弟弟先出发,每分钟X米,M分钟后,哥哥带一条狗出发.以每分钟Y米的速度去追弟弟 ...

  6. sopcinfo路径改变,nios工程该怎么办?

    操作系统:Win7 64 bit 开发环境:Quartus II 14.0 (64-Bit)  + Nios II EDS 14.0 使用Quartus 时,有时候出于备份的考虑,或者从网上下载别人的 ...

  7. 重设mysql的root密码,MAC OSX

    前些天装得mysql突然链接不上了,原谅我小白,没有在安装后改密码,mysql初始登陆不需要密码,但是之后root是有个临时密码的,然后..然后就登不上了. 网上有很多改密码的帖子,关键的UPDATE ...

  8. xutils 框架

    1. android快速开发框架xUtils xUtils简介 xUtils 包含了很多实用的android工具. xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵 ...

  9. C语言-删除重复字符

    //实现对一个字符串的删除重复的字符,并输出删除后的字符串,(如从”testroadeasy”中输出”tesroady”) Action(){    char *str="testroade ...

  10. 使用postman玩转接口测试

    (一)前言: 之前搞自动化接口测试,由于接口的特性,要验证接口返回xml中的数据,所以没找到合适的轮子,就自己用requests造了个轮子,用着也还行,不过就是case管理有些麻烦,近几天又回头看了看 ...