我已经安装了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
使用apt安装编辑
apt-get install mysql-server phpmyadmin
András Szabá..
86
使用root用户登录MySQL控制台:
root@9532f0da1a2a:/# mysql -u root -pPASSWORD
并使用密码更改Authentication Plugin:
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 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/PASSWORD 在http:// localhost:8080上登录phpMyAdmin
MySQL的/ MySQL的服务器
如果您使用的是mysql/mysql-server docker镜像
但请记住,它只是开发环境中的"快速而肮脏"的解决方案.更改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 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
在10/04/2018更新了解决方案
通过取消注释default_authentication_plugin=mysql_native_password
设置来更改MySQL默认身份验证插件 /etc/my.cnf
使用风险自负
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
在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
1> András Szabá..:
使用root用户登录MySQL控制台:
root@9532f0da1a2a:/# mysql -u root -pPASSWORD
并使用密码更改Authentication Plugin:
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 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/PASSWORD 在http:// localhost:8080上登录phpMyAdmin
MySQL的/ MySQL的服务器
如果您使用的是mysql/mysql-server docker镜像
但请记住,它只是开发环境中的"快速而肮脏"的解决方案.更改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 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
在10/04/2018更新了解决方案
通过取消注释default_authentication_plugin=mysql_native_password
设置来更改MySQL默认身份验证插件 /etc/my.cnf
使用风险自负
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
在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
祝福你.我浪费了很多时间试图解决这个问题.顺便说一下,在MacOS上使用phpMyAdmin与Brew时,我必须运行的命令是:ALTER USER root @ localhost IDENTIFIED WITH mysql_native_password BY'secret'(否则我收到了"ERROR 1396(HY000):操作ALTER USER失败'根'@'%')
@Pathros你应该改变用户root @'localhost'IDENTIFIED WITH mysql_native_password BY'PASSWORD'; ...所以直接指定localhost
2> 小智..:
新的MySQL 8.0.11 caching_sha2_password
用作默认身份验证方法.我认为phpMyAdmin无法理解这种身份验证方法.您需要使用旧的身份验证方法之一创建用户,例如CREATE USER xyz@localhost IDENTIFIED WITH mysql_native_password BY 'passw0rd'
.
更多信息请访问https://dev.mysql.com/doc/refman/8.0/en/create-user.html和https://dev.mysql.com/doc/refman/8.0/en/authentication-plugins.html
3> 小智..:
另一个想法:只要phpmyadmin和其他php工具无法使用它,只需将此行添加到您的文件/etc/mysql/my.cnf
default_authentication_plugin = mysql_native_password
另请参见:
Mysql参考
我知道这是一个安全问题,但如果工具不能与caching_sha2_password一起使用该怎么办?
4> 小智..:
我通过执行以下操作解决了这个问题:
添加default_authentication_plugin = mysql_native_password
到
my.cnf 的[mysqld]部分
输入mysql并通过执行类似操作创建新用户 CREATE USER
'root'@'localhost' IDENTIFIED BY 'password';
必要时授予权限.呃GRANT ALL PRIVILEGES ON * . * TO
'root'@'localhost';
然后FLUSH PRIVILEGES;
用新用户登录phpmyadmin
5> 小智..:
我去了系统
首选项 - > mysql - >初始化数据库 - >使用旧密码加密(而不是强) - >输入相同的密码
作为我的config.inc.php
文件,重新启动apache服务器,它工作.我仍然怀疑它,所以我停止了apache和mysql服务器并再次启动它们,现在它正在工作.
6> Lakhwinder S..:
要解决此问题,我只需在mysql
控制台中运行一个查询。
对于使用此登录到mysql控制台
mysql -u {username} -p{password}
之后,我只运行一个查询,如下所示:
ALTER user '{USERNAME}'@'localhost' identified with mysql_native_password by '{PASSWORD}';
当我运行此查询时,我得到该查询已执行的消息。然后使用用户名/密码登录到PHPMYADMIN。
7> 小智..:
我基本上用András的答案解决了我的问题:
1-使用root用户登录MySQL控制台:
root@9532f0da1a2a:/# mysql -u root -pPASSWORD
并输入auth的root用户密码.
2-我创建了一个新用户:
mysql> CREATE USER 'user'@'hostname' IDENTIFIED BY 'password';
3-授予新用户所有权限:
mysql> GRANT ALL PRIVILEGES ON *.* To 'user'@'hostname';
4-使用密码更改Authentication Plugin:
mysql> ALTER USER user IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
现在,phpmyadmin可以很好地记录新用户.
8> 小智..:
我遇到了这个问题,在Windows中找不到任何ini文件,但是对我有用的解决方案非常简单。
1.打开mysql安装程序。
2.重新配置mysql服务器,这是第一个链接。
3.转到身份验证方法。
4.选择“旧版身份验证”。
5.输入您的密码(下一个字段)。
6.应用更改。
就是这样,希望我的解决方案也对您有效!