504本质是Nginx主动断连而非PHP无响应,需同步调高fastcgi_read_timeout、request_terminate_timeout及宝塔面板超时设置,并设phpMyAdmin的$cfg['ExecTimeLimit'] = 0,否则仍会静默截断。

phpMyAdmin导出大表时返回504,本质是Nginx主动断连
不是PHP没响应,而是Nginx在等PHP-FPM返回SQL内容时,自己先放弃了。看到空白页、504、或日志里upstream timed out (110: Connection timed out),基本就是fastcgi_read_timeout卡死在默认60秒——哪怕PHP还在拼命拼SQL,Nginx已经挥手再见。
必须同步调高三处超时,缺一不可
只改Nginx或只改PHP-FPM,90%会继续504。关键三处要一致且生效:
-
fastcgi_read_timeout(Nginx配置):放在location ~ \.php$块内,不能只写在server顶层;设为300或更高 -
request_terminate_timeout(PHP-FPM配置):单位必须带s,如300s;值必须≥max_execution_time - 宝塔用户额外注意:
网站超时时间(宝塔面板界面底部隐藏项)也要同步改成300,否则白配
改完必须重启PHP-FPM进程(不是重载),用ps aux | grep php-fpm确认启动时间已更新。
phpMyAdmin自身限制比Nginx还狠
即使Nginx和PHP-FPM都放宽了,phpMyAdmin仍可能中途放弃导出——它有自己的执行时间兜底:
立即学习“PHP免费学习笔记(深入)”;
- 打开
config.inc.php,确认有$cfg['ExecTimeLimit'] = 0;(设为0才真正不限制) - 导出模式必须选
Custom,Quick模式对大表直接丢数据 -
Maximal length of created query建议调到50000,避免INSERT被切太碎拖慢整体速度
不关掉$cfg['ExecTimeLimit'],前面所有Nginx/FPM调优都只是给它多撑几秒而已。
导出完成后必须验证文件是否完整
phpMyAdmin导出中断不会报错,只会给你一个半截SQL文件。两步快速验证:
- 用文本编辑器打开导出的
.sql文件,搜索COMMIT;——它应出现在文件末尾附近;若完全找不到,或只出现在中间某处,说明被截断 - 搜索
CREATE TABLE出现次数,和phpMyAdmin左侧数据库名后括号里的表数对比,不一致就是漏表
大库导出最危险的不是失败,而是“看起来成功了”。静默截断比报错更难排查。



















