MySQL 8.0上的phpMyAdmin

时间:2018-04-20 19:15:21

标签: mysql phpmyadmin database-connection mysql-8.0

我已经安装了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

18 个答案:

答案 0 :(得分:66)

使用 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 环境中完美运行:

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泊坞窗图片

但请记住,它只是开发环境中的“快速而肮脏”的解决方案。改变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

于10/04/2018更新了解决方案

通过取消注释default_authentication_plugin=mysql_native_password

中的/etc/my.cnf设置来更改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

在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 :(得分:22)

新MySQL 8.0.11使用#1 0x00000001 in ?? () #2 0x00000073 in ?? () #3 0x00000032 in ?? () #4 0x00000000 in ?? () 作为默认身份验证方法。我认为phpMyAdmin无法理解这种身份验证方法。 您需要使用较旧的身份验证方法之一创建用户,例如 all: compile run compile : gcc -I ./include/ -o ./lib/... .o -c ./src/... .c gcc -I ./include/ -o ./lib/... .o -c ./src/... .c gcc -I ./include/ -o ./lib/... .o -c ./src/... .c gcc -I ./include/ -o ./lib/... .o -c ./src/... .c gcc -I ./include/ -o ./lib/... .o -c ./src/... .c gcc -I ./include/ -o ./bin/test ./lib/... .o ./lib/... .o ./lib/... .o ./lib/... .o ./lib/... .o ./src/test.c run: gdb ./bin/test.exe

更多信息https://dev.mysql.com/doc/refman/8.0/en/create-user.htmlhttps://dev.mysql.com/doc/refman/8.0/en/authentication-plugins.html

答案 2 :(得分:14)

另一个想法:只要phpmyadmin和其他php工具无法使用它,只需将此行添加到您的文件/etc/mysql/my.cnf

True

另见: Mysql Ref

我知道这是一个安全问题,但如果这些工具不能与caching_sha2_password一起使用该怎么办?

答案 3 :(得分:12)

我通过执行以下操作解决了这个问题:

  1. default_authentication_plugin = mysql_native_password添加到
    my.cnf的[mysqld]部分
  2. 输入mysql并通过执行CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
  3. 之类的操作创建新用户
  4. 根据需要授予权限。例如。 GRANT ALL PRIVILEGES ON * . * TO 'root'@'localhost';然后FLUSH PRIVILEGES;
  5. 使用新用户登录phpmyadmin

答案 4 :(得分:10)

我去了系统

  

偏好设置 - &gt; mysql - &gt;初始化数据库 - &gt;使用旧密码加密(而不是强) - &gt;输入相同的密码

作为我的config.inc.php文件,重新启动了apache服务器并且工作正常。我仍然怀疑它,所以我停止了apache和mysql服务器并重新启动它们现在它正在工作。

答案 5 :(得分:5)

我基本上用András的答案解决了我的问题:

1-以root用户身份登录到MySQL控制台:

import numpy as np
A = np.array(((1,2),(3,4),(50,100)))
dt = np.dtype([('ID', np.int32), ('Ring', np.int32)])
B = np.array(list(map(tuple, A)), dtype=dt)
print(B['ID'])

然后输入root的密码进行身份验证。

2-我创建了一个新用户:

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

3-将所有权限授予新用户:

mysql> CREATE USER 'user'@'hostname' IDENTIFIED BY 'password';

4-使用密码更改身份验证插件:

mysql> GRANT ALL PRIVILEGES ON *.* To 'user'@'hostname';

现在,phpmyadmin可以很好地记录新用户了。

答案 6 :(得分:4)

我通过以下方式解决了这个问题:

  1. 输入系统偏好设置 - &gt; MySQL的

  2. 选择“初始化数据库”并输入新的root密码,选择“使用传统密码加密”。

  3. 使用新密码登录phpmyadmin。

答案 7 :(得分:4)

要解决此问题,我仅在mysql控制台中运行了一个查询。

使用此登录到mysql控制台

mysql -u {username} -p{password}

此后,我只运行一个查询,如下所示:-

ALTER user '{USERNAME}'@'localhost' identified with mysql_native_password by '{PASSWORD}';

当我运行此查询时,我得到该查询已执行的消息。然后使用用户名/密码登录到PHPMYADMIN。

答案 8 :(得分:3)

如果您使用的是官方的mysql docker容器,则有一个简单的解决方案:

将以下行添加到您的docker-compose服务中:

command: --default-authentication-plugin=mysql_native_password

示例配置:

mysql:
     image: mysql:8
     networks:
       - net_internal
     volumes:
       - mysql_data:/var/lib/mysql
     environment:
       - MYSQL_ROOT_PASSWORD=root
       - MYSQL_DATABASE=db
     command: --default-authentication-plugin=mysql_native_password

答案 9 :(得分:3)

我遇到了这个问题,在Windows中找不到任何ini文件,但是对我有用的解决方案非常简单。
1.打开mysql安装程序。
2.重新配置mysql服务器,这是第一个链接。
3.转到身份验证方法。
4.选择“旧式身份验证”。
5.输入您的密码(下一个字段)。
6.应用更改。

就是这样,希望我的解决方案也对您有效!

答案 10 :(得分:3)

正如@kgr所提到的,MySQL 8.0.11对身份验证方法进行了一些更改。

我已经打开了关于此问题的phpMyAdmin错误报告:https://github.com/phpmyadmin/phpmyadmin/issues/14220

MySQL 8.0.4-rc对我来说很好用,我认为MySQL在补丁级别版本中做出这样的改变是荒谬的。

答案 11 :(得分:1)

我通过运行MySQL 8.0.12解决了这个问题:

mysql_upgrade -u root

答案 12 :(得分:1)

许多人在其他答案中指出,changing the default authentication plugin of MySQL to native可以解决问题。

尽管如此,由于我无法使用新的 caching_sha2_password 插件,因此我会等到开发兼容性以关闭主题。

答案 13 :(得分:0)

就我而言,要解决此问题,我更喜欢创建一个新用户以与PhpMyAdmin一起使用,因为修改根用户已导致其他应用程序(例如MySQL WorkBench)的本机登录问题。

这就是我所做的:

  • 以root用户mysql -u root -p登录到MySQL控制台,输入密码。
  • 让我们在MySQL shell中创建一个新用户:
CREATE USER 'newMySqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlNewUsernamePassword';
  • 此时,newMysqlUsername无权对数据库执行任何操作。因此,需要向用户提供他们将需要的信息的访问权限。
GRANT ALL PRIVILEGES ON * . * TO ' newMySqlUsername'@'localhost';
  • 一旦确定了要为新用户设置的权限,请务必确保重新加载所有权限。
FLUSH PRIVILEGES;
  • 通过键入quit\q注销,您的更改将立即生效,我们可以使用新用户登录PhpMyAdmin,并且可以访问数据库。

  • 您还可以在终端中使用此命令重新登录:

mysql -u newMySqlUsername -p

答案 14 :(得分:0)

我使用了ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD';有用

答案 15 :(得分:0)

 mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword';

通过命令行登录,此后它将起作用。

答案 16 :(得分:0)

如果您正在Windows上运行Windows,可以通过运行msi重新配置安装来更改身份验证。它将要求将默认身份验证更改为传统身份验证,然后您可以继续执行该选项以将身份验证更改为传统身份验证。

答案 17 :(得分:0)

使用mysql_native_password选项创建另一个用户:

在终端中:

mysql> CREATE USER 'su'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';
mysql> GRANT ALL PRIVILEGES ON * . * TO 'su'@'localhost';
mysql> FLUSH PRIVILEGES;