【问题标题】:Cannot connect to mysql table using Lumen framework无法使用 Lumen 框架连接到 mysql 表
【发布时间】:2020-07-17 23:05:39
【问题描述】:

背景:我使用 brew 安装了 php7.2,然后使用 brew 安装了 mysql。 mysql Ver 8.0.19 for osx10.14 on x86_64 (Homebrew)。然后使用作曲家创建了我的流明项目 composer create-project --prefer-dist laravel/lumen blog

我正在尝试将数据插入到我的表中,它会在邮递员中引发错误 SQLSTATE[HY000] [1045] Access denied for user 'username'@'localhost'

这是我的 .env 文件

APP_NAME=Lumen
APP_ENV=local
APP_KEY= 9887765535434424354566gfr547633
APP_DEBUG=true
APP_URL=http://localhost
APP_TIMEZONE=UTC

LOG_CHANNEL=stack
LOG_SLACK_WEBHOOK_URL=

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=pqueue
DB_PASSWORD=password
DB_STRICT_MODE=false
DB_SOCKET=/tmp/mysql.sock

CACHE_DRIVER=array
QUEUE_DRIVER=database

在我的配置中>database.php 我有默认设置

返回 [

'default' => env('DB_CONNECTION', 'mysql'),


'connections' => [

    'sqlite' => [
        'driver' => 'sqlite',
        'database' => env('DB_DATABASE', database_path('database.sqlite')),
        'prefix' => env('DB_PREFIX', ''),
    ],

    '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' => env('DB_CHARSET', 'utf8mb4'),
        'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
        'prefix' => env('DB_PREFIX', ''),
        'strict' => env('DB_STRICT_MODE', true),
        'engine' => env('DB_ENGINE', null),
        'timezone' => env('DB_TIMEZONE', '+00:00'),
    ],

    'pgsql' => [
        'driver' => 'pgsql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', 5432),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => env('DB_CHARSET', 'utf8'),
        'prefix' => env('DB_PREFIX', ''),
        'schema' => env('DB_SCHEMA', 'public'),
        'sslmode' => env('DB_SSL_MODE', 'prefer'),
    ],

    'sqlsrv' => [
        'driver' => 'sqlsrv',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', 1433),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => env('DB_CHARSET', 'utf8'),
        'prefix' => env('DB_PREFIX', ''),
    ],

],

/*
|--------------------------------------------------------------------------
| Migration Repository Table
|--------------------------------------------------------------------------
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
| the migrations on disk haven't actually been run in the database.
|
*/

'migrations' => 'migrations',

/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer set of commands than a typical key-value systems
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/

'redis' => [

    'client' => 'predis',

    'cluster' => env('REDIS_CLUSTER', false),

    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_DB', 0),
    ],

    'cache' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => env('REDIS_CACHE_DB', 1),
    ],

],

]; `

我不确定可能是什么问题。

当我运行 php artisan migrate:refreshphp artisan migrate --env=production

In Connection.php line 664:

  SQLSTATE[HY000] [1045] Access denied for user 'pqueue'@'localhost' (using password: YES) (SQL: select * from information_schema.ta
  bles where table_schema = test and table_name = migrations and table_type = 'BASE TABLE')


In Connector.php line 70:

  SQLSTATE[HY000] [1045] Access denied for user 'pqueue'@'localhost' (using password: YES)

但是我已经授予对测试数据库中所有表的访问权限 GRANT ALL on test.* to pqueue@localhost;

我能够使用 pqueue 凭据通过 mysql 控制台创建表并在测试数据库中插入数据。所以我知道用户有足够的权限。

谁能帮我调试一下?

【问题讨论】:

  • 拒绝访问意味着用户名或密码不正确。
  • @'localhost' 暗示数据库是在你家里自己的系统上运行的?如果这在提供者的基础设施上运行,则“localhost”不起作用。您必须指定提供商给您的实际主机(域)。而且你的database.php没有指定你上面说的用户/密码。
  • @Nic3500 是的,数据库也在我的本地机器上运行。在 database.php 中,它使用来自 env 文件的凭据,除非未指定,否则它将使用 database.php 中指定的值.和错误状态一样,它从 env 文件中获取用户名 pqueue
  • @Shadow,使用这些相同的凭据我能够登录到 mysql,创建一个表以及插入该表。所以我认为凭证没有任何问题。由于某种原因,框架代码无法正确验证用户。

标签: php mysql laravel lumen


【解决方案1】:

我的问题已解决。如果其他人有类似问题,请确保您的 mysql 用户密码中没有“#”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-08
    • 2018-03-02
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2023-04-05
    相关资源
    最近更新 更多