MacBook上Laravel使用php artisan serve无法连接数据库(MAMP环境)
Laravel数据库连接异常:
php artisan serve失败但Apache访问正常 核心原因
Apache使用的是MAMP集成的PHP环境,而php artisan serve默认调用MacOS系统自带的PHP,两个环境的MySQL扩展配置(如Socket路径、驱动版本)不一致,导致连接失败。
解决方案
1. 强制artisan serve使用MAMP的PHP版本
找到MAMP的PHP安装路径(通常在/Applications/MAMP/bin/php/下,选择你当前使用的版本,比如php8.2.0),用该路径执行artisan命令:
/Applications/MAMP/bin/php/php8.2.0/bin/php artisan serve
如果嫌路径太长,可以在终端配置别名:
- 编辑
~/.zshrc(Zsh环境)或~/.bashrc(Bash环境),添加:
alias mamp-php='/Applications/MAMP/bin/php/php8.2.0/bin/php'
- 执行
source ~/.zshrc或source ~/.bashrc使配置生效,之后直接用:
mamp-php artisan serve
2. 指定MySQL Socket路径
MAMP的MySQL Socket路径通常为/Applications/MAMP/tmp/mysql/mysql.sock,在.env中添加该配置:
DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=my_db DB_USERNAME=root DB_PASSWORD=root DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
同时确保database.php的mysql配置中包含socket项:
'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', ''), // 确保这一行存在 ... ]
添加后执行缓存清理:
php artisan config:clear
3. 验证两个PHP环境的配置差异
分别查看系统PHP和MAMP PHP的MySQL配置,对比差异:
- 系统PHP:
php -i | grep -A 20 "mysql"
- MAMP PHP:
/Applications/MAMP/bin/php/php8.2.0/bin/php -i | grep -A 20 "mysql"
重点检查mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket这几个配置项,确保artisan serve使用的PHP环境指向正确的Socket路径。
4. 确认MAMP MySQL服务状态
打开MAMP应用,确保MySQL服务处于启动状态,且端口为3306(和配置一致)。
内容的提问来源于stack exchange,提问作者Aamish
相关产品推荐
相关产品推荐

