【问题标题】:Script for merging dev mysql database to deployment mysql database for Django app用于将 dev mysql 数据库合并到 Django 应用程序部署 mysql 数据库的脚本
【发布时间】:2017-01-09 20:47:04
【问题描述】:

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

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

任何关于我可以从哪里开始的见解将不胜感激!

【问题讨论】:

  • 您应该考虑在架构迁移之间创建数据迁移。基本上你可以使用 Django 的模型来更新/操作数据。例如,迁移可能会向模型添加一个字段,第二次迁移可能是填充新字段的数据迁移,第三次迁移可能会删除不再需要的字段。 docs.djangoproject.com/en/1.10/topics/migrations/…。这样做意味着您可以控制架构更改和数据更改发生时的顺序。

标签: mysql django database deployment automated-deployment


【解决方案1】:

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

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

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

# 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

【讨论】:

  • 太棒了。谢谢!!
猜你喜欢
  • 2017-11-24
  • 2015-01-28
  • 1970-01-01
  • 2013-07-20
  • 2016-08-04
  • 2015-05-30
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多