Django连接远程数据库

前言

Django项目中,数据库最好只有一个。不采用原先默认的Sqlite3数据库,采用搭在阿里云上Mysql。这样开发的时候避免仓库中含有数据库文件,数据不能统一。采用一个远端数据库,可以保证多人开发,共享一个数据库,实现数据统一。

这样就需要在Django中配置远端Mysql数据库。

安装Mysql数据库

在阿里云上安装Mysql数据库,步骤很简单:

1
2
3
4
apt-get update
apt-get install mysql-server-5.5.2
apt-get isntall mysql-client
apt-get install libmysqlclient-dev

通过以上命令就安装好了,访问数据库:

1
mysql -u root -p

输入密码,初始应该是123456,就可以登进去
这里写图片描述
这样Mysql就安装完毕了。

设置远程登陆

设置权限

为了能远程登陆Mysql数据库,需要打开访问权限:
进入Mysql后:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
Query OK, 0 rows affected (0.03 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit;
Bye

在/etc/mysql/my.cnf中,注释
bind-address = 127.0.0.1
这样就可以通过任何主机,以root用户名,123456为密码远程访问数据库。

再重启数据库

1
service mysql restart

本地访问

本地需要安装mysql客户端,然后访问

1
mysql -u root -h 139.129.19.240 -P 3306 -p123456

-h:阿里云ip地址
root:设置的用户
-P:端口号
-p后面为密码

这样如果能访问,就说明远程访问Mysql已经正常了
这里写图片描述

Django配置远程数据库

在Django项目的settings.py中配置数据库:

1
2
3
4
5
6
7
8
9
10
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysql',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '139.129.19.240',
'PORT': '3306',
}
}

然后输入python manage.py migrate来写入数据库:
会报错!!!

1
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

说明MySQLdb这个库未安装或者安装不正确!
按照stackoverflow上通过pip安装一直不对,查了各种资料,终于解决了!
正确姿势如下,通过源码安装:

1
2
3
4
wget http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz 
tar zxvf MySQL-python-1.2.3.tar.gz
python setup.py build
python setup.py install

如果在build时候遇到:
ImportError: No module named setuptools
解决如下:

1
2
3
4
5
wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
tar zxvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
python setup.py build
python setup.py install

至此MySQLdb就算安装完毕了:

再次运行:python manage.py migrate就已经正确写入数据了:
这里写图片描述
查看远端数据库,确实已经有数据了:
这里写图片描述
至此Django就已经正确连接远程Mysql了!