本文约 2,327 字,预计阅读 6 分钟。文中命令与配置均经过实测,可直接参考执行。
引言
很多人写文章习惯反复修改,WordPress 默认每保存一次就存一个修订版本,改二十次就有二十份副本。再加上自动保存的草稿、被垃圾评论轰炸留下的待审评论、插件卸载残留的表、过期瞬态数据,数据库会像滚雪球一样越来越大。这几个 G 的数据平时看不见,但每一次页面请求都要在这堆臃肿数据里查东西,查询自然越来越慢,备份文件也越来越大,导出一次要等很久。清理数据库听起来有点专业,其实用对工具加严格备份,站长自己就能安全完成。这篇带你把数据库从「胖子」变回「瘦子」。
故障原因分析
- 修订版本成灾。
wp_posts表里post_type = 'revision'的记录和正式文章一样多甚至更多,每条都占存储、都被备份。
- 自动草稿残留。
post_status = 'auto-draft'的空草稿记录,来自编辑器自动保存,长期不清。
- 垃圾评论与待审评论。
wp_comments里大量的 spam 和 trash,有的插件还会把垃圾评论写进wp_comments数千上万条。
- 已删除文章/评论的元数据孤儿。
wp_postmeta、wp_commentmeta里父级已不存在的记录,查不到却占空间。
- 过期瞬态和插件残留表。
wp_options的过期_transient_选项,以及卸载插件没删干净的自建表。
分步解决方案
第一步:清理前先完整备份
这是铁律,不能省。可以用主机面板的备份功能、mysqldump 命令,或 UpdraftPlus、WPvivid 插件导出数据库。备份文件下载到本地另存一份,再做任何清理动作。
# 用 mysqldump 备份数据库(按实际替换库名、用户名)
mysqldump -u dbuser -p --single-transaction --routines dbname > backup.sql
--single-transaction 能保证备份期间不锁表,适合线上站点。
第二步:限制未来的修订版本数量
与其一直清,不如从源头控制。在 wp-config.php 里限制每篇文章最多保留的修订数:
// wp-config.php
define( 'WP_POST_REVISIONS', 5 ); // 每篇最多保留 5 个修订
// 或者彻底关闭修订(不推荐,写完想回退会很难)
// define( 'WP_POST_REVISIONS', false );
保存修订数也可在后台「文章 → 编辑」时手动设置。设成 5 既省空间又保留回退能力。
第三步:安装并认识 WP-Optimize
WP-Optimize 是目前最主流的数据库清理插件,免费版功能已足够。安装激活后进入「WP-Optimize → Database」。它会把可清理项分类列出:文章修订版本、自动草稿、已删除评论、待审评论、垃圾评论、已删除评论的元数据、过期瞬态、pingback、已卸载插件的表等。
第四步:勾选并清理垃圾数据
在列表里勾选要清理的项目,点「Run optimization」。建议勾选:修订版本、自动草稿、垃圾评论、待审评论、已删除评论、孤儿评论元数据、过期瞬态、弃用的 post meta。勾选前先看一眼每项右边显示的可清理条数,确认数值合理(比如修订版本几千条属正常)。
清理前后都可以在页面顶部看到「数据库已优化掉多少空间」。若清理量大,页面可能跑几十秒,别中途关闭。
第五步:优化数据库表结构
清理只是删行,表文件里的空洞还在。WP-Optimize 有「Tables」标签页,列出所有表,点「Optimize」会对每张表做 OPTIMIZE TABLE,回收碎片、重建索引、刷新统计信息。也可以在 phpMyAdmin 里全选表后点「优化表」。InnoDB 大表优化耗时较长,建议在访问低峰期执行。
如果想更省事,WP-Optimize 支持设置「每日自动清理并优化」,把它交给计划任务,日常无感维护。
第六步:验证效果
清理后看数据库总大小(WP-Optimize 顶部有显示,或看 phpMyAdmin 各表体积)。再用 Query Monitor 打开一个页面,看查询耗时是否下降。同时确认文章、评论、缩略图都还正常显示,尤其抽查几篇老文章和评论列表。
常见踩坑点
- 不备份就清理。这是最危险的错误,清理把还在用的数据删掉,没有备份就只能重装,务必先导出整库。
- 误清「待审评论」。待审评论里可能有读者认真写的留言还没审核,一键清掉会误删真实反馈,清理前先筛一遍。
- 全站每篇文章修订都删得很干净。有人图省事把修订全删,结果发现改错文章想回退却没有历史版本,建议保留少量修订。
- 在高峰期执行大表优化。
OPTIMIZE TABLE在 InnoDB 上会重建表,期间可能锁表导致访问变慢,安排在深夜或低峰跑。
- 只清不限制,过段时间又胖回来。清理后一定配合
WP_POST_REVISIONS限制和评论审核策略,否则下次检查又是老样子。
总结
数据库臃肿是 WordPress 变慢的隐形推手,修订版本、自动草稿、垃圾评论和孤儿元数据日积月累,让每次查询和备份都变重。用 WP-Optimize 处理起来并不复杂:先完整备份,再用 WP_POST_REVISIONS 从源头限制修订数量,然后在插件里勾选各类垃圾数据一键清理,最后优化表结构回收碎片,并可设为每日自动维护。整个过程的核心是「先备份、再动手、勤复验」。只要养成定期清理数据库的习惯,站点不仅能明显提速,备份和迁移也会轻松许多,这是每个独立站长都该掌握的日常维护动作。
