在 Laravel 中拒绝使用套接字连接到数据库
Connection to DB with socket refused in Laravel
我知道关于这个问题的 SO 和 Google 有很多点击,但我似乎仍然有一个独特的问题。
错误信息:
SQLSTATE[HY000] [2002] 连接被拒绝
配置
'mysql' => array(
'driver' => 'mysql',
"host" => "localhost:/var/run/mysqld4.sock",
'port' => '3304',
"username" => "admin",
"password" => "admin",
"database" => "frontend_generic",
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => 'pre_',
),
我确认我的数据库在 运行 端口 3304 上,我的前缀是正确的,用户、数据库和密码也是如此。
对于主机,我尝试了 "localhost"、“127.0.0.1”、“http://127.0.0.1”,甚至是服务器的实际 IP 地址。
仍然没有运气或改变。我尝试在本地 database.php 文件中使用完全相同的配置,但正如预期的那样,没有任何变化。
没有选择,我在这里错过了什么?
更新:
这是使用此配置的另一个应用程序的代码。这是 Kohana,不是 Laravel,但它有效。
"general" => array
(
"type" => "mysql",
"connection" => array
(
"hostname" => "localhost:/var/run/mysqld4.sock",
"username" => "admin",
"password" => "admin",
"persistent" => FALSE,
"database" => "frontend_generic",
),
"table_prefix" => "pre_",
"charset" => "utf8",
"caching" => FALSE,
"profiling" => TRUE,
),
数组在 Laravel 5 中应该是这样的:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
在位于项目根目录的 .env 文件中,请更改您需要调整的设置,然后像这样重试。真的很难说是什么导致了这个问题,所以试一试吧。
示例 .env 文件
APP_ENV=local
APP_DEBUG=true
APP_KEY=SomeRandomString
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
CACHE_DRIVER=file
SESSION_DRIVER=file
在使用您的凭据创建文件后,正如我评论的那样,请调用文件 .env 并将其放在项目的根目录中。还要确保检查位于 storage/logs/laravel-todays_date.txt 的今天的 Laravel 日志,并在此处报告任何错误。
您应该将 "host" 更改为实际的服务器 IP 地址,仅此而已。所以,摆脱套接字的东西。
在 laravel 5 中使用套接字时,请使用 unix_socket
配置而不是 host
和 port
.
虽然更改为 IP 地址确实有效,但当数据库服务器位于同一台计算机上时使用套接字可能会有优势。
更正最初发布的配置:
'mysql' => array(
'driver' => 'mysql',
"unix_socket" => "/var/run/mysqld4.sock",
"username" => "admin",
"password" => "admin",
"database" => "frontend_generic",
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => 'pre_',
),
我知道关于这个问题的 SO 和 Google 有很多点击,但我似乎仍然有一个独特的问题。
错误信息: SQLSTATE[HY000] [2002] 连接被拒绝
配置
'mysql' => array(
'driver' => 'mysql',
"host" => "localhost:/var/run/mysqld4.sock",
'port' => '3304',
"username" => "admin",
"password" => "admin",
"database" => "frontend_generic",
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => 'pre_',
),
我确认我的数据库在 运行 端口 3304 上,我的前缀是正确的,用户、数据库和密码也是如此。
对于主机,我尝试了 "localhost"、“127.0.0.1”、“http://127.0.0.1”,甚至是服务器的实际 IP 地址。
仍然没有运气或改变。我尝试在本地 database.php 文件中使用完全相同的配置,但正如预期的那样,没有任何变化。
没有选择,我在这里错过了什么?
更新:
这是使用此配置的另一个应用程序的代码。这是 Kohana,不是 Laravel,但它有效。
"general" => array
(
"type" => "mysql",
"connection" => array
(
"hostname" => "localhost:/var/run/mysqld4.sock",
"username" => "admin",
"password" => "admin",
"persistent" => FALSE,
"database" => "frontend_generic",
),
"table_prefix" => "pre_",
"charset" => "utf8",
"caching" => FALSE,
"profiling" => TRUE,
),
数组在 Laravel 5 中应该是这样的:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
在位于项目根目录的 .env 文件中,请更改您需要调整的设置,然后像这样重试。真的很难说是什么导致了这个问题,所以试一试吧。
示例 .env 文件
APP_ENV=local
APP_DEBUG=true
APP_KEY=SomeRandomString
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
CACHE_DRIVER=file
SESSION_DRIVER=file
在使用您的凭据创建文件后,正如我评论的那样,请调用文件 .env 并将其放在项目的根目录中。还要确保检查位于 storage/logs/laravel-todays_date.txt 的今天的 Laravel 日志,并在此处报告任何错误。
您应该将 "host" 更改为实际的服务器 IP 地址,仅此而已。所以,摆脱套接字的东西。
在 laravel 5 中使用套接字时,请使用 unix_socket
配置而不是 host
和 port
.
虽然更改为 IP 地址确实有效,但当数据库服务器位于同一台计算机上时使用套接字可能会有优势。
更正最初发布的配置:
'mysql' => array(
'driver' => 'mysql',
"unix_socket" => "/var/run/mysqld4.sock",
"username" => "admin",
"password" => "admin",
"database" => "frontend_generic",
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => 'pre_',
),