在 laravel 中配置 mysql 连接,核心是修改项目根目录下的 .env 文件中的数据库环境变量,框架会自动读取这些值并建立连接。你需要设置 db_connection、db_host、db_port、db_database、db_username 和 db_password 这六个关键参数,确保它们与你的本地或服务器 mysql 实例一致。配置完成后,建议运行 php artisan config:clear 清除配置缓存,以立即生效新的连接设置。

Laravel 如何从 .env 加载数据库配置
Laravel 通过 config/database.php 配置文件作为中间层,将 .env 中的环境变量映射为具体的数据库连接参数。当应用启动时,Laravel 会读取 .env 文件,并使用 env() 辅助函数获取值,填入 mysql 连接数组中。这种设计允许你在不修改代码的情况下,通过更改环境变量来切换不同的数据库环境(如开发、测试、生产)。

DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=my_database DB_USERNAME=root DB_PASSWORD=secret
上述代码展示了 .env 文件中典型的 MySQL 配置片段。开发者需要确保 DB_DATABASE 指向一个已存在的数据库,或者在首次迁移时由 Laravel 自动创建(取决于驱动和配置)。如果 .env 文件被修改,必须重启 PHP-FPM 或 Artisan 服务,因为环境变量通常在进程启动时加载一次。对于使用配置缓存的项目,运行 php artisan config:cache 会将当前环境变量固化到配置文件中,此时再修改 .env 不会立即生效,需先执行 php artisan config:clear。
MySQL 连接配置的结构与验证
config/database.php 中的 connections 数组定义了所有可用的数据库连接,其中 mysql 键对应的数组包含了连接的具体细节。除了基本的主机、端口、用户名和密码外,还可以配置字符集、排序规则、前缀以及持久连接等高级选项。这些配置项直接传递给 PDO 或 MySQLi 驱动,影响连接的建立方式和行为。
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。

return [
'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,
],
],
];
在实际使用中,开发者可以通过 php artisan tinker 进入交互式控制台,尝试执行一个简单的查询来验证连接是否成功。例如,运行 DB::connection()->getPdo(); 如果返回一个 PDO 对象,说明连接正常;如果抛出异常,则检查 .env 中的凭据是否正确,以及 MySQL 服务是否正在运行。此外,strict 参数设置为 true 时,Laravel 会启用 MySQL 的严格模式,防止非法数据插入,这在开发阶段有助于发现潜在的数据问题。
当 DB_HOST 为 localhost 时的连接行为差异
当 .env 中的 DB_HOST 设置为 localhost 时,PHP 的 PDO 或 MySQLi 扩展通常会优先尝试使用 Unix 域套接字(Unix Socket)进行连接,而不是 TCP/IP。这与设置为 127.0.0.1 不同,后者强制使用 TCP/IP 协议。这种差异可能导致在某些环境中连接失败,特别是当 MySQL 服务器的套接字文件路径与默认预期不一致时。
为了解决这个问题,可以在 config/database.php 中显式指定 unix_socket 参数,或者将 DB_HOST 改为 127.0.0.1 以强制使用 TCP/IP。如果选择使用套接字,需要确保 DB_SOCKET 环境变量指向正确的 socket 文件路径,例如 /var/run/mysqld/mysqld.sock。通过这种方式,可以明确控制连接方式,避免因环境差异导致的连接问题。

















