【问题标题】:phpMyAdmin on MySQL 8.0 [duplicate]MySQL 8.0 上的 phpMyAdmin [重复]
【发布时间】:2023-03-26 07:02:01
【问题描述】:

更新
较新版本的 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

【问题讨论】:

  • 你用的是什么版本的 PHP?我敢打赌这是一个驱动级别的问题,因为 phpMyAdmin 使用的是mysqli
  • PHP 版本 7.0.27-0

标签: mysql phpmyadmin database-connection mysql-8.0


【解决方案1】:

使用 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 / PASSWORD 在 http://localhost:8080 上登录 phpMyAdmin


mysql/mysql-server

如果你使用的是mysql/mysql-server docker 镜像

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

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

  • 完全用引号 *

【讨论】:

  • 祝福你。我浪费了很多时间试图弄清楚这一点。顺便说一句,在 MacOS 上使用 phpMyAdmin 和 Brew 时,我必须运行的命令是:ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'secret'(否则我得到一个“错误 1396(HY000):操作 ALTER USER 失败了” root'@'%')
  • 我尝试了这些技巧并成功了。然后我移动了mysql的文件夹,现在错误又回来了,它的工作消失了。出租车还有什么问题?
  • 请尝试我更新的解决方案。你到底是什么意思“移动了mysql的文件夹”?
  • 输入ALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';后出现如下错误:ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'。我应该在这里解决什么问题,因为我不允许 root % 进行远程访问?
  • @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】:
     mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'rootpassword';
    

    通过命令行登录,之后就可以使用了。

    【讨论】:

    • 最佳答案!!!
    • 我认为这与选择的答案相反,因为 'root'@'localhost' 而不仅仅是 root。
    • 谢谢,它对我有用
    • 谢谢它对我有用
    【解决方案4】:

    另一个想法:只要phpmyadmin和其他php工具不能用,只要把这一行添加到你的文件/etc/mysql/my.cnf

    default_authentication_plugin = mysql_native_password
    

    另请参阅: Mysql Ref

    我知道这是一个安全问题,但是如果这些工具无法使用缓存_sha2_password 怎么办?

    【讨论】:

    • 好吧,仔细想想,这并不是真正的安全问题,因为在v8之前,它总是使用mysql_native_password
    • 这个 ini 设置甚至对 MySQL 8.0.11 GA 和最新的 PHPMyAdmin 4.8.0.1 都没有帮助。 PHPMyAdmin 仍然抛出错误:mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
    • 嗯,看来改动没有采纳。你重启了 MySQL 服务器,确定没有其他配置文件了吗?
    • 是的,重新启动服务,重新启动服务器,全新安装 MySQL 8.0.11,您可以在安装程序 UI 中设置身份验证方法。没有帮助。我已经成功连接到新安装的服务器,并且在 Workbench 8.0.11-rc 的用户和权限下看到默认为 root 选择了“caching_sha2_password”。我认为这是问题所在。每个用户的设置可能会覆盖default_authentication_plugin 配置。并且在安装过程中,root 的默认设置为 sha2。
    • 对不起,没有看到你的答案。如果您从早期版本更新,也许您必须更新表结构?这在dev.mysql.com/doc/refman/8.0/en/upgrading-strategies.html 中有描述,我刚刚按照 8 和 9 中的描述启动了一个安全服务器并运行 mysql_upgrade 命令。我花了很长时间....
    【解决方案5】:

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

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

    【讨论】:

    • 我尝试使用 mysql_native_password 创建一个用户,但 mysqli 仍然无法连接。您必须更改 default_authentication_plugin 才能使其正常工作,如 user1706897 的帖子中所述。我正在对此答案投赞成票。
    • @PeteH - 你重启了 mysql 守护进程吗?
    • 我不相信我重新启动了守护进程,但它不会受到伤害。
    【解决方案6】:

    我去了系统

    首选项 -> mysql -> 初始化数据库 -> 使用旧密码加密(而不是强密码) -> 输入相同的密码

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

    【讨论】:

      【解决方案7】:

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

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

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

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

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

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

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

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

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

      mysql> ALTER USER user IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
      

      现在,phpmyadmin 可以正常记录新用户。

      【讨论】:

        【解决方案8】:

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

        使用此登录到 mysql 控制台

        mysql -u {username} -p{password}
        

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

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

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

        【讨论】:

        • 2 天寻找解决我问题的方法,这个答案终于帮我解决了。 Mac Mojave,使用 mysql 8 和 php 7.2。谢谢!
        • 我仍然无法让它工作。我运行了这个查询,但仍然无法登录。我得到相同的身份验证方法错误。查询对我没有任何改变? mysql> ALTER user 'root'@'localhost' identified with mysql_native_password by '<root pw>'; Query OK, 0 rows affected (0.01 sec)
        • 好的,原来我必须使用 '%' 而不是 'localhost',它仍然会说 0 行受到影响,但它确实改变了它。
        【解决方案9】:

        如果你使用的是官方的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
        

        【讨论】:

          【解决方案10】:

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

          1. 进入系统偏好设置->mysql

          2. 选择“初始化数据库”并选择“使用旧密码加密”输入新的根密码。

          3. 用新密码登录phpmyadmin。

          【讨论】:

          • OP 没有指定它们在 Mac 上;但是他告诉我们他使用的是 Linux 的apt-get 进行安装。但你的答案是针对 MacOS
          【解决方案11】:

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

          就是这样,希望我的解决方案也适合你!

          【讨论】:

            【解决方案12】:

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

            我已经打开了一个关于这个的 phpMyAdmin 错误报告:https://github.com/phpmyadmin/phpmyadmin/issues/14220

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

            【讨论】:

              【解决方案13】:

              使用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;
              

              【讨论】:

                【解决方案14】:

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

                不过,由于我不能使用新的 caching_sha2_password 插件,所以我会等到兼容性开发完成后才能结束话题。

                【讨论】:

                  【解决方案15】:

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

                  mysql_upgrade -u root
                  

                  【讨论】:

                    【解决方案16】:

                    就我而言,为了解决这个问题,我更喜欢创建一个新用户来使用 PhpMyAdmin,因为修改 root 用户会导致其他应用程序(例如 MySQL WorkBench)出现本机登录问题。

                    这就是我所做的:

                    • 以root用户登录MySQL控制台:mysql -u root -p,输入密码。
                    • 让我们在 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
                    

                    【讨论】:

                      【解决方案17】:

                      我用ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'PASSWORD'; 成功了

                      【讨论】:

                        【解决方案18】:

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

                        【讨论】:

                          猜你喜欢
                          • 2019-08-01
                          • 1970-01-01
                          • 2019-02-08
                          • 1970-01-01
                          • 2018-11-12
                          • 2022-08-13
                          • 2016-07-30
                          相关资源
                          最近更新 更多