Laravel对接MySQL 8需确保环境配置正确、驱动兼容、连接参数完整:验证PHP支持caching_sha2_password,.env中完整填写DB配置并清缓存,SSL连接需配置CA证书,最后用DB::connection()->getPdo()测试连通性。

直接在 Laravel 项目中对接 MySQL 8 数据库,核心是三点:环境配置正确、驱动兼容、连接参数完整。MySQL 8 默认启用了更强的安全策略(如 caching_sha2_password 认证插件和强制 SSL),很多报错(比如 SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client 或 [2002] Connection refused)都源于此,不是代码写错了,而是配置没对上。
确认 PHP 和驱动支持 MySQL 8
Laravel 8+ 默认支持 MySQL 8,但前提是底层 PHP 环境已启用 pdo_mysql 扩展,且版本不低于 7.2.16 或 7.3.3(推荐 PHP 8.0+)。运行以下命令验证:
-
php -m | grep pdo_mysql—— 确保输出包含pdo_mysql -
php --ri pdo_mysql—— 查看是否支持caching_sha2_password(关键)
如果提示不支持,需升级 PHP 或重新编译扩展。不要尝试降级 MySQL 认证方式(如改回 mysql_native_password),这会削弱安全性,应优先适配新协议。
正确配置 .env 文件
在项目根目录的 .env 中填写真实数据库信息,注意字段必须完整,尤其端口和密码为空时要显式留空:
DB_CONNECTION=mysql-
DB_HOST=your-mysql8-server-ip-or-hostname(非localhost,远程请用公网/内网 IP) -
DB_PORT=3306(MySQL 8 默认端口,若自定义请同步修改) DB_DATABASE=your_db_nameDB_USERNAME=your_user-
DB_PASSWORD=your_strong_password(即使为空也写DB_PASSWORD=)
保存后务必执行:php artisan config:clear —— 否则缓存会导致新配置不生效。
处理 MySQL 8 特有安全要求
如果你的 MySQL 8 实例启用了 SSL(如 DigitalOcean 托管数据库),或用户被限制仅允许 SSL 连接,需在 config/database.php 的 mysql 连接配置中补充 SSL 参数:
- 下载服务商提供的 CA 证书(如
ca.pem),放在storage/app/certs/下 - 在
config/database.php的'mysql'数组里添加:
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => base_path('storage/app/certs/ca.pem'),
// 可选:PDO::MYSQL_ATTR_SSL_CERT, PDO::MYSQL_ATTR_SSL_KEY
]) : [],同时确保 .env 中设置了:MYSQL_ATTR_SSL_CA=storage/app/certs/ca.pem(Laravel 会自动读取该变量注入)
验证连接是否成功
别急着跑迁移,先用最轻量方式测试连通性:
- 运行
php artisan tinker - 输入:
DB::connection()->getPdo(); - 若返回 PDO 对象,说明连接成功;若报错,错误信息会直接指出问题(如认证失败、主机拒绝、SSL 验证失败等)
常见失败原因按优先级排查:MySQL 用户是否授权从你的 IP 连接(CREATE USER 'user'@'your_ip' IDENTIFIED BY 'pass'; GRANT ALL ON db.* TO 'user'@'your_ip'; FLUSH PRIVILEGES;)、防火墙是否放行 3306 端口、MySQL 服务是否监听外部地址(检查 bind-address 是否为 0.0.0.0 或具体 IP)。


















