mysql - MySQL 8.0 上的 phpMyAdmin

标签 mysql phpmyadmin database-connection mysql-8.0

更新
较新版本的 phpMyAdmin 解决了这个问题。我已经成功测试了 phpMyAdmin 5.0.1

<小时/>

我已经安装了 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 版本的相对新鲜度有关。

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

有人遇到同样的问题并解决了吗? :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)

您可以在 MySQL 8.0 引用手册上阅读有关首选身份验证插件的更多信息

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

现在您可以使用 root/密码登录 http://localhost:8080 上的 phpMyAdmin

<小时/>

mysql/mysql-server

如果您使用mysql/mysql-server码头图像

但请记住,这只是开发环境中的“快速而肮脏”的解决方案。改变MySQL Preferred Authentication Plugin是不明智的。 .

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

于 2018 年 10 月 4 日更新了解决方案

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

使用风险由您自行承担

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

于 2019 年 1 月 30 日更新了解决方法

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

于 2021 年 9 月 13 日更新了解决方案

更改用户'root'@'localhost'通过'password'识别为mysql_native_password;

  • 完全带引号 *

关于mysql - MySQL 8.0 上的 phpMyAdmin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54047303/

相关文章:

php - mysql_select_db() 导致我的 $_POST 变量为空

mysql - 如何从初始行创建多行

php - 使用带有复选框的 html post 函数

linux - tar(子): phpMyAdmin-3. 4.1-all-languages-tar.bz2:无法打开:没有这样的文件或目录

Oracle SQL 开发人员 : Failure - Test failed: The Network Adapter could not establish the connection?

mysql - 具有只读访问权限的 MySQL 的 ODBC 5.1 连接字符串

java - 插入 Date.sql 列的默认值

mysql - Sequelize 属于ToMany 不起作用

python - 1064, "You have an error in your SQL syntax"插入(另一个)

mysql - #1305 - 函数 [表名].ADD_DATE 不存在