Decentralization? We're still early!
返回課程

主权个人的WordPress入门课

0%完成
0/0 Steps
  1. 第一部分 WordPress基础知识入门

    WordPress:内容创作者的知识输出及展示利器
  2. WordPress的开源生态:开源软件运动、GPL协议与AI赋能
  3. WordPress的软件版本、路线图与社区文化
  4. 值得关注的WordPress信息源与常用工具
  5. 五分钟安装指南、主题插件与备份还原方法
  6. 第二部分 WordPress与本地知识管理
    如何在本地电脑/服务器快速部署WordPress站点
  7. 最强CMS:WordPress的文件结构、前端与后端
  8. 学习使用Gutenberg编辑器进行内容创作和排版
  9. 学习使用全站编辑主题(FSE)进行站点设计
  10. 自定义文章类型:WordPress的基础功能及其拓展
  11. 第三部分 如何在云端部署WordPress
    云端部署WordPress的方法:选购虚拟主机或VPS
  12. 如何实现WordPress站点的自动化部署
  13. 如何优化Linux服务器设置实现安全加固
  14. 如何压缩WordPress站点图片并设置CDN
  15. 第四部分 WordPress的维护优化与安全加固
    WordPress数据管理:学习导入导出数据、清理冗余数据
  16. 动态数据调取优化:为WordPress站点添加配置Redis缓存
  17. 页面速度优化:为WordPress站点添加配置fastcgi缓存
  18. 优化WordPress的安全设置,实现站点的安全加固
  19. 第五部分 WordPress主题及插件进阶研究
    WordPress主题的选择与站点设计基础知识
  20. 善用WordPress插件:优秀插件推荐及其使用
  21. 学习使用Kadence Blocks优化页面设计
  22. 学习使用Jetengine为WordPress创建管理动态内容
  23. 学习使用LearnDash创建 WordPress 学习管理系统
  24. 学习使用Woocommerce创建网上商店
  25. 第六部分 内容创作者的WordPress:迈向Web3
    如何通过WordPress打造个人品牌:一个简易指南
  26. AI时代的内容创作:文章配图与音视频版本生成
  27. 如何使用JPG Store铸造基于Cardano链的NFT
  28. 为WordPress添加比特币收款和比特币支付网关
  29. 为WordPress添加Cardano支付网关和Cardano钱包登录
  30. 为WordPress添加以太坊支付网关和以太坊钱包登录
  31. WordPress用户管理与会员管理、内容门控
  32. 第七部分 WordPress汉化与设计优化
    WordPress主题、插件的汉化:Poedit 使用教程
  33. 为WordPress站点添加自定义字体、繁简体转换、多语言
  34. 如何通过调整CSS美化WordPress站点细节
  35. 如何开发自定义插件完善WordPress功能
  36. WordPress的功能扩展:FSE与Interactivity API
  37. 第八部分 AI时代的WordPress实践
    AI赋能WordPress开发:技术实践与未来展望
  38. Trilium RSS Digest 插件使用教程
  39. Cardano NFT Minter 插件使用教程
  40. Trilium AI Design 插件使用教程
課 15 的 40
In Progress

WordPress数据管理:学习导入导出数据、清理冗余数据

Brave 2024-02-01

在建立和管理WordPress网站时,数据库是至关重要的组成部分。数据库就像是网站的"大脑",存储着所有的文章、页面、用户信息、设置选项以及插件数据。理解并掌握数据库管理技能,是每一位WordPress专业人士必备的核心能力。

然而,随着时间的推移,数据库可能会积累大量无用的数据,这可能会导致性能下降和加载速度变慢。根据2025年的统计数据,一个运行超过2年的WordPress网站,其数据库中平均有30%-50%的数据属于冗余数据,包括文章修订版本、垃圾评论、过期的瞬态数据(transients)以及已删除插件遗留的孤立数据。

本节课程我们将系统性地介绍WordPress数据库管理的完整知识体系,涵盖以下核心技能:

技能领域具体内容难度等级
数据导入导出XML导出、数据迁移、备份恢复⭐⭐ 入门
插件优化工具WP-Optimize、Advanced DB Cleaner⭐⭐ 入门
数据表结构理解12个核心数据表详解⭐⭐⭐ 中级
手动数据库操作phpMyAdmin、SQL语句⭐⭐⭐⭐ 进阶
高级数据库技巧批量替换、自定义类型迁移⭐⭐⭐⭐⭐ 高级

一、📤📥 如何导入导出WordPress数据

当你需要迁移、备份或共享您的网站时,导入和导出WordPress数据就非常必要。无论您是要将内容从一个站点迁移到另一个站点,还是创建网站的备份,WordPress提供了简单的导入和导出功能。

⚠️ 重要提示:WordPress内置的导入导出功能主要用于内容迁移,它导出的是XML格式的内容数据,并不包含主题设置、插件配置、用户角色权限等信息。如需完整的网站迁移,建议结合使用专业的迁移插件(如All-in-One WP Migration、Duplicator或UpdraftPlus)。

📊 导入导出方案对比

在开始操作之前,让我们先了解不同的数据导入导出方案及其适用场景:

方案适用场景优点缺点
WordPress内置导出纯内容迁移、跨平台迁移简单易用、无需插件不含设置、媒体需单独处理
All-in-One WP Migration完整站点迁移一键操作、包含所有数据大型站点需付费版
Duplicator专业级迁移、开发环境部署功能强大、支持定时备份学习曲线较陡
UpdraftPlus定期备份、增量备份支持云存储、自动化强恢复时需要网站可访问
phpMyAdmin直接操作数据库级别的精确控制完全控制、最灵活需要技术基础

第一部分:导出WordPress数据 📤

🔧 操作步骤

步骤1:登录WordPress后台
使用管理员凭据登录到您要导出数据的WordPress站点的后台。请确保您使用的账户具有"管理员"或"超级管理员"(多站点环境)权限,因为导出功能需要相应的权限才能访问。

步骤2:导航到"工具" → "导出"
在WordPress后台的左侧导航栏中,找到"工具"选项,将鼠标悬停在上面,然后选择"导出"。

步骤3:选择要导出的内容
在导出页面上,您将看到一个选项,让您选择要导出的内容。您可以选择导出所有内容,或者选择特定的内容类型,例如帖子、页面、媒体、评论等。

💡 WordPress 6.x 版本新特性:从WordPress 6.0开始,导出选项中增加了对区块模式(Block Patterns)和模板部件(Template Parts)的支持。如果您使用的是区块主题(Block Theme),这些自定义的设计元素也可以被包含在导出文件中。

可导出的内容类型包括:

  • 📝 文章(Posts):包括所有状态(已发布、草稿、待审核、私密)
  • 📄 页面(Pages):网站的静态页面内容
  • 🖼️ 媒体(Media):媒体库中的图片、视频、文档等附件信息
  • 💬 评论(Comments):所有评论及其元数据
  • 🏷️ 分类与标签:分类目录、标签及自定义分类法
  • 🆕 自定义文章类型(Custom Post Types):如产品、作品集、案例等
  • 🆕 导航菜单(Navigation Menus):WordPress 6.x中的区块化导航
  • 🆕 可复用区块(Reusable Blocks):也称为同步模式

步骤4:点击"下载导出文件"按钮
选择您要导出的内容后,点击页面底部的"下载导出文件"按钮。WordPress将开始生成一个XML文件(WordPress eXtended RSS格式,简称WXR),其中包含您选择的内容。

步骤5:下载并保存导出文件
生成XML文件后,浏览器会自动下载该文件。文件命名格式通常为:sitename.WordPress.YYYY-MM-DD.xml。请妥善保存此文件,建议同时保存到本地硬盘和云存储服务(如Google Drive、Dropbox)中,实现多重备份。

📋 导出文件包含的内容清单

数据类型是否包含备注
文章/页面内容✅ 是包括所有HTML格式内容
文章元数据✅ 是自定义字段、特色图片信息
分类和标签✅ 是包括自定义分类法
评论数据✅ 是包括评论者信息
媒体附件信息✅ 是仅包含URL引用,非实际文件
用户信息⚠️ 部分仅作者名称,不含密码
网站设置❌ 否需要单独备份
主题设置❌ 否需要通过主题导出功能
插件设置❌ 否需要单独备份
实际媒体文件❌ 否需要通过FTP/文件管理器下载

第二部分:导入WordPress数据 📥

🔧 操作步骤

步骤1:登录目标WordPress站点的后台
登录到您要导入数据的目标WordPress站点的后台,即您希望将数据导入的站点。确保目标站点的WordPress版本与源站点兼容,建议两个站点都使用最新版本的WordPress。

步骤2:导航到"工具" → "导入"
在WordPress后台的左侧导航栏中,找到"工具"选项,将鼠标悬停在上面,然后选择"导入"。

步骤3:安装WordPress导入器插件
如果您之前没有安装过WordPress导入器插件,您会看到一个可用导入器的列表。找到"WordPress"选项,点击"立即安装"按钮。安装完成后,点击"运行导入器"链接。

🔔 2025年更新说明:WordPress导入器插件已经更新到2.0版本,新版本改进了对大文件的处理能力,支持分块上传,并增加了导入进度显示功能。如果您处理的是大型站点导出文件(超过50MB),建议先升级到最新版本的导入器。

步骤4:选择要导入的文件
在导入页面上,点击"选择文件"按钮,从您的计算机中选择之前导出的XML文件。文件大小限制取决于您的服务器配置(通常是php.ini中的upload_max_filesize和post_max_size设置)。如果文件过大,可以考虑:

  • 使用WP-CLI命令行工具进行导入
  • 修改服务器PHP配置增加上传限制
  • 将XML文件拆分成多个小文件

步骤5:点击"上传文件并导入"按钮
选择要导入的文件后,点击"上传文件并导入"按钮。

步骤6:分配作者
WordPress会要求您处理导入内容的作者归属问题。您有两个选择:

  • 映射到现有用户:将导入内容的作者映射到目标站点已存在的用户
  • 创建新用户:为原作者创建新的用户账户(注意:新用户需要手动设置密码

💡 最佳实践:如果是站点迁移,建议先在目标站点创建好与源站点相同的用户账户,然后在导入时进行映射,这样可以保持内容的作者归属一致性。

步骤7:选择是否下载附件
勾选"下载并导入文件附件"选项,WordPress会尝试从源站点下载媒体文件。请注意:

  • 源站点必须在线且可访问
  • 这可能会显著增加导入时间
  • 如果源站点已关闭,您需要通过FTP手动迁移wp-content/uploads目录

步骤8:完成导入
导入过程可能需要一些时间,具体取决于导入的数据量和您的服务器性能。一旦导入完成,您将收到一个成功的消息,并且您的数据将在目标WordPress站点上可见。

⚠️ 常见导入问题及解决方案

问题可能原因解决方案
文件上传失败文件超过上传限制修改php.ini或使用WP-CLI
导入超时服务器执行时间限制增加max_execution_time
图片无法显示附件下载失败手动迁移uploads目录
部分内容丢失XML文件损坏重新生成导出文件
特殊字符乱码编码不一致确保数据库使用utf8mb4编码
古腾堡区块异常区块版本不兼容更新区块编辑器到最新版本

第三部分:专业迁移工具推荐 🛠️

虽然WordPress内置的导入导出功能适用于简单的内容迁移,但对于完整的站点迁移或大型站点,我们推荐使用专业的迁移插件:

1. All-in-One WP Migration(推荐指数:⭐⭐⭐⭐⭐)

这是目前最受欢迎的WordPress迁移插件之一,截至2025年已有超过500万活跃安装。

主要特点:

  • ✅ 一键导出整个站点(包括数据库、媒体、插件、主题)
  • ✅ 自动处理序列化数据中的URL替换
  • ✅ 支持拖放式导入
  • ✅ 绕过大多数服务器限制
  • 支持云存储扩展(Google Drive、Dropbox、Amazon S3等)

免费版限制:导入文件大小限制(通常为512MB),需购买Unlimited扩展解除限制。

2. UpdraftPlus(推荐指数:⭐⭐⭐⭐⭐)

最受欢迎的WordPress备份插件,同时具备迁移功能。

主要特点:

  • ✅ 自动化定时备份
  • ✅ 增量备份(仅备份变化的内容)
  • ✅ 支持多种云存储服务
  • ✅ 一键恢复功能
  • 2025年新增:支持数据库表级别的选择性备份

3. Duplicator(推荐指数:⭐⭐⭐⭐)

专业级的站点克隆和迁移工具,特别适合开发者和代理商。

主要特点:

  • ✅ 创建完整的站点包(Package)
  • ✅ 支持手动安装(无需WordPress环境)
  • ✅ 内置数据库前缀修改功能
  • Pro版支持定时备份和多点恢复
  • 支持大型站点和多站点网络

📝 要点总结

无论是导出还是导入WordPress数据,您都可以使用这些简单的步骤轻松完成任务。无论是迁移网站、备份数据还是与他人共享内容,这些功能都能帮助您管理和操作WordPress网站的数据。

🔴 关键提醒:在进行任何导入或导出操作之前,请务必备份您的数据,以防万一。建议遵循3-2-1备份原则:

  • 3份数据副本
  • 2种不同的存储介质
  • 1份异地备份

二、🧹 冗余数据清理之WP-Optimize

WP-Optimize是一个WordPress插件,旨在提高网页速度和性能。它包含缓存、清理和压缩功能,可帮助优化您的WordPress网站。作为一款拥有超过100万活跃安装的老牌优化插件,WP-Optimize在WordPress社区中享有极高的声誉,是数据库优化领域的首选工具之一。

🎯 核心功能详解

功能一:数据库清理与优化

WP-Optimize的清理功能可以清理和优化数据库,从而提高网站的性能。它可以删除不必要的数据,减少数据库的大小,并释放服务器资源。

可清理的数据类型包括:

数据类型说明安全级别
文章修订版本WordPress自动保存的历史版本🟢 安全
自动草稿未完成的草稿内容🟢 安全
回收站内容已删除但未彻底清除的内容🟢 安全
垃圾评论标记为垃圾的评论🟢 安全
未审核评论待审核的评论🟡 谨慎
过期瞬态数据已过期的临时缓存数据🟢 安全
孤立的文章元数据关联文章已删除的元数据🟢 安全
孤立的评论元数据关联评论已删除的元数据🟢 安全
孤立的用户元数据关联用户已删除的元数据🟢 安全
孤立的关系数据无效的分类关联记录🟢 安全
pingback和trackback外链通知数据🟡 谨慎

💡 2025年版本更新:WP-Optimize 3.3.x版本新增了"智能清理"功能,可以根据网站的实际使用情况自动推荐最优的清理策略,避免误删重要数据。

功能二:页面缓存

该插件的缓存功能通过在服务器上存储临时HTML版本来加快页面加载速度。您可以通过单击一个按钮来启用缓存功能。

缓存功能特点:

  • ✅ 一键启用页面缓存
  • ✅ 缓存预加载(Preload)
  • ✅ GZIP压缩
  • 浏览器缓存控制
  • 设备类型缓存(桌面/移动端分离)
  • 用户登录状态缓存控制
  • WooCommerce商店兼容模式

⚠️ 注意事项:如果您的主机已经提供了服务器级缓存(如LiteSpeed Cache、Varnish),建议不要同时启用WP-Optimize的缓存功能,以避免缓存冲突。可以只使用其数据库清理功能。

功能三:图像压缩

另外,该插件还提供图像压缩功能,可以减小图像文件的大小,从而提高网站的加载速度。

图像压缩选项:

  • 🖼️ 有损压缩:最大程度减小文件体积,适合一般展示用途
  • 🖼️ 无损压缩:保持图片质量,适合摄影作品或产品展示
  • 🖼️ 自动压缩:新上传图片自动压缩
  • 🖼️ 批量压缩:对媒体库现有图片进行压缩
  • 🖼️ WebP转换:将图片转换为更高效的WebP格式(2025年新增功能)
  • 🖼️ 保留原图:压缩时保留原始文件备份

🔧 安装与配置步骤

  1. 安装插件:在WordPress仪表板中,导航到"插件" → "安装插件",搜索"WP-Optimize",点击"立即安装"并激活。
  2. 访问设置:在仪表板菜单中找到"WP-Optimize"选项。
  3. 数据库优化
    • 点击"数据库"选项卡
    • 选择要清理的数据类型
    • 建议首次使用时先点击"预览"查看将被删除的内容
    • 点击"运行所有选定的优化"
  4. 设置自动清理
    • 点击"设置"选项卡
    • 启用"定期清理和优化数据库"
    • 推荐设置:每周执行一次,保留最近2周的修订版本

⚠️ 使用前的重要提醒

请注意,在运行此插件之前,建议您备份数据库,以防意外情况发生。这样可以确保您在运行插件过程中保留一个可恢复的备份。

🔴 特别警告:以下情况请谨慎使用自动清理功能:

  • 使用WooCommerce或其他电商插件的站点:某些订单数据可能被误判为冗余
  • 使用会员制插件的站点:用户相关的元数据可能被清理
  • 高度定制化的站点:自定义插件可能使用非标准方式存储数据

建议在正式使用前,先在测试环境中验证清理效果。

通过使用WP-Optimize插件的缓存、清理和压缩功能,您可以提高您的WordPress网站的性能,加快页面加载速度,并提供更好的用户体验。


三、🔍 冗余数据清理之Advanced DB Cleaner

Advanced DB Cleaner是一款功能强大的WordPress插件,旨在优化和清理数据库,提高网站的性能和速度。它可以帮助您轻松删除不必要的数据,减少数据库的大小,从而提升整体性能。与WP-Optimize相比,Advanced DB Cleaner在处理插件遗留数据表方面具有独特优势,是清理"僵尸数据表"的专业工具。

🎯 主要功能详解

功能一:数据库表清理 📊

Advanced DB Cleaner可以扫描您的数据库,并识别出不再使用的表、过期的表或者没有关联数据的表。您可以选择性地清理这些表,从而减少数据库的负担。

🌟 这是Advanced DB Cleaner最强大的功能之一。当您卸载插件时,许多插件并不会自动删除它们创建的数据表,这些"孤儿表"会一直占用数据库空间。Advanced DB Cleaner可以:

  • 扫描并识别所有非WordPress核心数据表
  • 判断数据表是否与当前活跃插件相关联
  • 显示每个数据表的大小和行数
  • 支持批量删除无用数据表
  • 提供数据表详情预览功能

使用建议:在删除任何数据表之前,请务必:

  1. 备份完整数据库
  2. 确认该表确实不再被使用
  3. 可以通过Google搜索表名前缀来确认其所属插件

功能二:修订版本清理 ✏️

修订版本是WordPress自动保存的文章和页面副本。随着时间的推移,这些修订版本可能会积累成百上千个,导致数据库膨胀。Advanced DB Cleaner可以帮助您一键清理这些修订版本,从而减少数据库的大小。

关于修订版本的深度解析:

WordPress默认无限制保存文章修订版本,这是一个"保险"机制,但也会造成数据库膨胀。假设您有100篇文章,每篇平均修订20次,那就是2000条修订记录。每条修订记录不仅占用wp_posts表空间,还会在wp_postmeta表中产生大量关联数据。

最佳实践建议:

// 在wp-config.php中添加以下代码限制修订版本数量
define('WP_POST_REVISIONS', 5); // 只保留最近5个修订版本
// 或完全禁用修订版本(不推荐)
// define('WP_POST_REVISIONS', false);

功能三:自动草稿清理 📝

自动草稿是在编辑文章或页面时自动保存的草稿。这些自动草稿可能会在您完成编辑并发布文章后变得多余。Advanced DB Cleaner可以帮助您删除这些自动草稿,减少数据库的冗余数据。

💡 技术说明:WordPress在您开始创建新文章时会自动生成一个"auto-draft"类型的记录。如果您放弃编辑或直接关闭页面,这个自动草稿就会残留在数据库中。虽然WordPress会定期清理7天以上的自动草稿,但这个清理机制并不总是可靠。

功能四:未使用的图片清理 🖼️

在WordPress中,有时会上传一些图片,但最终没有使用它们。这些未使用的图片会占用存储空间并增加数据库的大小。Advanced DB Cleaner提供了一个选项,可以扫描并删除未使用的图片,从而优化数据库。

⚠️ 重要警告:这是一个高风险操作!以下情况可能导致误判:

  • 通过CSS背景图引用的图片
  • JavaScript动态加载的图片
  • 在主题选项中设置的图片
  • 第三方页面构建器中使用的图片
  • WooCommerce产品图库中的图片
  • 在古腾堡区块中使用的某些图片

建议:使用此功能前,请先导出扫描结果进行人工审核,确认后再执行删除操作。

功能五:定期清理计划 ⏰

Advanced DB Cleaner允许您设置定期清理计划,自动清理数据库中的不必要数据。您可以选择在每天、每周或每月定期运行清理操作,确保数据库始终保持高效。

推荐的自动清理配置:

清理项目推荐频率保留期限
修订版本每周保留最近5个
自动草稿每天7天以上
回收站每周30天以上
垃圾评论每天立即删除
过期瞬态每天立即删除
孤立元数据每月不适用

🆚 WP-Optimize vs Advanced DB Cleaner 对比

功能WP-OptimizeAdvanced DB Cleaner
数据库清理✅ 完善✅ 完善
插件遗留表清理❌ 无专业
页面缓存✅ 有❌ 无
图片压缩✅ 有❌ 无
未使用图片清理❌ 无✅ 有
定时任务管理❌ 无可清理孤儿任务
wp_options表清理有限更深入
免费版功能较全面基础功能
推荐用途日常优化深度清理

🎯 最佳实践:两个插件可以配合使用。使用WP-Optimize进行日常的自动化清理和缓存管理,使用Advanced DB Cleaner进行周期性的深度清理,特别是在卸载插件后。

📝 本节总结

优化数据库是优化WordPress网站性能的关键步骤之一。Advanced DB Cleaner插件提供了一套强大的工具,帮助您清理和优化数据库,提高网站的速度和性能。通过定期清理不必要的数据、删除修订版本和自动草稿,以及清理未使用的图片,您可以减少数据库的负担,加快页面加载速度,并提供更好的用户体验。

如果您正寻找一种简单而高效的方法来优化WordPress数据库,那么Advanced DB Cleaner插件值得一试。下载并安装此插件,让您的网站在性能和速度方面达到新的高度。


四、🗃️ WordPress核心数据表详解

在进行任何手动数据库操作之前,深入理解WordPress的数据表结构是必要的前提。本节将详细解析WordPress核心数据表的作用、字段含义以及它们之间的关联关系。

📊 数据表概览

在完成著名的5分钟安装程序以后,WordPress会自动创建如下12个核心数据表

wp_users          # 用户账户信息
wp_usermeta       # 用户元数据
wp_options        # 网站设置选项
wp_posts          # 所有内容(文章、页面、附件等)
wp_postmeta       # 内容元数据
wp_terms          # 分类术语
wp_termmeta       # 术语元数据
wp_term_relationships  # 内容与术语的关联
wp_term_taxonomy  # 术语的分类法信息
wp_comments       # 评论内容
wp_commentmeta    # 评论元数据
wp_links          # 链接(已弃用)

除此之外,你所安装的插件也会安装其他数据表。以下我们分别来详细了解这些表都是干什么的。

💡 关于表前缀:wp_是默认的表前缀,出于安全考虑,建议在安装WordPress时修改为自定义前缀(如myblog_)。如果您的数据库使用了自定义前缀,请将以下内容中的wp_替换为您的实际前缀。


📌 wp_users - 用户表

用户管理是WordPress的重要组成部分。**此表包含有关网站用户的核心认证信息,是用户系统的基础表。**WordPress的标准安装中有5个用户角色,WordPress的MultiSite安装有6个用户角色。分别包括Super Admin(仅适用于WordPress Multisite)、Admin 、编辑、作者、贡献者以及订阅者。

📋 字段详解(10个字段):

字段名数据类型说明
IDbigint(20)分配给每个用户的唯一编号(主键,自增)
user_loginvarchar(60)用户的唯一用户名(用于登录)
user_passvarchar(255)用户密码的哈希值(使用phpass加密,非明文
user_nicenamevarchar(50)URL友好的用户名(用于作者存档页面URL)
user_emailvarchar(100)用户的电子邮件地址
user_urlvarchar(100)用户的个人网站URL
user_registereddatetime用户注册的时间和日期
user_activation_keyvarchar(255)用于重置密码的激活密钥
user_statusint(11)在Multisite pre WordPress 3.0中用于表示垃圾邮件用户(现已弃用
display_namevarchar(250)要在站点上公开使用的显示名称

🔗 关联关系:

wp_users.ID → wp_usermeta.user_id
wp_users.ID → wp_posts.post_author
wp_users.ID → wp_comments.user_id

📌 wp_usermeta - 用户元数据表

此表用于存储与用户相关的附加信息。这是一个典型的"元数据表"结构,采用键值对(Key-Value)方式存储数据,具有极强的扩展性。

📋 字段详解(4个字段):

字段名数据类型说明
umeta_idbigint(20)分配给表的每一行的唯一编号(主键)
user_idbigint(20)相关用户的ID(外键,引用wp_users.ID)
meta_keyvarchar(255)数据的标识键
meta_valuelongtext实际的数据(支持序列化存储

常见的meta_key示例:

meta_key说明
nickname用户昵称
first_name名字
last_name姓氏
description个人简介
wp_capabilities用户权限(序列化数组
wp_user_level用户级别(兼容旧版本)
show_admin_bar_front是否在前端显示管理栏
session_tokens用户登录会话令牌
locale用户语言偏好(WordPress 4.7+)

📌 wp_options - 选项表

选项表是存储所有网站设置的位置。在此处可以找到的内容包括正在使用的主题,活动插件,窗口小部件和临时缓存的数据。其他插件和主题通常在此处存储其设置,除非它们创建专门用于存储其信息的单独表。

⚠️ 重点关注:wp_options表是性能优化的重点区域。由于autoload机制,此表中设置为自动加载的选项会在每次页面请求时被加载到内存中。如果此表过大或autoload数据过多,会严重影响网站性能。

📋 字段详解(4个字段):

字段名数据类型说明
option_idbigint(20)分配给表的每一行的唯一编号(主键)
option_namevarchar(191)数据片段的标识键(唯一索引)
option_valuelongtext实际的数据(数据通常是序列化的
autoloadvarchar(20)控制选项是否自动加载('yes'/'no'/WordPress 6.6+支持'on'/'off'/'auto'

🔴 性能优化要点:

-- 查看autoload数据总大小
SELECT SUM(LENGTH(option_value)) as autoload_size 
FROM wp_options 
WHERE autoload = 'yes';

-- 理想情况下,autoload数据应小于1MB
-- 如果超过1MB,需要检查并优化

-- 查看最大的autoload选项
SELECT option_name, LENGTH(option_value) as size 
FROM wp_options 
WHERE autoload = 'yes' 
ORDER BY size DESC 
LIMIT 20;

常见需要优化的autoload选项:

  • _transient_*_site_transient_*:瞬态数据,应定期清理过期项
  • 已卸载插件遗留的选项:这是最常见的问题来源
  • 大型序列化数组:某些插件会存储大量日志或缓存数据

📌 wp_posts - 文章表(核心表)

posts表被认为是WordPress数据库中最重要的表之一。它是一个非常强大的"通用内容表",不仅存储文章,还存储WordPress中几乎所有类型的内容对象。

📋 存储的内容类型(post_type):

post_type说明
post标准文章
page页面
attachment媒体附件
revision修订版本
nav_menu_item导航菜单项
custom_css自定义CSS
customize_changeset自定义器更改集
wp_template区块模板(WordPress 5.9+)
wp_template_part模板部件(WordPress 5.9+)
wp_global_styles全局样式(WordPress 5.9+)
wp_navigation区块导航菜单(WordPress 5.9+)
wp_font_family字体系列(WordPress 6.5+)
wp_font_face字体样式(WordPress 6.5+)
自定义类型插件/主题注册的自定义文章类型

📋 字段详解(23个字段):

字段名说明
ID分配给每个帖子的唯一编号(主键)
post_author创建它的用户ID(外键,引用wp_users.ID)
post_date创建的时间和日期(本地时区)
post_date_gmtGMT时间和创建日期(存储GMT时间,以便不依赖于站点的时区设置
post_content包含帖子的所有内容,包括HTML、区块标记、链接、短代码等
post_title帖子的标题
post_excerpt帖子的简短介绍段落(摘要)
post_status帖子的状态(详见下表)
comment_status是否允许评论('open'/'closed')
ping_status是否允许ping和trackback('open'/'closed')
post_password用于查看帖子的可选密码
post_name帖子标题的URL友好别名(slug)
to_ping需要发送pingback的URL列表
pinged已发送pingback的URL列表
post_modified上次修改帖子的本地时间
post_modified_gmt上次修改帖子的GMT时间
post_content_filtered由插件用于缓存过滤后的内容(WordPress核心本身不使用
post_parent父级文章ID(用于修订版、附件、页面层级等)
guid全局唯一标识符(不应用于URL,仅用于RSS feed识别
menu_order菜单/页面排序号
post_type内容类型标识
post_mime_type附件的MIME类型(如'image/jpeg')
comment_count评论总数(包含pingback和trackback

post_status状态值说明:

状态值说明
publish已发布(公开可见)
future定时发布(未来某时间发布)
draft草稿
pending待审核
private私密(仅管理员可见)
trash回收站
auto-draft自动草稿
inherit继承(用于附件和修订版本)

📌 wp_postmeta - 文章元数据表

此表包含有关各个帖子的附加信息。它是一个垂直表,使用键/值对来存储其数据。WordPress在整个数据库的许多表上使用这种技术,允许WordPress核心、插件和主题存储几乎无限量的数据。

📋 字段详解(4个字段):

字段名说明
meta_id分配给表的每一行的唯一编号(主键)
post_id数据所关联的帖子的ID(外键,引用wp_posts.ID)
meta_key数据的标识键
meta_value实际的数据

常见的meta_key示例:

meta_key说明
_thumbnail_id特色图片的附件ID
_edit_last最后编辑者的用户ID
_edit_lock编辑锁定信息
_wp_page_template页面使用的模板
_wp_attached_file附件文件路径
_wp_attachment_metadata附件元信息(尺寸、EXIF等)
_开头的键受保护的元数据(后台不直接显示)

📌 wp_comments - 评论表

此表存储评论内容和相关的特定数据。其他信息可以存储在wp_commentmeta表中。

📋 字段详解(15个字段):

字段名说明
comment_ID分配给每条评论的唯一编号(主键)
comment_post_ID此评论所涉及的帖子的ID(外键)
comment_author评论作者的姓名
comment_author_email评论作者的电子邮件
comment_author_url评论作者的URL
comment_author_IP评论作者的IP地址
comment_date评论发布的本地时间
comment_date_gmt发布评论的GMT时间
comment_content实际的评论文本
comment_karmaWordPress核心不使用,插件可用于评分系统
comment_approved评论审核状态('1'已批准, '0'待审, 'spam'垃圾, 'trash'回收站)
comment_agent评论的User-Agent(浏览器、操作系统信息)
comment_type评论类型(''普通评论, 'pingback', 'trackback', 'comment'
comment_parent父评论ID(用于嵌套回复)
user_id评论作者的用户ID(如为注册用户)

📌 wp_commentmeta - 评论元数据表

此表存储与评论相关的附加信息。

📋 字段详解(4个字段):

字段名说明
meta_id分配给表的每一行的唯一编号(主键)
comment_id数据所关联的评论的ID(外键)
meta_key数据的标识键
meta_value实际的数据

📌 wp_terms - 术语表

WordPress允许以各种方式对帖子和自定义帖子类型等内容进行分类。在WordPress中创建帖子时,您可以为其添加类别和标签。"类别"和"标记"都是分类法的示例,这是将事物分组在一起的一种方式。

📋 字段详解(4个字段):

字段名说明
term_id分配给每个术语的唯一编号(主键)
name术语的名称(显示名)
slug名称的URL友好别名
term_group术语分组功能(WordPress核心不填充,可供插件使用

📌 wp_termmeta - 术语元数据表

术语元数据是在WordPress 4.4版本中引入的。它允许您以类似于发布元数据的方式保存术语的元值。这为分类法扩展提供了极大的灵活性,例如为分类目录添加封面图片、描述等自定义字段。

📋 字段详解(4个字段):

字段名说明
meta_id自动增量ID(主键)
term_id要将此元数据保存到的术语的ID(外键)
meta_key元数据的键名
meta_value数据本身(使用前记得清理和验证

📌 wp_term_taxonomy - 术语分类法表

使用此表为每个术语分配一个分类法。此表的结构允许您在不同的分类法中使用相同的术语名称。

📋 字段详解(6个字段):

字段名说明
term_taxonomy_id分配给表的每一行的唯一编号(主键)
term_id相关术语的ID(外键,引用wp_terms.term_id)
taxonomy分类法的slug('category', 'post_tag', 自定义分类法等)
description此分类法中术语的描述
parent父术语的term_taxonomy_id(用于层级分类)
count使用此术语的文章数量

📌 wp_term_relationships - 术语关系表

这是一个"联结表"(Junction Table),用于记录内容(wp_posts)与分类术语(wp_term_taxonomy)之间的多对多关系。

📋 字段详解(3个字段):

字段名说明
object_id帖子对象的ID(外键,引用wp_posts.ID)
term_taxonomy_id术语/分类法对的ID(外键)
term_order允许对对象的术语进行排序(未被广泛使用

📌 wp_links - 链接表(已弃用)

一个名为"友情链接"(Blogroll)的功能曾经存在于WordPress中。它基本上是一种管理您希望在您的网站上指向其他网站的所有链接的方式。从WordPress 3.5版本开始,此功能已被隐藏,但数据表仍然保留以便向后兼容。

如需使用此功能,可以安装"Link Manager"插件来恢复链接管理功能。但在现代WordPress开发中,通常推荐使用导航菜单或自定义文章类型来管理外部链接。

📋 字段详解(14个字段):

字段名说明
link_id唯一编号(主键)
link_url链接的URL
link_name链接的名称
link_image与链接相关的图像URL
link_target目标框架(_blank, _top, _none)
link_description链接描述
link_visible公开/私有状态
link_owner创建者的用户ID
link_rating链接评级(0-10)
link_updated更新时间
link_rel链接关系
link_notes链接说明
link_rssRSS地址

📊 数据表关系图

理解表与表之间的关联关系,对于编写正确的SQL查询和理解WordPress数据流至关重要:

                    ┌─────────────────┐
                    │   wp_users      │
                    │   (用户表)       │
                    └────────┬────────┘
                             │ 1:N
                    ┌────────┴────────┐
                    │  wp_usermeta    │
                    │ (用户元数据)     │
                    └─────────────────┘
                             │
         ┌───────────────────┼───────────────────┐
         │                   │                   │
         ▼                   ▼                   ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│   wp_posts      │ │  wp_comments    │ │   wp_options    │
│   (内容表)       │ │   (评论表)      │ │   (设置表)      │
└────────┬────────┘ └────────┬────────┘ └─────────────────┘
         │ 1:N               │ 1:N
┌────────┴────────┐ ┌────────┴────────┐
│  wp_postmeta    │ │ wp_commentmeta  │
│ (内容元数据)     │ │ (评论元数据)    │
└────────┬────────┘ └─────────────────┘
         │
         │ N:M (通过wp_term_relationships)
         ▼
┌─────────────────────────────────────┐
│        wp_term_relationships        │
│         (内容-术语关联表)             │
└──────────────────┬──────────────────┘
                   │
                   ▼
        ┌─────────────────────┐
        │  wp_term_taxonomy   │
        │   (术语分类法表)      │
        └──────────┬──────────┘
                   │ N:1
                   ▼
           ┌─────────────┐
           │  wp_terms   │
           │  (术语表)    │
           └──────┬──────┘
                  │ 1:N
           ┌──────┴──────┐
           │ wp_termmeta │
           │(术语元数据)  │
           └─────────────┘

五、🛠️ WordPress数据库优化及维护

由于数据库的大小以及存储方式,会直接影响到网站速度。因此,有必要对于WordPress数据库进行优化和维护工作。从入门到进阶,包括几个技术要点:优化插件、MySQL基本操作以及插件安装与卸载后的清理。

⚠️ 操作前切记要备份数据库

🔴 这是最重要的原则!任何数据库操作之前,必须先完成备份。否则可能产生悔恨终生的结果。

备份方法(按推荐度排序):

  1. 使用phpMyAdmin导出
    • 登录phpMyAdmin → 选择数据库 → 导出 → 选择"自定义"模式 → 格式选择SQL → 执行导出
  2. 使用备份插件
    • UpdraftPlus、BackWPup、WP-DB-Backup等
  3. 通过SSH命令行

    mysqldump -u username -p database_name > backup_$(date +%Y%m%d).sql
    
  4. 主机提供商的备份功能
    • 大多数主机(如SiteGround、Cloudways、Kinsta)都提供一键备份功能

🔌 WordPress数据表优化插件

比较推荐以下几款:

插件名称主要功能推荐场景
WPDBSpringClean删除未使用的插件表,优化现有数据表清理插件遗留表
WP-Sweep删除未使用、孤立、重复数据;清理草稿和修订版本;删除评论及元数据日常清理
WP-Optimize数据表清理优化 + 图片压缩 + 缓存服务综合优化(推荐)
Advanced DB Cleaner深度数据库清理,特别是插件遗留数据深度清理
🆕 Query Monitor虽非清理插件,但可识别慢查询和优化点性能诊断
🆕 Index WP MySQL For Speed优化数据库索引,提升查询效率大型站点优化

💻 MySQL基本操作

如果想完全掌控WordPress以及网站的数据,非常有必要学习MySQL。你可以把MySQL简单当成是一个Excel软件来学习使用。可以找相关的课程或书,学习数据的查找、替换、排序等等。

建议学习掌握的MySQL命令:

基础查询命令

-- 查看所有数据表
SHOW TABLES;

-- 查看表结构
DESCRIBE wp_posts;

-- 基本查询
SELECT * FROM wp_posts WHERE post_type = 'post' LIMIT 10;

-- 统计记录数
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';

-- 按条件查询
SELECT ID, post_title, post_status 
FROM wp_posts 
WHERE post_type = 'post' AND post_status = 'publish'
ORDER BY post_date DESC;

数据修改命令

-- 更新数据
UPDATE wp_posts SET post_status = 'draft' WHERE ID = 123;

-- 批量替换(谨慎使用)
UPDATE wp_posts 
SET post_content = REPLACE(post_content, 'old_url', 'new_url')
WHERE post_content LIKE '%old_url%';

-- 删除数据(高危操作)
DELETE FROM wp_posts WHERE post_type = 'revision';

🆕 性能优化相关命令

-- 优化数据表(整理碎片)
OPTIMIZE TABLE wp_posts;

-- 分析表(更新索引统计信息)
ANALYZE TABLE wp_posts;

-- 检查表是否有错误
CHECK TABLE wp_posts;

-- 修复表
REPAIR TABLE wp_posts;

-- 查看表大小
SELECT 
    table_name AS '表名',
    ROUND(data_length/1024/1024, 2) AS '数据大小(MB)',
    ROUND(index_length/1024/1024, 2) AS '索引大小(MB)',
    ROUND((data_length + index_length)/1024/1024, 2) AS '总大小(MB)'
FROM information_schema.tables
WHERE table_schema = 'your_database_name'
ORDER BY (data_length + index_length) DESC;

🧹 插件安装与卸载后的清理

安装插件时的注意事项

首先,在安装WordPress插件时,要特别注意,虽然WordPress有几百万个插件,但是,真正好的插件是非常稀少的。

使用更多的插件,不仅仅会拖慢网站速度,还可能带来安全问题和大量的BUG问题。因此,要切记一个原则:能写代码解决的问题,尽可能少用插件;尽可能只用经过时间检验的、高质量的插件。

🆕 2025年插件选择标准:

评估维度推荐标准
活跃安装量至少10,000+(热门功能应更高)
最后更新6个月内有更新
WordPress兼容性与当前WordPress版本兼容
PHP兼容性支持PHP 8.2+
评分4星以上,且评价数量足够
支持论坛活跃度开发者积极回复用户问题
安全记录在WPScan漏洞数据库中无未修复漏洞

卸载插件后的清理工作

其次,需要了解的是,许多WordPress的插件在卸载后,都会遗留大量的数据表和数据信息。为了保证数据库的清洁,你需要找到遗留的数据信息并删除。

清理步骤:

步骤1:识别插件遗留的数据

为了实现这一目标,我们可以:

  • 善用Google搜索插件信息,查看插件的官方文档
  • 查看插件源代码中的uninstall.phpdeactivation钩子
  • 使用Advanced DB Cleaner扫描孤儿数据表

步骤2:检查wp_options表

按照修改日期排序,仔细核对wp_options表中是否有插件遗留的选项:

-- 搜索特定插件的遗留选项
SELECT option_name, LENGTH(option_value) as size 
FROM wp_options 
WHERE option_name LIKE '%plugin_name%';

-- 查看所有瞬态数据
SELECT option_name 
FROM wp_options 
WHERE option_name LIKE '%_transient_%';

步骤3:检查自定义数据表

-- 列出所有非WordPress核心表
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'your_database_name'
AND table_name NOT REGEXP '^wp_(users|usermeta|options|posts|postmeta|terms|termmeta|term_relationships|term_taxonomy|comments|commentmeta|links)$';

步骤4:清理数据

确认后,运用删改查操作进行数据清理。

### ⚠️ 除非有完全把握,千万不要删表。删除前千万要做好备份和对照。


六、📈 WordPress数据表进阶操作

以上是WordPress数据库的基本操作。为了满足特定的功能需求,我们还需要大量的进阶操作。这些操作因人而异,需要进一步的摸索学习。下面举一个例子,来展示WordPress的数据库进阶操作。

案例:自定义文章类型迁移

场景:网站开发使用了自定义文章类型、分类以及字段,现在需要对自定义文章的名称、标签分类等进行修改,此时应该如何处理?

步骤一:使用Post Type Switcher插件

这个插件可以帮助在管理员平台直接展开不同文章类型的迁移工作。但问题是,标签、分类等post meta不会一并迁移。

💡 2025年替代方案:可以使用"Post Type Converter"或"Flavor"插件,它们提供了更完善的迁移功能,包括分类法的自动映射。

步骤二:通过SQL语句对数据库进行修改

更改文章类型名称:

UPDATE `wp_posts` 
SET 
    # 更新 post_type 列
    `post_type` = REPLACE(`post_type`, 'name_of_old_post_type', 'name_of_new_post_type'),
    # 更新 URL
    `guid` = REPLACE(`guid`, 'name_of_old_post_type', 'name_of_new_post_type') 
WHERE `post_type` = 'name_of_old_post_type';

更改分类法名称:

UPDATE `wp_term_taxonomy` 
SET `taxonomy` = 'new_taxonomy_name' 
WHERE `taxonomy` = 'old_taxonomy_name';

更改自定义字段键名:

UPDATE `wp_postmeta` 
SET `meta_key` = 'new_field_name' 
WHERE `meta_key` = 'old_field_name';

🆕 更改序列化数据中的内容(高级):

-- 警告:序列化数据修改需要特别小心
-- 建议使用专门的工具如 interconnect/it 的 Search Replace DB
-- 或使用 Better Search Replace 插件

🔄 WordPress 批量替换工具

推荐工具:Search & Replace插件

这是一款强大的数据库搜索替换工具,特别适合:

  • 网站迁移后的URL替换
  • 批量修改内容中的特定文本
  • 处理序列化数据中的替换

使用注意事项:

  • ✅ 支持序列化数据的安全替换
  • ✅ 提供干运行(Dry Run)模式预览变化
  • ✅ 可以选择特定的数据表进行操作
  • ⚠️ 操作前务必备份数据库
  • ⚠️ 避免在高流量时段进行操作

🆕 2025年推荐替代方案:

工具特点
Better Search Replace界面友好,支持序列化,有Pro版
WP-CLI search-replace命令行工具,适合大型数据库
Flavor全面的内容迁移工具
interconnect/it Search Replace DB独立PHP脚本,功能强大

七、📋 附录:常用SQL查询速查表

性能诊断查询

-- 1. 检查数据库总大小
SELECT 
    SUM(data_length + index_length) / 1024 / 1024 AS 'DB Size (MB)'
FROM information_schema.tables 
WHERE table_schema = 'your_database';

-- 2. 检查autoload选项总大小
SELECT SUM(LENGTH(option_value))/1024/1024 AS 'Autoload Size (MB)'
FROM wp_options WHERE autoload = 'yes';

-- 3. 统计修订版本数量
SELECT COUNT(*) AS revision_count FROM wp_posts WHERE post_type = 'revision';

-- 4. 统计自动草稿数量
SELECT COUNT(*) AS autodraft_count FROM wp_posts WHERE post_status = 'auto-draft';

-- 5. 统计垃圾评论数量
SELECT COUNT(*) AS spam_count FROM wp_comments WHERE comment_approved = 'spam';

-- 6. 检查过期瞬态数据
SELECT COUNT(*) AS expired_transients
FROM wp_options 
WHERE option_name LIKE '_transient_timeout_%' 
AND option_value < UNIX_TIMESTAMP();

清理操作查询(谨慎使用)

-- 1. 删除所有修订版本
DELETE FROM wp_posts WHERE post_type = 'revision';

-- 2. 删除7天以上的自动草稿
DELETE FROM wp_posts 
WHERE post_status = 'auto-draft' 
AND post_date < DATE_SUB(NOW(), INTERVAL 7 DAY);

-- 3. 删除垃圾评论
DELETE FROM wp_comments WHERE comment_approved = 'spam';

-- 4. 删除过期瞬态数据
DELETE FROM wp_options 
WHERE option_name LIKE '_transient_%' 
AND option_name NOT LIKE '_transient_timeout_%';

DELETE FROM wp_options 
WHERE option_name LIKE '_transient_timeout_%' 
AND option_value < UNIX_TIMESTAMP();

-- 5. 清理孤立的postmeta
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.ID IS NULL;

-- 6. 清理孤立的commentmeta
DELETE cm FROM wp_commentmeta cm
LEFT JOIN wp_comments c ON cm.comment_id = c.comment_ID
WHERE c.comment_ID IS NULL;

-- 7. 清理孤立的term_relationships
DELETE tr FROM wp_term_relationships tr
LEFT JOIN wp_posts p ON tr.object_id = p.ID
WHERE p.ID IS NULL;

八、📚 本章小结与学习路径

知识要点回顾

主题核心要点
数据导入导出内置功能仅适合内容迁移;完整迁移需使用专业插件
WP-Optimize综合性优化工具:缓存+清理+压缩
Advanced DB Cleaner深度清理专家:插件遗留表、孤儿数据
核心数据表理解12个核心表的结构和关联关系
手动优化MySQL基础操作、插件清理原则
进阶操作自定义类型迁移、批量替换

🎯 学习路径建议

入门阶段
    ↓
├── 掌握WordPress内置导入导出功能
├── 学会使用WP-Optimize进行日常优化
└── 养成定期备份的习惯
    ↓
中级阶段
    ↓
├── 理解12个核心数据表的结构
├── 学会使用phpMyAdmin进行基础查询
├── 掌握Advanced DB Cleaner的使用
└── 能够识别和清理插件遗留数据
    ↓
高级阶段
    ↓
├── 熟练使用SQL进行数据操作
├── 掌握序列化数据的处理
├── 能够进行自定义类型迁移
├── 理解数据库索引优化
└── 能够诊断和解决性能问题

回复