Laravel 5.6执行php artisan migrate出现超时错误求助
遇到过一模一样的场景——明明数据库连接验证正常,但执行php artisan migrate就是卡在查询information_schema时超时,咱们试试下面这几个实用方案:
调整MySQL的连接超时参数
有时候MySQL默认的连接超时配置会导致长操作中断。先登录MySQL执行SHOW VARIABLES LIKE '%timeout%';,查看wait_timeout和interactive_timeout的值,要是这两个值太小(比如小于300秒),建议调大。在my.cnf(Linux)或my.ini(Windows)里添加:wait_timeout = 300 interactive_timeout = 300改完重启MySQL服务再试迁移。
延长Laravel数据库连接的PDO超时
在config/database.php的mysql连接配置中,手动增加PDO的超时选项,强制延长查询等待时间:'mysql' => [ // 保留原有的host、database、username等配置 'options' => [ PDO::ATTR_TIMEOUT => 120, // 设置为120秒,可根据实际情况调整 ], ],保存配置后重新执行迁移命令。
手动创建migrations表跳过检测
既然已经确认数据库连接正常,咱们可以绕开Laravel对migrations表的自动检测,手动在目标数据库中创建该表:CREATE TABLE migrations ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, migration VARCHAR(255) NOT NULL, batch INT NOT NULL );创建完成后再运行
php artisan migrate,此时Laravel会直接执行迁移文件,无需再查询information_schema判断表是否存在。检查数据库服务器负载状态
有时候不是配置问题,而是数据库服务器当时负载过高(比如CPU、内存占满),导致查询information_schema响应缓慢。可以用top(Linux)或者任务管理器(Windows)查看服务器资源使用情况,要是有其他进程占用过多资源,先处理掉再尝试迁移。确认数据库用户的information_schema权限
虽然你用代码验证了连接正常,但要确保数据库用户拥有查询information_schema的权限。登录MySQL执行:GRANT SELECT ON information_schema.* TO '你的数据库用户名'@'你的主机地址'; FLUSH PRIVILEGES;给用户授予对应权限后再试迁移。
内容的提问来源于stack exchange,提问作者khalil

