UPDATE


我已经安装了MySQL 8.0服务器和phpMyAdmin,但当我试图从浏览器访问它时,会出现以下错误:

#2054 - The server requested authentication method unknown to the client
mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client

我想这一定与实现的强大密码和MySQL版本的相对 fresh 度有关.

但我对最先进的驱动程序和连接配置一无所知.

是否有人遇到了同样的问题并解决了它?:D

推荐答案

root用户登录MySQL控制台:

root@9532f0da1a2a:/# mysql -u root -pPASSWORD

并在此处使用密码更改身份验证插件:

mysql> ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
Query OK, 0 rows affected (0.08 sec)

You can read more info about the Preferred Authentication Plugin on the MySQL 8.0 Reference Manual

https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password

它能在docker%的环境中完美工作:

docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -p 3306:3306 -d mysql:latest

docker exec -it mysql bash

mysql -u root -pPASSWORD

ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';

exit

exit

docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest

现在,您可以在上登录到phpMyAdminhttp://localhost:8080使用root/密码


mysql/mysql-server

如果您使用的是mysql/mysql-server docker image

But remember, it is just a 'quick and dirty' solution in the development environment. It is not wise to change the 100.

docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -e MYSQL_ROOT_HOST=% -p 3306:3306 -d mysql/mysql-server:latest
docker exec -it mysql mysql -u root -pPASSWORD -e "ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';"
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest

Updated solution at 10/04/2018

通过在/etc/my.cnf中取消注释default_authentication_plugin=mysql_native_password设置来更改MySQL默认身份验证插件

use at your own risk

docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -e MYSQL_ROOT_HOST=% -p 3306:3306 -d mysql/mysql-server:latest
docker exec -it mysql sed -i -e 's/# default-authentication-plugin=mysql_native_password/default-authentication-plugin=mysql_native_password/g' /etc/my.cnf
docker stop mysql; docker start mysql
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest

Updated workaround at 01/30/2019

docker run --name mysql -e MYSQL_ROOT_PASSWORD=PASSWORD -e MYSQL_ROOT_HOST=% -p 3306:3306 -d mysql/mysql-server:latest
docker exec -it mysql sed -i -e 's/# default-authentication-plugin=mysql_native_password/default-authentication-plugin=mysql_native_password/g' /etc/my.cnf
docker exec -it mysql mysql -u root -pPASSWORD -e "ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';"
docker stop mysql; docker start mysql
docker run --name phpmyadmin -d --link mysql:db -p 8080:80 phpmyadmin/phpmyadmin:latest

default_authentication_plugin

Updated solution at 09/13/2021

通过"password"更改用mysql_native_密码标识的用户"root"@"localhost";

  • 完全是引用*

Mysql相关问答推荐

配置MySQL服务器以管理数千个表

MySQL 8.0.34-从后端系统管理AWS RDS上的持久连接内存使用

MySQL连接序列

计算符合字段值只能包含一种事件类型这一事实的记录

MySQL 搜索列字段字符串

Golang中使用Gorm的Where条件转义字符无法正常工作的问题

将 JSON 类型的列与特定字符串值进行比较

如何在Mysql中使用With和Values

有人可以帮我用 R 编程解决这个问题吗?

获取 MySQL 中每一行之间负差的总和

如何在更新表单中使用 group by?在 SQL 中

mysql 执行注释部分

SUBSTRING_INDEX 获取第 n 个值

如何过滤表格,以便它显示最新的数据?

使用带有 ELSEIF 和 ELSE 的 3 列更新问题

如何存储百分比值?

mysqli_fetch_array() 期望参数 1 为 mysqli_result,布尔值

如何使用 SQL 数据库中的经纬度查找最近的位置?

如何在 MySQL 的日期时间字段中存储 NULL 值?

将行插入 MySQL 数据库的最有效方法