问题描述
在树莓派中搭建好Python3+mysql环境后,在Terminal环境下使用以下命令+密码可以正常登陆。
sudo mysql -u root -p
在前面的基础上,简单编写了一个Python测试代码进行数据库连接操作,代码如下:
1 #!/usr/bin/env python3
2
3 import pymysql
4
5
6 def main():
7 print('start app...')
8 mysql_connect = pymysql.connect(host='localhost', user='root', password='my_password', db='my_database')
9 cursor = mysql_connect.cursor()
10
11 cursor.execute('SELECT VERSION()')
12 data = cursor.fetchall()
13 print(data)
14
15 cursor.close()
16 mysql_connect.close()
17
18
19 if __name__ == '__main__':
20 main()
21
运行上面代码之后发生报错,错误信息显示发生访问权限错误,如下:
pymysql.err.InternalError: (1698, "Access denied for user 'root'@'localhost'")
解决问题
通过上网查阅资料,发现可能是因为Authentication Plugins的设置导致的。想通过上面Python代码连接登陆mysql数据库,需要将user表中的plugin字段需要设置为mysql_native_password。
为了确认自己的mysql的配置,先在Terminal下登陆mysql
sudo mysql -u root -p
选择mysql数据库
use mysql;
查看plugin字段信息,查看结果如图1,发现plugin字段为"uinx_socket",果然不是"mysql_native_password"。
select user, plugin from mysql.user;
1.png
修改plugin字段信息
update user set plugin='mysql_native_password' where User='root';
再次查看plugin信息,如图2,此时我们发现plugin字段已经修改成功
2.png
修改完成之后,退出mysql,运行上面的Python文件,此时可以正常连接,问题得到解决。
参考