我在mac中安装Mysql 8.0后,更改了默认的root密码,
当我运行django.db.utils.OperationalError: (1045:Access denied for user 'root'@'localhost' (using password: NO)
来连接MySql和init数据库表时,我收到错误python3 manage.py migrate
,而我可以在控制台中使用root / new密码登录mysql而没有任何错误。
它使用pymysql与Mysql一起工作,我做了很多谷歌,也在stackorverflow,最后我找到了解决方案in a CSDN tech blog
只想在stackoverflow中分享它,如果你也遇到过这个问题,你可能想尝试下面的答案。
答案 0 :(得分:1)
在mysql控制台中运行以下命令,将密码加密方法更改为Mysql中的旧版本(在Mysql 8.0中更改为使用cha2)
mysql -u root -p
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
FLUSH PRIVILEGES;
然后你应该可以自由地运行python manage.py migrate
。
答案 1 :(得分:0)
manage.py
应该从settings.py
那里获取数据库访问凭据,这是一个特定的数据库用户(当然也包括该用户的密码)。通过向本地用户授予数据库登录特权来响应此错误消息,这将是一个安全错误,上帝禁止root!
问题是,为什么Django不从settings.py
中提取凭证?在我的情况下,settings.py
存在问题(我们正在将构建管道从django管道重组到webpack),我需要从settings.py
中删除与管道相关的部分以进行修复。这是一个问题,为什么我没有收到关于settings.py
问题的任何python错误消息,但是却收到了此错误,它不是真正问题的局部原因。该错误消息只是源问题的传递结果。修复manage.py
后,照常从数据库设置中获取凭据,一切顺利。
所以解决方案是检查和调试settings.py
,这有点困难,因为我没有收到有关直接错误的消息。
答案 2 :(得分:0)
对于任何遇到此问题的人,我实际上是在尝试使用密码,但无意中将http://dockerIP:8080/auth/admin/
设置为PASSWORD
。这解释了为什么说None
。确保您的using password: NO
不是PASSWORD
。
答案 3 :(得分:0)
使用以下命令
service myql stop
sudo /opt/lampp/lampp stop
sudo netstat -nap | grep :80
如果apache服务器正在运行,它将在“ apache2”关键字之前显示一个数字 如果是,写
sudo kill number
sudo /opt/lampp/lampp start
否则
sudo /opt/lampp/lampp start
答案 4 :(得分:0)
在我的情况下,当我这样输入大写字母中的每个键时,它都起作用
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myproj',
'USER': 'root',
'PASSWORD': 'password',
'PORT': '3306',
'HOST': 'localhost',
}
}
希望它对像我这样的菜鸟有帮助。
答案 5 :(得分:0)
我通过将 PASSWORD
(DATABASES dict) 中的 settings.py
字段更改为 password
解决了这个问题。
答案 6 :(得分:0)
如果 root 用户有你设置的密码。只需在 setting.py 中将 'PASSWORD': 更改为您的真实密码。为我工作。