2017-01-09 63 views
1

我正在開發一個Django應用程序,現在已經達到了設置我的部署過程的程度。我想盡可能地自動化,因此在數據庫管理方面尋求任何幫助。 正如我所看到的,這是我想要自動化的流程的粗略概要: 1.備份當前服務器上的數據庫 2.合併開發和部署數據庫的結構以便僅保留數據在部署數據庫但更新結構以匹配開發數據庫用於將開發mysql數據庫合併到Django應用程序的部署mysql數據庫的腳本

我已經考慮過簡單地將所有新的遷移從開發應用到活動數據庫但是我擔心這會導致一系列的錯誤,由於默認值等等。

任何洞察到我可以看起來開始將不勝感激!

+0

您應該看看在模式遷移之間創建數據遷移。基本上你可以使用Django的模型來更新/操作數據。例如,遷移可能會向模型添加一個字段,第二個遷移可能是數據遷移以填充新字段,第三個遷移可能會刪除不再需要的字段。 https://docs.djangoproject.com/en/1.10/topics/migrations/#data-migrations。 這樣做意味着您可以在模式更改和數據更改發生時控制順序。 –

回答

1

以下是命令。你可以使用你最喜歡的自動化語言。

  1. 備份活服務器上的當前數據庫
mysqldump -u username -p database_name | gzip -c > live_server_backup.sql.gz 
  • 合併dev的的結構和部署的數據庫,以便僅保留部署數據庫中的數據,但更新結構以匹配開發數據庫
  • 爲此,我們典型的過程實際上只是應用遷移。如果你是在所有擔心遷移,你可以在你的dev的服務器上做:

    # 1. backup live database 
    mysqldump -u username -p database_name | gzip -c > live_server_backup.sql.gz 
    
    # 2. Transfer the backup to the dev server using scp 
    # 3. backup dev database 
    mysqldump -u username -p database_name | gzip -c > dev_server_backup.sql.gz 
    
    # 4. Load the live database into your dev database server 
    mysql -u username -p -e 'drop database database_name ; create database database_name' 
    gunzip -c live_server_backup.sql.gz | mysql -u username -p database_name 
    
    # 5. Apply all migrations against dev-copy of live server 
    cd /path/to/django/root 
    . bin/activate # if you are using virtualenv 
    python manage.py migrate 
    

    這樣,您就可以測試您是否有任何遷移將導致現場服務器上的問題,而沒有實際影響的直播服務器本身。確認後,您可以:

    # 6. 
    mysql -u username -p -e 'drop database database_name; create database database_name;' 
    # 7. Restore dev database 
    gunzip -c dev_server_backup.sql.gz | mysql -u username -p database_name 
    
    +0

    令人驚歎。謝謝!! –

    相關問題