美文网首页
Client does not support authenti

Client does not support authenti

作者: zackxizi | 来源:发表于2018-09-30 22:13 被阅读0次

    1. 问题描述:

    我电脑安装了MySQL版本是:


    MySQL版本号8.0.12

    我在学习使用mpvue开发微信小程序前后端时,使用的是腾讯云提供的node服务,在server->config.js中:

    mysql: {
        host: 'localhost',
        port: 3306,
        user: 'root',
        db: 'cAuth',
        pass: 'MySQL密码',
        char: 'utf8mb4'
      },
    

    配置好 config.js 之后,就要开始初始化环境,初始化环境分为两步

    # 切换到服务端代码目录
    cd server
    
    # 安装依赖
    npm install
    
    # 安装全局依赖
    npm install -g nodemon
    

    初始化数据库 - 打开 CMD 输入如下命令:

    node tools/initdb.js
    

    此时报错:

    ⇒  node tools/initdb.js 
    
    ======================================
    开始初始化数据库...
    准备读取 SQL 文件:/Users/zhangxi/Documents/study/小程序/my-project/server/tools/cAuth.sql
    开始执行 SQL 文件...
    Unhandled rejection Error: Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
        at DB.raw.then.err (/Users/zhangxi/Documents/study/小程序/my-project/server/tools/initdb.js:40:11)
        at tryCatcher (/Users/zhangxi/Documents/study/小程序/my-project/server/node_modules/_bluebird@3.5.2@bluebird/js/release/util.js:16:23)
        at Promise._settlePromiseFromHandler (/Users/zhangxi/Documents/study/小程序/my-project/server/node_modules/_bluebird@3.5.2@bluebird/js/release/promise.js:512:31)
        at Promise._settlePromise (/Users/zhangxi/Documents/study/小程序/my-project/server/node_modules/_bluebird@3.5.2@bluebird/js/release/promise.js:569:18)
        at Promise._settlePromise0 (/Users/zhangxi/Documents/study/小程序/my-project/server/node_modules/_bluebird@3.5.2@bluebird/js/release/promise.js:614:10)
        at Promise._settlePromises (/Users/zhangxi/Documents/study/小程序/my-project/server/node_modules/_bluebird@3.5.2@bluebird/js/release/promise.js:690:18)
        at _drainQueueStep (/Users/zhangxi/Documents/study/小程序/my-project/server/node_modules/_bluebird@3.5.2@bluebird/js/release/async.js:138:12)
        at _drainQueue (/Users/zhangxi/Documents/study/小程序/my-project/server/node_modules/_bluebird@3.5.2@bluebird/js/release/async.js:131:9)
        at Async._drainQueues (/Users/zhangxi/Documents/study/小程序/my-project/server/node_modules/_bluebird@3.5.2@bluebird/js/release/async.js:147:5)
        at Immediate.Async.drainQueues [as _onImmediate] (/Users/zhangxi/Documents/study/小程序/my-project/server/node_modules/_bluebird@3.5.2@bluebird/js/release/async.js:17:14)
        at runCallback (timers.js:696:18)
        at tryOnImmediate (timers.js:667:5)
    
    

    2. 原因解释:

    主要原因是mysql服务器要求的认证插件版本与客户端不一致造成的。
    打开mysql命令行输入如下命令查看,系统用户对应的认证插件:
    命令进入MySQL内:

    select user,plugin from mysql. user;
    
    进去

    可以看到root用户使用的plugin是caching_sha2_password,mysql官方网站有如下说明:


    image.png

    意思是说caching_sha2_password是8.0默认的认证插件,必须使用支持此插件的客户端版本。
    plugin的作用之一就是处理后的密码格式和长度是不一样的,类似于使用MD5加密和使用base64加密一样对于同一个密码处理后的格式是不一样的。

    3. 解决方法:

    我不希望更新本地的客户端版本,想直接使用原来的环境来链接。
    解决方法是将root的plugin改成mysql_native_password。相当于降了一级。
    mysql官方网站提供了从mysql_old_password升级到mysql_native_password,我们可以仿照这个。官方原文如下:


    image.png

    这里改成:

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你想设置的MySQL登录密码';
    

    这行代码有两层含义,第一:修改root的密码为'你想设置的MySQL登录密码',摒弃原来的旧密码。第二:使用mysql_native_password对新密码进行编码。


    image.png

    我这里将密码设置为'',意味着不设置密码

    修改完之后再到server里面执行连接数据库

    node tools/initdb.js
    
    image.png

    4. 补充:

    如果在修改插件的时候出现错误,可现将插件改为 mysql_old_password,然后再升级成mysql_native_password,方法:


    image.png

    参考:navicat for mysql 链接时报错:1251-Client does not support authentication protocol requested by server

    相关文章

      网友评论

          本文标题:Client does not support authenti

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