簡體   English   中英

Laravel 5.3將無法連接到MySQL

[英]Laravel 5.3 wont connect to mysql

我在Macbook Air(OS X版本10.11.2)上創建了一個新用戶。 新用戶具有完全的管理員訪問權限。 我正在使用MAMP。 MySQL端口設置為3306。我可以使用其他所有功能連接到MySQL。 我所有的Laravel項目都停止了與MySQL的連接。 當我嘗試使用

php artisan migrate

我得到:

[PDOException]                             
SQLSTATE[HY000] [2002] Connection refused  

這是我的.env的數據庫部分:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=store
DB_USERNAME=clerk
DB_PASSWORD=inventory

我嘗試使用root用戶和密碼。 我嘗試使用其他端口。 我嘗試將主機切換為localhost。 我已驗證用戶名和密碼正確,並且用戶可以訪問數據庫。 這是我的config / database.php文件的MySQL部分:

'mysql' => [
  'driver' => 'mysql',
  'host' => env('DB_HOST', '127.0.0.1'),
  'port' => env('DB_PORT', '3306'),
  'database' => env('DB_DATABASE', 'store'),
  'username' => env('DB_USERNAME', 'clerk'),
  'password' => env('DB_PASSWORD', 'inventory'),
  'charset' => 'utf8',
  'collation' => 'utf8_unicode_ci',
  'prefix' => '',
  'strict' => true,
  'engine' => null,
],

我已經搜尋了幾天,但似乎找不到答案。 我以前的Laravel 5.2項目也不會連接。 我很確定這是由創建新用戶引起的,但是我對MySQL的了解還不足以找出問題所在。

嘗試更改您的db_host = localhost:3306

您定義一個engine = null 據我所知,該引擎在MySqlGrammar.php內部專門用於編譯創建查詢時使用。 我只看到VIEWS的空引擎。

嘗試以下配置:

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'store'),
    'username' => env('DB_USERNAME', 'clerk'),
    'password' => env('DB_PASSWORD', 'inventory'),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
],

您確實在問題中提到了它,並認為以下內容可在終端上使用

mysql -uclerk -pinventory -h127.0.0.1 -P3306 store

可能是需要

mysql -uclerk -pinventory -hlocalhost -P3306 store

您可以通過在項目中僅使用info.php文件來檢查其他內容,以PDO作為模塊的引用仔細檢查一切是否正常。

<?php
phpinfo();

然后還可以玩一些PDO php腳本,看看您的連接是否工作正常。 就像是:

<?php
$servername = "127.0.0.1";
$username = "clerk";
$password = "inventory";

try {
    $conn = new PDO("mysql:host=$servername;port=3306;dbname=store;", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

您還可以在虛擬路由內部檢查env('DB_DATABASE')等給您的內容。

更新了檢查內容2016.09.15

為確保env()正在獲取正確的信息,請在下面添加路由,然后在此添加以下內容:

Route::get('dbtest', function () {
    $config = [
        'host' => env('DB_HOST'),
        'port' => env('DB_PORT'),
        'database' => env('DB_DATABASE'),
        'username' => env('DB_USERNAME'),
        'password' => env('DB_PASSWORD'),
    ];
    dd($config);
});

然后,以root用戶身份訪問mysql並包含select語句的輸出:

mysql> select host, user, password, authentication_string, password_expired from mysql.user;

當您使用MAMP時,請確保使用/Applications/MAMP/Library/bin/mysql的mysql命令行工具

解決了 經過幾個小時的梳理,我決定接受@nyedidikeke的建議並重新安裝mysql。 我正在使用MAMP,並且一直想停止使用它一段時間。 我卸載了它,並通過Homebrew安裝了mysql。 一切正常,感謝您的幫助!

遵循我在問題下方的注釋中建議的故障排除流程后,所有流程均應按預期工作。

如果不是這種情況,您肯定會丟失一些東西; ...我認為是PATH問題。

建議您導出數據庫 ,卸載MySQL,然后在此處下載一個新數據庫

請按照此處闡述的方法進行修復。

這樣,您的挑戰一定會得到解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM