Django 数据库的迁移、备份与恢复(MySQL)
Django 数据库的迁移、备份与恢复(MySQL)
本文解决Django在部署时迁移数据库的问题,同时也可作用于数据库的备份。个人认为,相比直接导出数据库,这种方式更使用于Django开发的网站。尽管同步可能会有些麻烦,但避免了migration报错的风险,备份的命令也可以通过脚本来自动运行。
前置知识:Django进阶,MySQL入门,Linux基本操作,Django & MySQL安装。
备份
1. 导出指定表的数据
注:不使用sqlyog
- 模板:
mysqldump -t database -u username -ppassword --tables table_name1 table_name2 table_name3 >D:\db_script.sql
- 实例:
mysqldump -t blog -uroot -ppassword --tables index_tui index_tag index_friendlink index_category user_user index_article index_article_tags > C:\Users\ASUS\Desktop\try\all.sql
导出的表数据存放在:C:\Users\ASUS\Desktop\try\all.sql
2. 妥善存放文件
最好下载下来或云备份
数据恢复
0. 创建新数据库
数据库一定要与settings.py里的一样 使用新的数据库,确保数据库为空,不然django_migrations表里的数据可能会和makemigrations命令发生冲突。具体解决请另行搜索,但多一事不如少一事。
create database database_name default charset 'utf8';
show databases;
use database_name;
show tables;
1. Django 迁移文件
确保magrations文件夹里没有除__init__之外的文件
python3.8 manage.py makemigrations
python3.8 manage.py migrate
此时所有表里的数据都为空
2. 迁移数据
打开之前导出数据的all.sql文件(用记事本或类似的编辑器就行)。 可以发现,里面有这样的一块一块的数据:
LOCK TABLES
index_tui
WRITE; /!40000 ALTER TABLEindex_tui
DISABLE KEYS /; INSERT INTOindex_tui
VALUES (1,'首页一号位'),(2,'首页二号位'),(3,'首页三号位'); /!40000 ALTER TABLEindex_tui
ENABLE KEYS /; UNLOCK TABLES;
每一块都是一张表内的数据,我们只要insert语句:
INSERT INTO
index_tui
VALUES (1,'首页一号位'),(2,'首页二号位'),(3,'首页三号位');
可能有多行insert语句记得复制全。
打开MySQL
mysql -uroot -p
# 输入密码
进入数据库 可以发现django创建的表
use database_name;
show tables;
将刚刚复制的insert语句粘贴过来并执行。 注意:
-
表内如果涉及外键,一定根据外键先后顺序插入数据,先导入没有外键的表,再根据外键顺序导入其他表。
-
如果在类里和user建立了外键(比如class Article里通常会在author里带ForeignKey),记得导出数据时一块导出user表里的数据并先导入。
3. 进入/admin页面查看效果
如果没有同步user表,可以现在django里创建superuser再登录进去。
python3.8 manage.py createsuperuser
p.s.
附sqlyog可视化导出数据方法:
MySQL导出数据参考: