用 wp search-replace 批量替换旧域名 跑到 wp_postmeta 这张大表就停了 终端报 Allowed memory size exhausted 前面几张表其实已经改完 整个进程直接被杀掉。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
wp search-replace old.com new.com --all-tables --dry-run wp search-replace old.com new.com wp_postmeta --chunk=500 wp config get WP_MEMORY_LIMIT
wp-cli 默认把整张表读进内存再替换 postmeta 几十万行加上序列化解析 128M 的上限根本撑不住 进程被杀在半路 内存峰值比表本身还大不少。这一点先确认清楚,后面就不用反复试。
「search-replace 内存不足」这类改动最怕改一半,回滚脚本先准备好,再动生产。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
具体做法是,先加 --dry-run 确认影响范围 同时看是哪张大表把它撑爆;用 --chunk=1000 这个参数分页处理 把单次读入的行数降下来;内存还是不够就临时把 WP_CLI 运行时的 memory_limit 上限直接调到 512M。
改完照着核一遍,命令能完整跑完不再掉线 最后报告里剩余待替换数量归零。
