Mysql遷移工具在生產環境下的使用

科技小先鋒發表於2017-11-14

在產品迭代開發釋出過程中,由於業務需求的增加,資料庫難免會有結構調整等操作.

在每個版本釋出過程中怎麼控制每個版本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,如需轉載請自行聯絡原作者


相關文章