WordPress升级中断导致wp_options表锁死,需手动删除core_updater.lock等锁记录并清空对象缓存;若db_version不匹配,应运行wp core update-db --force或检查多站点sitemeta表;切勿truncate所有lock项,仅精准清理核心升级相关锁键名,并操作前备份wp_options表。
WordPress升级中断后 wp_options 表被锁死怎么办
升级卡在“正在更新数据库”页面,反复刷新跳转到同一地址,后台无法访问——大概率是 wp_options 表里 core_updater.lock 或 auto_updater.lock 这类锁记录没被清除。wordpress 的升级流程依赖这些键值做互斥控制,中断后不会自动释放。
直接进数据库删掉对应记录就行,别等它超时(默认锁有效期 15 分钟,但某些主机或插件会覆盖这个逻辑)。
- 用 phpMyAdmin、Adminer 或命令行连上数据库,定位到
wp_options表(前缀可能不是wp_,查wp-config.php里的$table_prefix) - 执行 SQL:
DELETE FROM `wp_options` WHERE `option_name` LIKE '%lock%';
- 如果只想精准清理,查出具体键名再删:
SELECT * FROM `wp_options` WHERE `option_name` LIKE '%updater%lock%';
,常见的是core_updater.lock、auto_updater.lock、wp_autoupdate_core.lock - 删完立刻清空对象缓存(如 Redis / Memcached),否则 WordPress 可能仍从缓存读到旧锁状态
升级中途断电或 Nginx 502 导致 wp_db_version 不匹配
页面报错 “Your WordPress database is out of date”,点“立即更新”又跳回原页——说明 wp_options 表里的 db_version 值比当前 WordPress 版本要求的低,但升级流程没跑完,部分表结构(比如 wp_site 或 wp_sitemeta)可能已变更,手动改 db_version 有风险。
别硬改数字。先确认当前 WordPress 版本需要的 db_version:打开 wp-admin/includes/upgrade.php,搜 wp_db_version,找到定义值(例如 62000 对应 6.4.x)。再查数据库:
SELECT option_value FROM wp_options WHERE option_name = 'db_version';
- 如果数据库值明显偏低(比如显示 59800,而应为 62000),且你确定没手动改过核心文件,就运行一次强制升级:
wp core update-db --force
(需 WP-CLI;没有的话,临时启用wp-admin/install.php页面,访问它会触发检查并补全升级) - 如果值正确但依然报错,检查
wp_options表里是否残留wp_upgrade_lock或wp_maybe_update_*类临时选项,一并删掉 - 注意:多站点环境下,
wp_sitemeta表也有一个db_version,必须和主站一致,否则网络管理页打不开
修复后首页白屏或 500 错误:插件钩子被锁死
数据库锁清了,但前台还是空白,错误日志里出现 Maximum function nesting level of '256' reached 或无限重定向到 /wp-admin/upgrade.php——说明某个插件在 admin_init 或 init 钩子里调用了升级相关函数,而这些函数内部又检测到锁未释放,形成递归调用。
这不是数据库问题,是代码执行路径卡住了。得临时绕过插件加载。
- 重命名
wp-content/plugins为plugins.off,看能否进后台;能进就逐个恢复插件目录排查 - 更准的方法:在
wp-config.php最顶部加一行:define('WP_INSTALLING', false);,防止某些插件误判为安装态而反复触发升级逻辑 - 有些安全插件(如 Wordfence、iThemes Security)自带升级保护机制,会在
wp_options写wfUpgradeLock或itsec_lockout,这类要进插件设置页手动解除,不能只删数据库记录
为什么不能直接 truncate wp_options 表里的所有 lock 记录
看起来最省事,但实际会引发新问题:WordPress 有些锁记录带时间戳或签名(比如 wp_update_themes.lock 后面拼了 UNIX 时间),删光后下次主题更新可能因校验失败直接报错;还有些插件把锁和任务 ID 绑定(如 edd_background_updater.lock_12345),删掉会导致后台队列永远卡住。
真正该删的只有明确由核心升级流程写入的、带 updater 和 lock 关键字的固定键名。其他带随机后缀或业务含义的,得结合插件文档处理。
- 安全范围仅限:
core_updater.lock、auto_updater.lock、wp_upgrade_lock、wp_maybe_update_plugins(注意:这个是动作名,不是锁)、wp_maybe_update_themes - 不确定的键名,先
SELECT option_value FROM wp_options WHERE option_name = 'xxx'看内容,如果是整数时间戳或空字符串,大概率可删;如果是 JSON 或长哈希串,别动 - 操作前务必 mysqldump 备份
wp_options表,这条表一旦崩,整个站的基础配置都没了


















