前言
这次在windows端python环境链接本地虚拟机mysql数据库时,出现链接失败报错,经过一晚上的查找终于解决,这里写一下处理方案,想给遇到同样问题的大佬们一点参考(毕竟我也是在这里找到了办法)
一、前置
环境:
1、win10(python 3.7.8 )
2、本地虚拟机:linux(CentOS 7),数据库(mysql 8.0.20 )
3、PyCharm编译器
二、触发问题步骤
1.PyCharm>Terminal 下载数据库驱动包
pip install mysql-connector
2.链接数据库
import mysql.connector
mydb=mysql.connector.connect(
host="192.168.31.158",
user="root",
password="123456"
)
mc=mydb.cursor()
mc.execute("use DatabaseName")
mc.execute("show tables")
tbs=[]
for x in mc:
print(x[0])
tbs.append(x[0])
print(tbs)
结果就是出现报错:
mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported
出错了咋办???看大佬们帖子!
然后我就把问题复制下来,开始逐一尝试:
3.尝试方法
1.增加参数:auth_plugin=’mysql_native_password’
import mysql.connector
mydb=mysql.connector.connect(
host="192.168.31.158",
user="root",
password="123456" ,
auth_plugin='mysql_native_password'
)
mc=mydb.cursor()
mc.execute("use DatabaseName")
mc.execute("show tables")
tbs=[]
for x in mc:
print(x[0])
tbs.append(x[0])
print(tbs)
然而结果还是报错:
mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported
2.在linux端用下面命令修改mysql密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
依然报错:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
当然可能是因为具体情况,所以没操作对,总之我换了别的方法(弄的时候正在看《人在囧途》,可能心思有点不集中哈哈哈)
4.解决办法:
pip install mysql-connector-python
没错,最后是驱动包问题,这么简单的难题都不好让大佬们看到(略过略过...)
python环境下载好mysql-connector-python包后,惊奇的发现代码不变,直接成功了!
其中 auth_plugin='mysql_native_password' 参数可有可无,不影响执行,到此算问题解决。
5.小细节!!!
过了一天为了验证两个包:mysql-connector 和 mysql-connector-python 是都需要还是只要mysql-connector-python,所以我执行了:
pip uninstall mysql-connector
点击源程序,运行,哦吼,报错了!重点来了,我再次执行
pip install mysql-connector
将mysql-connector包下载回来时,运行依然失败???这我就纳闷了,其中原因暂时没有去查阅
最后通过:File>Setting>Project>Python Interpreter ,对两个包mysql-connector 和 mysql-connector-python进行了装卸测试,最后发现这里即时装卸,只需要mysql-connector-python包就可以使之前程序成功执行,并获取到库数据!
总结
一直想找个方式记录一下一些问题的解决方案,以便自己回顾,所以第一次决定在CSDN写下来(早有想法,不过很不喜欢写东西,太麻烦了),同时也能给遇到同样问题的大佬们一些参考,毕竟在这里我也学到了很多,共勉。