本文共 1659 字,大约阅读时间需要 5 分钟。
背景介绍
mysql在生产环境中是非常常用的一种关系型数据库,性能好,开源。 而python的django框架在开发环境下自带了sqlite数据库,虽然测试很方便,但是在部署时,最好更换成mysql数据库。 在部署django的mysql时,踩了一个坑,而且解答也不是很完善,所以记录一下自己的配置过程。 部署使用的服务器是阿里云ecs云服务器,配置是2核4G,1M带宽。OS: Debian 9.2 stretchKernel: x86_64 Linux 4.9.0-4-amd64
过程
1、安装mysql,就一行命令即可
apt-get install mysql-server
2、安装PyMySQL
这是一个python的库,用于python应用和mysql的衔接pip install PyMySQL
3、配置_init_.py
这个文件放在和project同名的文件夹下(就是有settings.py的文件夹) 文件名是 _init_.py 文件内容是import pymysqlpymysql.install_as_MySQLdb()
4、
将数据库的相应部分修改为:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 将默认的sqlite3改为mysql 'NAME': "base_name", # 数据库的名字 'USER': "root",# 数据库用户名 'PASSWORD': "***",# 数据库密码 'HOST': "127.0.0.1",# 数据库地址,默认本机 'PORT': "",# 数据库端口,默认3306 }}
最后需要在mysql中创建一个database,和settings.py中写的NAME 相同。
/etc/init.d/mysql start # 启动mysqlmysql -u root -p # 连接mysql 然后输入密码
如果登录成功后
create database base_name; # 名字和settings.py中的一定要一样
之后执行
python manage.py makemigrationspython magage.py migratepython manage.py runserver
如果不报错,就说明自己的配置正确了。
遇到的坑
在配置完成后,执行
python makemigrations 后 报错如下:ERROR 1698 (28000): Access denied for user 'root'@'localhost'
意思就是django 想要连接 mysql中对应的数据库时,连接被拒绝。
原因可能是 settings.py里面的用户名,密码填错了,可能是数据库里没有对应名称的database. 但是我试着按照配置里信息手动连接mysql,可以连接。说明我的原因不是这些。 后来查了许多,才看到一个真的work for me 的 是 stack overflow上的。 我来翻译一下,就是 debian和ubuntu系统安装mysql ,连接root用户时使用的登录认证是 而django连接数据库时使用的是 mysql_native_password 的认证方式, 所以需要修改root的plugin为mysql_native_password 命令如下:mysql> USE mysql;mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';mysql> FLUSH PRIVILEGES;mysql> exit;
之后我的问题就真的解决了
希望我的踩坑经历可以对广大读者有所帮助,如果有错误,还请大佬们留言指出。
转载地址:http://eijmb.baihongyu.com/