我正在尝试使用下面提到的python代码连接到Mysql服务器
import mysql.connector
mydb = mysql.connector.connect(
host = "127.0.0.1",
port = 5000,
user = "user id",
password = "password"
)
print(mydb)
但是在运行此代码以测试我是否已与MySQL连接时,我遇到了我无法理解的错误。
Traceback (most recent call last):
File "C:\Users\varul.jain\Desktop\Test Phase\Mysql\mydb_test.py", line 7, in <module>
password = "root"
File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\__init__.py", line 179, in connect
return MySQLConnection(*args, **kwargs)
File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 95, in __init__
self.connect(**kwargs)
File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\abstracts.py", line 716, in connect
self._open_connection()
File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 210, in _open_connection
self._ssl)
File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 142, in _do_auth
auth_plugin=self._auth_plugin)
File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\protocol.py", line 102, in make_auth
auth_data, ssl_enabled)
File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\protocol.py", line 58, in _auth_response
auth = get_auth_plugin(auth_plugin)(
File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\authentication.py", line 191, in get_auth_plugin
"Authentication plugin '{0}' is not supported".format(plugin_name))
mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported
注意:我已经将默认值初始化为5000
出于测试目的,我已初始化端口5000,用户-root和密码-root
但是根据上述错误,授权默认密码不可用
有没有办法检查用户ID和密码以进行交叉验证并相应地以python代码进行更新?
建议会有所帮助
答案 0 :(得分:2)
请按照以下步骤操作:
从此安装的MySQL Server。
mysql-connector-python
使用此代码:
导入mysql.connector
mydb = mysql.connector.connect(host =“ 127.0.0.1”,port =“ 3306”,user =“ root”,password =“ root”,auth_plugin =“ mysql_native_password”)
print(mydb)
答案 1 :(得分:1)
根据python库的SQL文档。您需要指定auth插件,如下所示:-
conn = mysql.connector.connect(user='root', password='password', host='127.0.0.1',port=5000, database='test', auth_plugin='mysql_native_password')
print(conn)
答案 2 :(得分:0)
我在使用 webmin + python3 的 centOS VPS 上遇到了类似的问题。
一开始我觉得可能是连接包的原因,所以我试了一下:
'python3 -m pip install mysql-connector',在python中它将使用'import mysql.connector'
'pip3 install PyMySQL',在python中使用'import PyMySQL'
两者都没有解决问题。然后我从一个网站上找到了其他几种连接方式(现在我不记得它的地址了),详细解释了每种的优点和缺点,根据它,我最终选择使用mysqlclient。
以上都没有解决我的问题,我仍然面临连接错误。
我尝试了几次随机测试,不小心使用了 root 和配置文件中的 skip-grant-tables 选项,我能够使用 SSH python 代码登录 mysql,但这不是原因,因为这是一个正常的新创建的无论我在代码中访问什么主机,本地主机,127.0.0.1,域,....
所以我取消了 skip-grant-tables 选项,因为没有保护是有风险的(仅用于测试)。
最近,默认情况下 MySQL 服务器中已经存在用户“root”,我发现它有 4 个条目,所以我尝试在 webmin -> 服务器 -> MySQL 服务器 -> 用户权限中创建 4 个单独的类似条目记录。< /p>
这些记录具有相同的用户名和较少的权限,但分配的主机内容相似。它们是 'local' 、 '127.0.0.1' 、 'myservername.vps.provider.ca' 、 '::1'
(不知道最后一个是什么意思)
而且,Bingo,在添加了以上 4 个条目后,新用户可以使用通过 python3 代码提供的密码 authenthicate 登录。
(记住第一次,你必须在MySQL Server 页面中设置MySQL Admin 'root' 密码,这样密码登录认证功能才会起作用,并且该密码不需要与系统的root 密码相同)
仅此而已,这需要我 6 个小时。希望它也可以帮助使用 webmin 的人。如果它对您有帮助,请投赞成票。谢谢