Mysql迁移工具在生产环境下的使用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

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

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

据库升级、回滚等操作.

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

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


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

144201680.jpg

config 配置文件

dbscript sql脚本目录

lib 迁移程序类库

migrate.php 迁移命令执行入口


执行php migrate.php

可以看到如下结果

144641751.jpg

我们可以看到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文件,改文件格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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

1
2
3
4
5
6
7
8
9
10
<?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.


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



本文转自birdinroom 51CTO博客,原文链接:http://blog.51cto.com/birdinroom/1342147,如需转载请自行联系原作者

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL8.0生产环境二进制标准安装
MySQL8.0生产环境二进制标准安装
|
6月前
|
关系型数据库 MySQL 数据库
rds迁移数据迁移工具选择
rds迁移数据迁移工具选择
240 3
|
3月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL5.7生产环境二进制标准安装
MySQL5.7生产环境二进制标准安装
|
Oracle 关系型数据库 MySQL
OceanBase 数据库的企业版提供了 Oracle 到 MySQL 的迁移工具
OceanBase 数据库的企业版提供了 Oracle 到 MySQL 的迁移工具
144 2
|
关系型数据库 MySQL Nacos
生产环境下的终极指南:在生产环境部署 Nacos 集群和高可用 MySQL 使用 Docker
生产环境下的终极指南:在生产环境部署 Nacos 集群和高可用 MySQL 使用 Docker
784 0
|
6月前
|
监控 关系型数据库 MySQL
MySQL Binlog实战:在生产环境中的应用与最佳实践【实战应用】
MySQL Binlog实战:在生产环境中的应用与最佳实践【实战应用】
288 0
|
安全 关系型数据库 MySQL
Mysql安全启动配置向导——mysql_secure_installation(生产环境必做的设置)
Mysql安全启动配置向导——mysql_secure_installation(生产环境必做的设置)
240 0
|
SpringCloudAlibaba 关系型数据库 MySQL
SpringCloud Alibaba学习(四):Linux版Nacos+MySQL生产环境配置
SpringCloud Alibaba学习(四):Linux版Nacos+MySQL生产环境配置
514 1
SpringCloud Alibaba学习(四):Linux版Nacos+MySQL生产环境配置
|
SQL 关系型数据库 MySQL
MySQL大无语事件:一次生产环境的死锁事故,看看我怎么排查
今天要分享的是在生产环境中出现的一次算得上比较诡异的死锁事件, 不过庆幸的是没有产生较大的业务损失.
|
存储 SQL 安全
【MySQL思考】触发器是否应该在生产环境中使用?
【MySQL思考】触发器是否应该在生产环境中使用?
351 0