Django使用MySQL数据库
由于SQLite不支持Git版本控制,所以将Django的默认数据库换到MySQL当中。
开始
修改配置文件
修改settings默认配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
修改为MySQL的引擎
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_db_name',
'USER': 'your_mysql_username',
'PASSWORD': 'your_mysql_password',
'HOST': 'your_mysql_server_ip',
'PORT': 'your_mysql_server_port',
}
}
安装pymysql库
pip install pymysql
安装完成后,run程序会发现报错
Error loading MySQLdb module
这有两种解决办法,一种是改Django包里面的pymysql,通用性好。今天在差SOF的时候又遇到了这样一个解决方法,简单好用。在manage.py中增加一个异常捕获即可
try:
import pymysql
pymysql.install_as_MySQLdb()
except:
pass
MySQL配置远程登录
默认情况下MySQL是没有开启远程登录的,所以需要配置之后配合上面的设置一起使用。登录mysql命令行之后,一般有两种办法:
- 更新用户表:* update user set host = '%' where user = 'root’*,奖root的连接地址从localhost改成%,即外网访问
- 授权法:* grant all privileges on . to ‘yourMysqlUsername’@‘%’ identified by ‘yourMysqlPassword’ with grant option;,输入完成之后记得flush privileges*。
重新启动mysql服务service mysql restart。上述操作过后,可用通过下面的命令测试一下:
mysql -u yourmysqlUsername -p -h yourMysqlIp -P yourMysqlPort
如果连不上的话,可以通过以下方式排查:
- VPS的安全组,是不是对于yourMysqlPort(默认3306)是否已经放行
- 本地的防火墙是否已经拦截
- 通过systemctl status firewalld查看firewalld状态
- systemctl start firewalld
- firewall-cmd --permanent --zone=public --add-port=3306/tcp,提示success,表示设置成功
- firewall-cmd --reload
Done.