2014-02-27 85 views
0

如果您正在開發服務器上而且正在開發生產服務器,那麼將開發服務器上發生的任何數據庫更改遷移到活動服務器的最佳方法是什麼?開發vs生產數據庫

我的基本是PHP和CI

+0

爲您所做的任何數據庫更改創建升級腳本,然後將它們全部在活動服務器上運行。 –

+0

看看http://stackoverflow.com/questions/225772/compare-two-mysql-databases。有一些工具可以在兩個環境之間自動同步數據庫模式。 – qux

+0

http://stackoverflow.com/questions/8418814/db-migration-tool-liquibase-or-flyway/ –

回答

0

遷移和移民管理爲DB-代碼版本的變更管理一個龐大而複雜的問題。沒有短的帖子可以巧妙地解決它,但在這裏我去...

通常,如果您使用像Eloquent或框架的ORM他們有一個遷移機制,如果架構和模型代碼更新,您運行遷移開發數據庫。然後,當您實時推送該代碼時,可以在實時服務器上運行該代碼。

正如對您的文章發表評論所指出的,存在許多第三方工具,但對於大多數基本情況,您可以使用簡單的遷移文件來管理更改。但是,如果您對數據庫進行非代碼相關更改(如索引更改或數據添加/刪除),工具很有用。這裏是MySQL自己的工具:http://www.mysql.com/products/workbench/migrate/

現在我假設你使用的是某種版本控制,所以如果你不是帶有內置遷移支持工具的orm,那麼你可以簡單地保留一個sql遷移腳本的目錄手動給出提交級別的代碼。將開發分支代碼合併到生產分支並推送時,在生產數據庫上運行遷移alter table腳本。這些腳本應該包含所有更改和手動插入。然後,您可以保留一個遷移表並跟蹤您運行的遷移腳本。

對於獎勵積分,您可以創建遷移的回滾版本。通過這種方式,您可以在返回到之前的代碼版本之前申請(因爲您可能需要回滾生產版本來處理錯誤或其他問題)。然後,如果沒有合作伙伴回滾,請不要進行遷移。

例如,如果我添加新的屬性的用戶類,地址2:

migration_1_add_address_2_to_user.sql;

alter table user add column address2 varchar(64); 

rollback_1_add_address_2_to_user.sql

alter table user drop column address2; 

祝您好運!