13

我使用 docker,我有一个 Laravel Framework 5.5.25 容器和其他带有 mysql Ver 8.0.11 for Linux on x86_64 (MySQL Community Server - GPL) 的容器。在我的 docker compose 配置中,我有这个:

version: "2"
services:
    mysql:
    image: mysql
        ports:
            - "3307:3306"
        command: --sql_mode=""

因此,当 Laravel 尝试连接到 MySql 时,出现此错误:

SQLSTATE[HY000] [2054] 服务器请求客户端未知的身份验证方法(SQL: select * from

4

6 回答 6

20

对于 MySQL 8 和 PHP7+,您必须使用旧式密码:

ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';
于 2018-06-27T07:00:54.090 回答
11

对于使用 Laravel Valet 进行本地开发,我可以使用 TablePlus SQL 查询编辑器通过键入以下内容来解决此问题

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

我希望它也可以帮助某人。

于 2020-04-21T03:42:17.293 回答
5

我正在使用 laravel 5.8 并让 MAMP 服务器通过添加DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock如下所示的 .env 文件来解决此错误


DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=dbname
DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

正如我在少数博客中发现的那样,它通常是因为最新 MySQL 版本的套接字问题

于 2019-10-03T07:01:19.213 回答
0

如果您正在寻找 Laravel 方式,只需简单的编辑 config/database.php

并将modes数组添加到 MySQL 部分:

 'connections' => [

        'mysql' => [
            'driver'      => 'mysql',
            'host'        => env( 'DB_HOST', '127.0.0.1' ),
            'port'        => env( 'DB_PORT', '3306' ),
            'database'    => env( 'DB_DATABASE', 'forge' ),
            'username'    => env( 'DB_USERNAME', 'forge' ),
            'password'    => env( 'DB_PASSWORD', '' ),
            'unix_socket' => env( 'DB_SOCKET', '' ),
            'charset'     => 'utf8mb4',
            'collation'   => 'utf8mb4_unicode_ci',
            'prefix'      => '',
            'strict'      => true,
            'engine'      => null,
            'modes'       => [
                'ONLY_FULL_GROUP_BY',
                'STRICT_TRANS_TABLES',
                'NO_ZERO_IN_DATE',
                'NO_ZERO_DATE',
                'ERROR_FOR_DIVISION_BY_ZERO',
                'NO_ENGINE_SUBSTITUTION',
            ],
        ],
    ],
于 2020-05-04T19:35:29.747 回答
0

参考:https ://github.com/laradock/laradock/issues/1392#issuecomment-368308494

  1. 将默认身份验证插件添加到 /etc/mysql/my.cnf

    [mysqld]
    default_authentication_plugin= mysql_native_password
    
  2. 登录以mysql创建新用户,如下所示,

    CREATE USER 'admin'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpass';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
    CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpass';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
    #
    CREATE DATABASE IF NOT EXISTS `yourdb` COLLATE 'utf8_general_ci' ;
    GRANT ALL ON `yourdb`.* TO 'admin'@'%' ;
    FLUSH PRIVILEGES ;
    

注意:删除旧用户、数据库并通过上述脚本重新创建。

于 2022-02-22T10:01:33.330 回答
-1

不要忘记生成应用程序密钥并将其分配给.env文件中的APP_KEY变量。

php artisan key:generate --show

然后清除缓存:

php artisan config:cache

于 2020-03-23T04:39:37.443 回答