我正在开发一个django应用程序,现在已经到了设置部署过程的地步。我想尽可能地自动化这一点,因此我正在寻找任何帮助,我可以在数据库管理方面。
在我看来,这是我希望自动化的流程的大致轮廓:
一。备份实时服务器上的当前数据库
2.合并开发和部署数据库的结构,以便只在部署数据库中保留数据,但更新结构以匹配开发数据库
我已经考虑过简单地将所有新的迁移从dev应用到live db,但是我担心这会由于默认值等原因导致一系列错误。
如果您能深入了解我可以从哪里着手,我将不胜感激!
最佳答案
下面是命令。你可以使用你最喜欢的自动化语言。
备份实时服务器上的当前数据库
mysqldump -u username -p database_name | gzip -c > live_server_backup.sql.gz
合并开发和部署数据库的结构,以便只在部署数据库中保留数据,但更新结构以匹配开发数据库
为此,我们的典型过程实际上就是应用迁移。如果您担心迁移,可以在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