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.