如何将Django应用的PostgreSQL数据库xxxx2迁移至Server1且无损坏
迁移Django应用数据库xxxx2至Server1的安全操作步骤
前置说明
两台服务器分别部署独立Django应用,模型无交集;Server1含应用1及数据库xxxx1,Server2含应用2及数据库xxxx2。以下步骤确保迁移过程不损坏现有数据与应用。
1. 全量备份原数据库xxxx2(核心前置操作)
必须先备份,防止迁移过程中数据丢失:
- 若为MySQL:
执行后输入数据库密码,生成全量备份文件。mysqldump -u 数据库用户名 -p xxxx2 > xxxx2_full_backup.sql - 若为PostgreSQL:
# 生成SQL文本备份 pg_dump -U 数据库用户名 xxxx2 > xxxx2_full_backup.sql # 或生成压缩的自定义格式备份(推荐,恢复更快) pg_dump -Fc -U 数据库用户名 xxxx2 > xxxx2_full_backup.dump
2. 安全传输备份文件至Server1
用scp传输,确保文件完整性:
scp /Server2上的备份路径/xxxx2_full_backup.sql 你的Server1用户名@Server1IP:/Server1的目标存储路径/
传输完成后,在Server1和Server2分别执行哈希校验(如md5sum xxxx2_full_backup.sql),确认文件一致无损坏。
3. 在Server1创建空的目标数据库xxxx2
需与原数据库的字符集、排序规则、权限配置完全一致:
- MySQL(登录MySQL终端后执行):
-- 替换为原数据库的字符集与排序规则 CREATE DATABASE xxxx2 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建对应权限的数据库用户(若应用2需要远程连接) GRANT ALL PRIVILEGES ON xxxx2.* TO '应用2的数据库用户名'@'应用2服务器IP' IDENTIFIED BY '密码'; FLUSH PRIVILEGES; - PostgreSQL:
# 创建数据库,匹配原库编码与所属用户 createdb -U Server1数据库管理员用户名 -O 应用2的数据库用户名 -E UTF8 xxxx2
4. 恢复备份至Server1的xxxx2数据库
- MySQL:
mysql -u 数据库用户名 -p xxxx2 < /Server1的备份路径/xxxx2_full_backup.sql - PostgreSQL(SQL备份):
psql -U 数据库用户名 xxxx2 < /Server1的备份路径/xxxx2_full_backup.sql - PostgreSQL(自定义格式备份):
pg_restore -U 数据库用户名 -d xxxx2 /Server1的备份路径/xxxx2_full_backup.dump
5. 验证数据完整性
对比原Server2的xxxx2库与Server1的新xxxx2库:
- 检查表结构:执行
SHOW TABLES;(MySQL)或\dt(PostgreSQL),确认表数量一致 - 校验关键数据:对核心表执行
SELECT COUNT(*) FROM 表名;,对比两边行数 - 随机抽查数据:选取部分表的记录,确认内容无篡改
6. 调整应用2的数据库连接配置
修改应用2的settings.py中DATABASES配置,将数据库主机指向Server1:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 或postgresql_psycopg2 'NAME': 'xxxx2', 'USER': '应用2的数据库用户名', 'PASSWORD': '数据库密码', 'HOST': 'Server1的IP或域名', # 原先是Server2的地址,现在改为Server1 'PORT': '3306', # MySQL默认端口,PostgreSQL为5432 } }
7. 双应用验证
- 启动应用2,测试所有核心功能(读写数据、业务流程),确认与新库交互正常
- 访问Server1上的应用1,验证其数据与功能完全不受影响
关键注意事项
- 选择业务低峰期操作,减少对用户的影响
- 迁移完成后,保留原Server2的xxxx2库至少1-3天,观察无异常后再清理
- 若Server1的数据库服务资源不足(磁盘、内存),需提前扩容
内容的提问来源于stack exchange,提问作者Si si
相关产品推荐
相关产品推荐

