我的 Django 项目做了一次实际的项目移植,就是把同一个项目连同数据库中存储的信息迁移到另外一个环境中。具体是把服务器上面的数据库迁移到了本地,也就是 Linux 服务器到本地 Windows,这篇文章就来简述一下我具体的操作过程。

Django 项目文件的迁移

关于项目文件的迁移没必要做过多的说明,因为一般这种操作都是依靠 Github 去克隆或者 pull 就行了,对应我这个博客项目,完整的操作可以查看我的 Github 的 博客项目介绍

MySQL 数据库的迁移

因为我的博客使用的数据库是 MySQL,所以这里主要还是说一下这个数据库的说明。

首先,需要强调的我的数据库使用的编码格式是 utf8mb4,这是为了使博客支持 emoji 表情的编码,我当时创建数据库的语句是下面这句:

CREATE DATABASE `izone` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

导出数据库

首先,需要在服务器上面把已经存了很多信息的数据库导出来,方法很简单,但是我还是在这里遇到了坑(其实是个笑话,我对 mysql 用的不多,都是需要用的时候去查,或者用的 Python 操作的数据库),具体的就是本来导出数据库文件的命令应该是在命令行中运行,我一开始一直以为这个导出的语句是在进入了 mysql 之后运行的 mysql 语句,所以一直搞错了,后来才知道导出数据的命令是系统命令。

具体的做法应该是这样:

  • 首先,进入一个需要保存导出的文件的文件夹中,比如我创建的 dbs 文件夹
  • 然后使用下面命令即可:
mysqldump -uroot -p izone > izone.sql

这个命令运行会让你输入 root 用户的密码,当然你也可以使用其他用户,千万注意,这个命令是系统命令,不用进入 mysql 的 shell 中运行

  • 上面命令运行完毕,可以看到 dbs 文件夹下面多了一个 izone.sql 文件,这个就是导出的数据库。
  • 将数据库导出的文件传递到本地,因为我服务器和本地的连接使用的工具是 Xshell 5,所以我只说这个工具的方式。首先需要下载一个文件传输的工具,名字是 Xftp 5,下载安装时候再使用 Xshell 5上面的“新建文件传输”就可以直接把服务器的文件拉到本地,非常方便。

新建数据库

在本地新建一个数据库,使用的命令可以跟之前在服务器上面的建的一样:

CREATE DATABASE `izone` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

导入数据库文件

本地数据库已经建好了之后,进入本地放有从服务器传过来数据文件的文件夹,启动 cmd 命令窗口。

在当前文件夹下运行系统命令:

mysql -uroot -p -D izone < izone.sql

结果会发现运行报错了,具体的报错信息大致应该如下:

ERROR at line 191: Unkown command '\''

也有可能是报下面这种错误:

ERROR 2005 (HY000) at line 193: Unknown MySQL server host 'y.get_result()rnrn```rnrn###' (0)

后来我查了,这些报错基本都是因为编码的问题,当然,我其实也不太理解为什么要报错,因为我在建数据的时候明明已经设置了数据库的编码了,不过无所谓,反正有解决的方法就行,具体的方法就是把命令加一句改成这样:

mysql -uroot -p -D izone --default-character-set=utf8mb4 < izone.sql

上面的命令运行完毕如果没有报错,那就已经导入了数据库了,可以自己进入 mysql 中查看,这里不做查询的说明。

Django 文件的迁移

当数据库已经准备好了,就可以开始进行数据的迁移了,因为我本地本来是运行过项目的,所以在项目的每个应用下面都已经生产过数据迁移的文件,所以现在要按照之前关于数据迁移的操作来进行操作了。

  • 第一步是将所有应用下面的迁移文件全部删除,只保留 __init__.py 文件即可
  • 第二步是按照应用依赖的顺序去创建迁移命令,即依次执行下面的四句命令
python manage.py makemigrations oauth
python manage.py makemigrations blog
python manage.py makemigrations comment
python manage.py makemigrations tool

最后执行:

python manage.py migrate

上面的命令全部执行完毕,如果不报错,那么关于项目的数据库迁移就结束了,可以开始运行项目了,可以发现服务器上面保存的信息已经全部移植到了本地。

不过,由于我的博客项目中的用户系统中应用了第三方账号登录,而第三方账号登录使用的是 Oauth 协议,这个就决定了第三方账号的登录是跟域名绑定的,所以在本地已经不能使用第三方账号登录了,而自带的用户系统的账号还是可以登录的。

原创文章,转载请注明出处:http://www.tendcode.com/article/django-mysql/