用于将dev mysql数据库合并到Django app的部署mysql数据库的脚本

时间:2017-01-09 20:47:05

标签: mysql django database deployment automated-deployment

我正在开发一个Django应用程序,现在已经到了设置部署过程的程度。我想尽可能地自动化这个,因此我正在寻找我在数据库管理方面可以获得的任何帮助。 在我看来,这是我想要自动化的过程的粗略轮廓: 1.备份实时服务器上的当前数据库 2.合并开发和部署数据库的结构,以便仅保留部署数据库中的数据,但更新结构以匹配dev db

我考虑过简单地将所有新的迁移从dev应用到live db但是我担心这会因默认值等而导致一系列错误。

我非常感谢任何有关我可以从哪里开始的见解!

1 个答案:

答案 0 :(得分:1)

这是命令。您可以使用您喜欢的任何自动化语言。

  
      
  1. 备份实时服务器上的当前数据库
  2.   
mysqldump -u username -p database_name | gzip -c > live_server_backup.sql.gz
  
      
  1. 合并开发和部署数据库的结构,以便仅保留部署数据库中的数据,但更新结构以匹配dev db
  2.   

为此,我们的典型流程实际上只是应用迁移。如果您完全担心迁移,可以在开发服务器上执行此操作:

# 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