Ubuntu下运行php artisan migrate提示No such file or directory如何解决
报错原因
这个SQLSTATE[HY000] [2002] No such file or directory是PHP无法连接MySQL服务导致的,核心原因有2类:
- 系统连接
localhost的机制差异:Windows环境下PHP连接localhost默认走TCP协议,而Ubuntu环境下默认走Unix Socket文件,你的项目没有配置正确的Socket路径,导致PHP找不到对应的连接文件。 - 其他基础配置问题:MySQL服务未启动、数据库账号权限不匹配、数据库未提前创建也会触发同类报错。
解决方案
按优先级依次尝试以下操作即可:
- 优先修改
.env配置,强制走TCP连接:
将DB_HOST=localhost改为DB_HOST=127.0.0.1,保存后执行php artisan config:clear清理配置缓存,再重新运行php artisan migrate测试,90%以上的同类型问题都可以通过这个操作解决。 - 若修改后仍报错,先检查MySQL服务状态:
执行sudo systemctl status mysql查看服务运行状态,若显示未启动,执行sudo systemctl start mysql启动服务,需要开机自启可以额外执行sudo systemctl enable mysql。 - 检查数据库和账号权限配置:
执行sudo mysql -u root -p登录MySQL命令行,先运行SHOW DATABASES;确认已创建blog数据库,未创建的话执行CREATE DATABASE blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;创建。再执行GRANT ALL ON blog.* TO 'blog'@'localhost' IDENTIFIED BY '你的数据库密码';给blog账号分配对应数据库的权限,注意和.env里的DB_PASSWORD配置保持一致。 - 若需要用Unix Socket连接:
先执行mysql_config --socket获取Socket文件实际路径,在.env中新增一行DB_SOCKET=刚才查到的Socket路径,清理缓存后重新执行迁移命令即可。
内容的提问来源于stack exchange,提问作者Seif Khédija
相关产品推荐
相关产品推荐

