Mysql遷移工具在生產環境下的使用
在產品迭代開發釋出過程中,由於業務需求的增加,資料庫難免會有結構調整等操作.
在每個版本釋出過程中怎麼控制每個版本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檔案,改檔案格式如下:
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,如需轉載請自行聯絡原作者
相關文章
- 在生產環境使用Docker部署應用Docker
- Java列舉類在生產環境中的使用方式Java
- ForkJoinPool在生產環境中使用遇到的一個問題
- 如何在生產環境執行容器
- 在生產環境中使用預寫日誌WAL的SQLite - victoriaSQLite
- 【機器學習】在生產環境使用Kafka構建和部署大規模機器學習機器學習Kafka
- CentOS(7.6)環境下遷移Mysql(5.7)的data目錄到指定位置CentOSMySql
- 生產環境資料遷移問題彙總
- DB遷移RAC環境
- 單例模式在生產環境jedis叢集中的應用單例模式
- ApacheStorm官方文件——在生產環境中執行拓撲ApacheORM
- 給在生產環境下給php安裝apc加速擴充套件指令碼PHP套件指令碼
- Windows和Linux系統下的Conda環境遷移WindowsLinux
- 如何建立 Angular library 並在生產環境中消費Angular
- Kubernetes使用者指南(三)–在生產環境中使用Pod來工作、管理部署
- 雲端設計平臺Coohom在生產環境中使用istio的經驗與實踐
- JeecgBoot 如何在生產環境關閉 Swagger 文件bootSwagger
- 使用 WebSphere CloudBurst 進行應用程式環境遷移(一)WebCloud
- 使用 WebSphere CloudBurst 進行應用程式環境遷移(二)WebCloud
- 不同場景下 MySQL 的遷移方案MySql
- MongoDB系列三:Replica Sets在生產環境中安裝配置的注意事項MongoDB
- 【譯】生產環境下的Node.js——開源監控工具Node.js
- 如何一步步在生產環境上部署django和vueDjangoVue
- 【Swagger】2.不在生產環境暴露,可以修改預設地址Swagger
- 使用可傳輸表空間向rac環境遷移資料
- 生產環境搭建MySQL複製的教程MySql
- [原]不同場景下MySQL的遷移方案MySql
- Win環境至Linux環境Oracle資料庫遷移全過程LinuxOracle資料庫
- 使用 TensorFlow Extended (TFX) 在生產環境中部署機器學習 丨 Google 開發者大會 2018機器學習Go
- 如何在生產環境排查 Rust 記憶體佔用過高問題Rust記憶體
- [譯] Node.js 之戰: 如何在生產環境中除錯錯誤Node.js除錯
- 關於使用 Vagrant 作為開發環境,MySQL 資料庫資料存放目錄遷移的問題開發環境MySql資料庫
- Mac環境下MySQL的安裝和基本命令的使用MacMySql
- Windows環境下刪除MySQLWindowsMySql
- 生產環境中MySQL複製的搭建KPMySql
- 在生產環境中,阿里雲如何構建高效能雲原生容器網路?(含 PPT 下載)阿里
- 測試環境的遷移式升級和資料整合
- RedHat 7.2配置LAMP環境下的redius+mysql+openvpn環境RedhatLAMPMySql