MySQL连接报错2059

摘要:
将复制得到的sql语句的user值更改为root123INSERTINTO`mysql`.`user`VALUES('localhost','root123','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'caching_sha2_password','$A$005$tA0Ka%mBa88f!这样,就拷贝了一条和root一样的数据,接下来就操作这条数据。

当启动Django自带的服务器时,报错2059:

...
MySQLdb._exceptions.OperationalError: (2059, <NULL>)
...

查看了一下mysql版本:

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.13    |
+-----------+
1 row in set (0.00 sec)

mysql>

在MySQL 5.7中,默认的身份验证插件是 mysql_native_password;MySQL 5.8开始将caching_sha2_password作为默认的身份验证插件。

mysql> use mysql;
Database changed
mysql> select user,host,plugin from user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)

mysql>

这里给出的解决办法是将新的加密插件caching_sha2_password更改为5.7之前的加密插件 mysql_native_password,方式如下:
alter user '用户名'@'localhost' identified with mysql_native_password by '密码'

以下是个临时解决办法:

首先我使用Navicat打开mysql数据库中的user表,在User为root那一行鼠标右击,选则复制为–>Insert语句。
将复制得到的sql语句的user值更改为root123

INSERT INTO `mysql`.`user`(`Host`, `User`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`, `password_last_changed`, `password_lifetime`, `account_locked`, `Create_role_priv`, `Drop_role_priv`, `Password_reuse_history`, `Password_reuse_time`, `Password_require_current`) VALUES ('localhost', 'root123', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0, 'caching_sha2_password', '$A$005$tA0Ka%mBa88
f!sK2/CnVlc1OCpEQTh3Hc7XlcAHqKFyVwi7uKJI3/7Gm/', 'N', '2018-12-24 13:30:16', NULL, 'N', 'Y', 'Y', NULL, NULL, NULL);

执行sql语句。这样,就拷贝了一条和root一样的数据,接下来就操作这条数据。

# 执行命令修改加密方式
mysql> alter user 'root123'@'localhost' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.07 sec)

# 刷新权限使配置生效
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql>

查看一下:

mysql> select user,host,plugin from user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
| root123          | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
5 rows in set (0.00 sec)

mysql>

更改连接数据库的用户名,然后再启动Django:

(Py3_spider) D:PythonProjectdjangostart>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
February 06, 2019 - 10:47:58
Django version 2.1.5, using settings 'djangostart.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

发现已经正常了。

参考:

MySQL8.0新特性——默认使用caching_sha2_password作为身份验证插件 http://blog.51cto.com/fengfeng688/2147169

免责声明:文章转载自《MySQL连接报错2059》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇《ArcGIS Runtime SDK for Android开发笔记》——问题集:Error:Error: File path too long on Windows, keep below 240 characters全基因组测序及数据分析基础下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用ThinkPHP开发中MySQL性能优化的最佳21条经验

使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过 多的S...

【笔记】SpringBoot+Shiro 实现简单权限管理(使用mysql数据库)

网上翻了好久 都没有SpringBoot+Shiro的入门教程 原本想看《跟我学Shiro》 然后发现这是从头开始 但是我就需要和SpringBoot整一块 不需要那么多的东西 感觉这个当参考书不错 于是东拼西凑终于整成了 把别人的教程上我用不到的都删了 该改的改 终于拿到了我理想中的效果 先是数据库部分 因为是简单的实现 就没有弄得太复杂 三部分 用户...

tomcat服务器输入localhost可以访问,ip无法访问解决办法

最近在开发项目中,遇到的一个问题是: 在 tomcat中发布一个web项目,但是发布成功后,只能用http://localhost:8080/fm访问项目,不能用 http://127.0.0.1:8080/fm访问项目,也不能用本地的IP地址访问(http://192.16/8.0.191:8080/fm) 起初认为是防火墙的原因,但是防火墙是关闭的,...

MySQL8身份验证问题解决

开新项目。使用MySQL8,在经历过B级别的网速下载后,终于安装好了MySQL,虽然在终端上是可以直接登录的。 但是我使用Navicat就无法访问了,提示什么登录失败,还有乱码。 搜索了一下,发现是MySQL8默认的登录插件换了。要换回来只需要一条sql ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native...

【SequoiaDB】2 巨杉数据库SequoiaDB可视化部署

上篇介绍了如何可视化安装巨杉数据库Sequoia DB SAC,本篇进行演示如何一键部署集群以及数据库。 1)登录SAC (http://192.168.56.101:8000/) 2)点击 一键部署 3)在弹出的窗口,填写集群名、用户名、密码等信息 4)在扫描主机界面,填写集群的IP地址/主机名、密码信息,点击扫描 5)勾选主机列表中...

MySQL的FLUSH句法

今天仔细看了下Flush语法,同时在工作中也经常使用Flush命令,在这儿汇总下。MySQL的FLUSH句法(清除或者重新加载内部缓存) FLUSH flush_option [,flush_option],如果你想要清除一些MySQL使用内部缓存,你应该使用FLUSH命令。为了执行FLUSH,你必须有reload权限。 flush_option 可以是下...