bin/magento indexer:status 长时间显示 Processing,第一反应往往是 reset。但后台如果还有索引进程在跑,强行启动第二个只会放大数据库压力。
先证明它真的死了
php bin/magento indexer:status
ps aux | grep '[b]in/magento indexer'
SHOW FULL PROCESSLIST;仍能看到 PHP 进程,而且 SQL 扫描行数、临时表或 CPU 在变化,它可能只是慢。先看磁盘空间、临时目录及 metadata lock。进程已经不存在,状态却几小时不变,才属于残留状态。
php bin/magento indexer:reset catalogsearch_fulltext
php bin/magento indexer:reindex catalogsearch_fulltext只处理对应索引器,不要为了省事全部 reset。
Update by Schedule 还要查 mview
计划模式下变化先写入 changelog。索引状态正常但前台数据旧,常见原因是订阅的 version_id 没推进:
SELECT view_id, mode, status, version_id, updated
FROM mview_state
ORDER BY updated ASC;比较 version_id 与对应 *_cl 表最大版本。不要随便 TRUNCATE changelog,那可能跳过尚未消费的商品变化。先备份状态,再决定全量重建或从正确版本继续。
恢复后还要回答为什么卡
若总在同一商品或 SQL 停住,查异常数据、缺失索引、锁等待和插件;若只在高峰发生,考虑计划模式并为 cron 留独立资源。安全恢复只是第一步,找到导致 Processing 没正常收尾的进程或 SQL 才算闭环。

