
类型:CMS系统
简介:一款开源的内容管理系统(CMS),用于构建和管理网站。
WordPress运行时间越长,数据库中往往会积累文章修订版本、过期瞬态缓存、垃圾评论和插件遗留数据。它们不一定立即拖慢网站,但会增加数据库体积、备份时间和后台查询负担。
WP-CLI可以在命令行中完成统计、导出、删除和优化操作,适合数据量较大或需要批量维护的网站。数据库清理具有不可逆风险,正确顺序应是先统计、再备份、最后删除,不能看到一条命令就直接在生产环境运行。
一、清理前必须完成的准备
1、确认当前网站
进入WordPress目录后执行:
wp option get siteurl
wp core version
确认域名和版本与目标网站一致。
多站点、容器和同服务器多网站环境中,进入错误目录可能清理其他网站的数据。
2、检查数据库信息
wp db size --tables
如果当前WP-CLI版本不支持对应格式,可以查看帮助:
wp help db size
3、导出数据库
创建备份目录:
mkdir -p ~/wp-db-backups
导出数据库:
wp db export ~/wp-db-backups/site-before-cleanup.sql
确认文件存在且大小合理:
ls -lh ~/wp-db-backups/site-before-cleanup.sql
重要网站还应把备份复制到服务器之外,并验证可以恢复。
4、开启维护窗口
WooCommerce、会员站和持续写入数据的网站,在清理期间仍可能产生订单、评论和用户数据。应选择低流量时间,并避免同时执行插件更新和数据库迁移。
二、如何统计文章修订版本
WordPress会保存文章和页面的历史版本,便于恢复编辑内容。长期运营的网站可能积累大量Revision。
统计修订数量:
wp post list \
--post_type=revision \
--post_status=inherit \
--format=count
查看部分修订记录:
wp post list \
--post_type=revision \
--post_status=inherit \
--fields=ID,post_parent,post_date,post_title \
--format=table
1、修订版本是否都能删除
修订记录通常可以清理,但删除后无法通过WordPress编辑器恢复旧版本。
以下情况应谨慎:
- 多人协作编辑;
- 法务或合规需要保留修改历史;
- 内容刚完成大规模调整;
- 尚未确认数据库备份有效;
- 插件依赖修订数据。
2、删除全部修订版本
确认备份和数量后,可以获取ID并删除:
wp post list \
--post_type=revision \
--post_status=inherit \
--format=ids
先检查输出,确认均为修订记录。再执行:
wp post delete \
$(wp post list \
--post_type=revision \
--post_status=inherit \
--format=ids) \
--force
如果修订数量为零,命令替换可能产生空参数。更稳妥的Shell写法是:
revision_ids="$(wp post list \
--post_type=revision \
--post_status=inherit \
--format=ids)"
if [ -n "$revision_ids" ]; then
wp post delete $revision_ids --force
fi
3、限制未来修订数量
在wp-config.php中设置:
define('WP_POST_REVISIONS', 10);
这表示每篇内容最多保留一定数量的修订版本。也可以设置为false关闭,但通常不建议完全关闭。
三、如何清理瞬态缓存
Transient API允许WordPress和插件在数据库中临时保存缓存数据。缓存到期后,不一定会立即从数据库删除。
1、查看瞬态缓存命令
先查看当前WP-CLI支持的命令:
wp transient help
列出瞬态缓存:
wp transient list
2、删除过期瞬态缓存
如果当前版本支持,可执行:
wp transient delete --expired
该命令比删除全部瞬态缓存更温和,适合日常维护。
3、删除全部瞬态缓存
wp transient delete --all
全部删除后,插件和WordPress会重新生成需要的缓存。大流量网站可能短时间增加数据库和外部API负载,因此应在低流量时执行。
4、对象缓存环境的区别
启用Redis或Memcached后,部分瞬态数据可能存放在持久对象缓存中,而不是只存数据库。
清理数据库瞬态缓存不一定会清空Redis。需要根据实际缓存方案决定是否执行:
wp cache flush
清空对象缓存会影响整个站点,应先评估高流量情况下的缓存重建压力。
四、如何清理垃圾评论和回收站评论
统计垃圾评论:
wp comment list \
--status=spam \
--format=count
查看垃圾评论ID:
wp comment list \
--status=spam \
--fields=comment_ID,comment_author,comment_date \
--format=table
确认后永久删除:
spam_ids="$(wp comment list \
--status=spam \
--format=ids)"
if [ -n "$spam_ids" ]; then
wp comment delete $spam_ids --force
fi
统计回收站评论:
wp comment list \
--status=trash \
--format=count
删除回收站评论:
trash_comment_ids="$(wp comment list \
--status=trash \
--format=ids)"
if [ -n "$trash_comment_ids" ]; then
wp comment delete $trash_comment_ids --force
fi
评论较多的网站应分批处理,避免一次命令生成过长参数。
五、如何清理回收站文章
统计回收站内容:
wp post list \
--post_status=trash \
--post_type=any \
--format=count
查看记录:
wp post list \
--post_status=trash \
--post_type=any \
--fields=ID,post_type,post_title,post_date \
--format=table
确认后删除:
trash_post_ids="$(wp post list \
--post_status=trash \
--post_type=any \
--format=ids)"
if [ -n "$trash_post_ids" ]; then
wp post delete $trash_post_ids --force
fi
WooCommerce订单和部分插件数据也可能使用自定义文章类型。使用--post_type=any前,必须检查列表,避免误删仍有业务价值的内容。
更安全的方式是指定类型:
wp post list \
--post_type=post,page \
--post_status=trash \
--format=table
六、如何检查自动加载选项
wp_options中的autoload数据会在多数页面请求中加载。某些插件卸载后留下大量自动加载配置,可能增加内存和数据库负担。
查看自动加载数据需要谨慎,因为不同WordPress版本的数据库结构和autoload取值可能变化。
可以使用数据库查询统计:
wp db query "
SELECT
autoload,
COUNT(*) AS option_count,
ROUND(SUM(LENGTH(option_value)) / 1024 / 1024, 2) AS size_mb
FROM $(wp db prefix)options
GROUP BY autoload
ORDER BY size_mb DESC;
"
查找体积较大的自动加载选项:
wp db query "
SELECT
option_name,
ROUND(LENGTH(option_value) / 1024, 2) AS size_kb,
autoload
FROM $(wp db prefix)options
ORDER BY LENGTH(option_value) DESC
LIMIT 30;
"
1、不要直接删除陌生选项
选项名称可能属于:
- 当前主题;
- SEO插件;
- 页面构建器;
- WooCommerce;
- 缓存插件;
- 安全插件;
- 已卸载插件;
- 自定义业务代码。
必须先确认所有者和用途,再决定是否通过插件自身卸载流程清理。
2、不要直接批量关闭autoload
把所有大选项改为非自动加载,可能导致插件每次请求单独查询数据库,或者让功能异常。
应针对具体选项评估,并在测试环境验证。
七、如何查找插件遗留数据表
列出数据库表:
wp db tables --all-tables-with-prefix
查看表大小:
wp db size --tables
插件卸载后可能保留数据表,但不能仅凭表名前缀直接删除。先确认:
- 插件是否真的不再使用;
- 表中是否包含订单、表单或统计数据;
- 插件是否提供卸载清理选项;
- 是否可能重新安装;
- 是否已经导出表数据。
单独备份某张表可以使用数据库工具或WP-CLI数据库导出参数,具体命令应结合数据库类型和WP-CLI版本确认。
八、如何优化数据库表
WordPress数据库使用MySQL或MariaDB时,可以运行:
wp db optimize
该命令会调用数据库优化操作。执行效果取决于存储引擎、表状态和数据库版本。
1、优化前检查表状态
wp db check
如果数据库报告损坏,不应只反复运行优化命令,应先备份并根据数据库错误采取修复措施。
2、优化不是越频繁越好
数据库表没有明显碎片时,频繁优化不会持续提升性能,还可能增加锁等待和I/O。
适合考虑优化的情况包括:
- 大量删除数据后;
- 表碎片明显;
- 数据库体积异常;
- 迁移或大规模清理完成后;
- 数据库检查建议优化。
3、大型网站安排维护窗口
较大的表执行优化时可能消耗较多资源。WooCommerce订单表、日志表和分析表需要特别谨慎。
九、如何清理WooCommerce相关数据
WooCommerce数据涉及订单、客户、会话、日志和分析。不能使用通用SQL随意删除。
优先通过WooCommerce后台工具、官方CLI命令或对应扩展提供的清理入口处理。
维护前确认:
- 是否使用高性能订单存储;
- 是否存在未完成订单;
- 是否需要保留退款和税务记录;
- 会话数据是否可以重建;
- 分析数据是否允许重新生成;
- 日志是否涉及故障排查和合规要求。
涉及订单表时,普通文章清理命令并不适用。
十、清理后的验证步骤
1、检查数据库
wp db check
2、检查网站地址
wp option get siteurl
wp option get home
3、清理必要缓存
根据实际环境执行:
wp cache flush
不要在不清楚缓存架构时同时清空所有CDN、页面缓存和对象缓存。
4、测试网站功能
至少检查:
- 首页;
- 文章和页面;
- WordPress后台;
- 搜索;
- 表单;
- 登录;
- WooCommerce购物车和结账;
- 定时任务;
- 邮件;
- 第三方接口。
5、比较数据库体积
wp db size --tables
数据库体积没有显著下降,不代表清理无效。部分存储引擎需要优化后才会释放空间。
十一、建议的维护顺序
确认目标网站
↓
统计数据库和待清理数据
↓
导出并验证备份
↓
低风险项目先清理
↓
检查网站功能
↓
优化数据库表
↓
再次检查和记录
不建议把所有删除命令写进一个脚本后直接定时运行。不同网站的插件、订单和数据保留要求不同,应逐项确认。
常见问题
WP-CLI清理数据库安全吗?
工具本身可以安全执行命令,但删除操作通常不可逆。必须先确认网站、统计记录并创建可恢复的数据库备份。
修订版本可以全部删除吗?
可以删除,但删除后无法在编辑器中恢复旧版本。多人协作和有审计要求的网站应保留必要历史。
删除瞬态缓存会影响网站内容吗?
瞬态缓存通常可以重新生成,不应删除正式文章或订单。但清空后可能短时间增加数据库或外部API负载。
wp db optimize能让网站明显变快吗?
不一定。它主要优化数据库表状态,无法修复低效插件、慢查询、服务器资源不足或外部API延迟。
可以删除所有不认识的数据库表吗?
不可以。陌生表可能保存订单、表单、会员或插件配置。必须确认来源、用途和备份后再处理。

