导入大型CSV联系人文件至CiviCRM时遇504超时错误求助
解决CiviCRM导入大型CSV(60000条)时的504 Gateway Timeout问题
拆分CSV文件
把6万条数据拆成多个小文件,每个文件控制在500-1000条记录左右。CiviCRM网页端导入对单批次处理的记录数有隐性限制,小文件能大幅降低后端处理压力,避免超时。可以用Excel、LibreOffice Calc手动拆分,也能用split命令行工具批量分割,注意每个小文件要保留相同的表头。调整服务器与PHP超时配置
若有权限修改服务器设置,调整以下参数:- Apache:修改
Timeout指令(默认300秒,可提至600秒),如果用了反向代理,同步调整ProxyTimeout; - PHP:在
php.ini里把max_execution_time设为600秒以上,max_input_time同步调高,确保memory_limit足够(建议256M及以上); - CiviCRM内部:进入系统设置的「导入设置」,调低单次导入的批次大小,让系统分更多小批次处理数据。
- Apache:修改
改用CiviCRM命令行导入工具
避开网页端的超时限制,用命令行工具处理大文件:- 先安装cv工具,执行
cv import:contact path/to/your.csv,命令行模式的超时限制更宽松,适合批量导入; - 也可以基于CiviCRM API编写自定义脚本,灵活控制导入逻辑和批次,进一步降低超时风险。
- 先安装cv工具,执行
优化CSV数据格式
检查CSV里的特殊字符、空值格式,确保数据规范,避免CiviCRM处理时额外耗时;同时去掉不需要导入的字段,减少系统处理的负载。排查数据库性能瓶颈
即便带宽内存充足,导入时也要监控服务器CPU、数据库连接数。可能数据库批量写入时出现锁表或连接超时,可优化MySQL配置:比如调高max_connections、调整innodb_buffer_pool_size提升写入效率。
内容的提问来源于stack exchange,提问作者Edwin
相关产品推荐
相关产品推荐

