我正在使用Django2.2与Python3和MySQL8.0.16构建一个ETL引擎。我有我的Django settings.py文件中配置的MySQL实例的正确登录信息。我知道这些数据是正确的,因为我已经测试过它从CLI手动登录MySQL。我在从Django连接到MySQL实例时遇到问题,错误日志中的“user”字段与我在MySQL实例上配置的任何用户都不匹配。事实上,错误日志中的“用户”字段实际上是我公司发行的笔记本电脑上UNIX系统上的用户。
我已经设置了一个用户john来访问下面的表:(注意:我想在实际连接后使用production_tab)。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| production_tab |
| mysql |
| performance_schema |
| sys |
+--------------------+
我在公司发行的Macbook上,所以我无法更改UNIX系统上的默认用户:
➜ project git:(master) ✗ dscl . list /Users | tail -5
my_corporate_username
root
我已经尝试调查MySQL用户以进一步诊断问题,看起来my_corporate_username不是注册用户(这是预期的)和我设置的用户名,john注册了一个明确匹配我的settings.py文件的密码:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| my_corporate_username | XXXXXXXXXXX~OY7XYXYXHVSrQjUXYXYXYXXTbx/I.oXYXXYYkiCJ0XYXYXXo7yDLGI7 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | *59A3E0XXXXXXXXXXXXXXXE093F493462XXXXXXXX | mysql_native_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
在我的settings.py文件中,我有正确的凭据,允许我查询show数据库;首先,我真的很困惑为什么(i)我无法通过允许我通过CLI登录的正确登录凭据连接MySQL,以及(ii)为什么我运行python3 manage时出现以下错误。 py runserver:
django.db.utils.OperationalError: (1045, "Access denied for user 'my_corporate_username'@'localhost' (using password: YES)")
我的settings.py文件:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'john',
'PASSWORD': 'passwd',
'PORT': '3306',
'HOST': 'localhost',
}
}
我倾向于认为这些问题中的一些是通过数据库本身或某些配置文件中存在的某些不稳定的权限问题发生的?这只是我最好的猜测。感谢您的帮助!干杯!
NAME
应该是数据库的名称 - 而不是用户。
用户名是USER
,你没有。
像这样的东西:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'MyDatabase',
'USER': 'john',
'PASSWORD': 'passwd',
'PORT': '3306',
'HOST': 'localhost',
}
}