问题描述

 在树莓派中搭建好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。

  1. 为了确认自己的mysql的配置,先在Terminal下登陆mysql
sudo mysql -u root -p
  1. 选择mysql数据库
use mysql;
  1. 查看plugin字段信息,查看结果如图1,发现plugin字段为”uinx_socket”,果然不是”mysql_native_password”。
select user, plugin from mysql.user;
1.png
  1. 修改plugin字段信息
update user set plugin='mysql_native_password' where User='root';
  1. 再次查看plugin信息,如图2,此时我们发现plugin字段已经修改成功

    2.png
  2. 修改完成之后,退出mysql,运行上面的Python文件,此时可以正常连接,问题得到解决。

参考

  1. https://superuser.com/questions/603026/mysql-how-to-fix-access-denied-for-user-rootlocalhost
  2. https://dev.mysql.com/doc/refman/5.6/en/authentication-plugins.html

文章来源于互联网:树莓派中python代码连接mysql时发生Access Denied错误

发表评论