美文网首页树莓派
树莓派中python代码连接mysql时发生Access Den

树莓派中python代码连接mysql时发生Access Den

作者: holo3344 | 来源:发表于2018-11-16 18:15 被阅读0次

    问题描述

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

        本文链接:https://www.haomeiwen.com/subject/akuufqtx.html