2026-10-19 12:20:25
Django数据库迁移和备份是确保线上环境稳定运行的关键环节。以下从迁移原理、常见问题及解决方案、数据库备份三方面进行系统梳理:
一、Django数据库迁移机制核心命令原理
makemigrations:扫描models.py变更,在应用migrations目录生成Python脚本(如0001_initial.py),记录字段增删改操作
migrate:执行迁移脚本,同步数据库结构,并在django_migrations表记录执行历史
同步关系
迁移文件与django_migrations表记录需严格对应
典型异常场景:
新数据库无迁移记录时会自动执行全部迁移
迁移文件缺失但表中有记录会导致重复执行错误
问题1:迁移文件与数据库记录不同步
错误操作:删除老程序导致迁移文件丢失
解决方案:
采用覆盖式部署(保留原有迁移文件)
建立镜像环境测试迁移流程
使用--fake参数处理特殊情况:
python manage.py migrate app_name 0002 --fake 0001问题2:打包文件与生产环境不匹配
错误操作:将迁移文件纳入版本控制
解决方案:
从版本控制中移除迁移文件(.gitignore添加*/migrations/)
部署时仅保留模型定义代码
字段变更遵循"只增不减"原则
PostgreSQL备份方案
基础命令:
# 备份(自定义格式压缩)pg_dump -Fc -h host -p 5432 -U user dbname > backup.dump# 恢复(清理现有对象)pg_restore -c -d dbname backup.dumpDjango集成管理命令
备份命令(backup_db.py):
pg_dump_cmd = f'pg_dump -Fc --no-acl --no-owner -h {host} -U {user} {db_name} > {backup_path}'生成带时间戳的备份文件(如db_backup_2023-11-15_14-30-00.dump)
恢复命令(restore_db.py):
pg_restore_cmd = f'pg_restore -h {host} -U {user} -d {db_name} {backup_file}'支持通过--backup_file参数指定恢复文件
最佳实践建议
部署前执行全量备份并验证
保留最近3次备份文件
测试环境验证恢复流程
使用cron定时备份(示例):
0 3 * * * /path/to/python /path/to/manage.py backup_db通过建立规范的迁移流程(保留迁移文件→备份数据→测试环境验证→生产环境覆盖部署)和自动化的备份机制,可显著降低数据库升级风险。建议将备份命令纳入CI/CD流程,实现部署与备份的自动化联动。