mac下laravel 7数据库连接关键在php扩展、mysql服务、.env配置三者就绪:需启用pdo_mysql,验证mysql -u root -p可登录,db_host用127.0.0.1而非localhost,db_port按实际(如mamp为8889),改完运行php artisan config:clear,并用db::connection()->getpdo()快速验证。

Mac 下 Laravel 7 设置数据库连接和 Linux 或 Windows 没本质区别,关键不是系统,而是 PHP 环境是否就绪、MySQL 服务是否运行、以及配置是否被正确加载。Laravel 7 默认不带 pdo_mysql 扩展,Mac 上常因 Homebrew 安装的 PHP 和系统自带 MySQL(或 MAMP/XAMPP)路径不一致导致“Connection refused”或“Driver not found”。
确认本地 MySQL 服务在运行且端口可访问
Mac 上常见三种 MySQL 部署方式:Homebrew 安装、MAMP、Docker。无论哪种,先验证能否连上:
- 终端执行
mysql -u root -p,能登录说明服务正常;如果报Command not found,说明mysql命令没加到 PATH,需手动补全路径(如/usr/local/bin/mysql或/Applications/MAMP/Library/bin/mysql) - 用
lsof -i :3306查看 3306 是否被监听;若用 MAMP,默认端口是 8889,DB_PORT就得设成8889,不能照抄文档写 3306 - Homebrew 安装的 MySQL 8.0 默认启用 caching_sha2_password 认证插件,而 Laravel 7 的
pdo_mysql可能不兼容——临时解决是进 MySQL 执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
确保 PHP 已启用 pdo_mysql 扩展
Laravel 7 要求 PHP 7.2.5+,但 macOS 自带 PHP 已弃用,务必用 Homebrew 或 XAMPP 提供的版本。检查扩展是否启用:
- 运行
php -m | grep pdo,应看到pdo和pdo_mysql;若只有pdo,说明pdo_mysql没启用 - 用
php --ini找到Loaded Configuration File路径,打开php.ini,确认有extension=pdo_mysql这一行(取消注释),然后重启 PHP-FPM 或 Apache - 如果用 Valet,执行
valet restart;如果用 artisan serve,关掉再重起,否则新扩展不会生效
.env 文件必须匹配实际部署方式
Laravel 7 优先读 .env,而不是 config/database.php 里的硬编码值。Mac 用户最容易错在路径和权限上:
-
DB_HOST别写localhost—— macOS 下它可能走 socket 而非 TCP,改用127.0.0.1更稳 -
DB_DATABASE必须是已创建的库名,不能只写目录路径(SQLite 才需要绝对路径) - MAMP 用户注意:
DB_HOST是127.0.0.1,DB_PORT是8889(MySQL)或8890(MariaDB),DB_USERNAME默认是root,密码为空,即DB_PASSWORD= - 改完 .env 后必须运行
php artisan config:clear,Laravel 7 不会自动重载环境变量
用 tinker 快速验证连接是否真通
别等跑 migration 或页面报错才排查,直接进交互式终端测最准:
- 运行
php artisan tinker,然后输入:DB::connection()->getPdo();—— 如果返回 PDO 实例,说明连上了;如果抛出异常,错误信息就是真实原因(比如 “Connection refused” 是端口错,“Access denied” 是账号密码错) - 避免用
DB::table('users')->get()测,因为表可能不存在;getPdo()只建连接,不查表,更快更干净 - 如果用的是 MySQL 8.0+ 且遇到
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client,回到上一步改认证方式,这是 Mac + MySQL 8.0 组合的高频坑
Mac 下 Laravel 7 数据库连接失败,八成不是框架问题,而是本地环境链路断在某一处:MySQL 没启动、PHP 扩展没开、.env 端口写错、或认证协议不兼容。每步都用命令行直接验证,比翻日志快得多。











