WordPress 清理数据库冗余数据加速网站运行速度

这次网站搬家后顺便清理下数据库加快网站运行速度。
这次也找了很多资料,因为 WordPress 的文章、评论等很多数据都是存放在数据库的,每当在 WordPress 编辑文章的时候会生成一些文章修订版本信息、自动保存文章草稿等无用数据,还有更换主题,删除插件也会将数据留在数据库中,在卸载后无法被清理。会造成 WordPress 数据库中增加很多冗余的数据信息,占用比较大的数据库缓存。而随着 WordPress 网站使用的时间越久,网站数据库中堆积的冗余数据信息越来越多,数据查询越来越慢,从而导致 WordPress 有大量无用的垃圾数据使数据库负担沉重,数据库运行起来越来越慢,并且也会造成网站访问速度缓慢,网页打开的速度变慢,丧失用户的良好体验度。所以,需要定期清理和优化 WordPress 数据库中的冗余数据,从而保证 WordPress 数据库运行的效率和网站的访问速度。
WordPress 数据库表说明
wp_commentmeta | 用于保存评论的元信息,在将评论放入回收站等操作时会将数据放入此表,Akismet 等垃圾评论标识插件也会生成数据到此表。此表不太重要 |
wp_comments | 用于保存评论信息的表 |
wp_links | 用于保存用户输入到 Wordpress 中的链接 (通过 Link Manager) 的表 |
wp_options | 用于保存 Wordpress 相关设置、参数的表,里面包括了大量的重要信息 (主题和插件的各种参数、设置) |
wp_postmeta | 用于保存文章的元信息 (meta) 的表 |
wp_posts | 用于保存你所有的文章相关信息的表,非常的重要。一般它存储的数据是最多的 |
wp_terms | 文章和链接分类以及文章的 tag 分类可以在表里找到 |
wp_term_relationships | 日志与 wp_terms 中的类别与标签联合起来共同存储于此表中。类别相关链接也存储在此表中 |
wp_term_taxonomy | 该表对 wp_terms 表中的条目分类 (类别、链接以及标签) 进行说明 |
wp_usermeta | 用于保存用户元信息 (meta) 的表,head 的一些丰富元素信息会在此表记录 |
wp_users | 用于保存 Wordpress 使用者的相关信息的表 |
提示:清理优化之前请先备份数据库,以防因失误带来的意外情况!只有做好备份工作才可以有备无患。
PS:主要涉及到的几张表:wp_options,wp_posts,wp_postmeta,wp_commentmeta
定期清理 wp_options 数据表
wp_options 这个数据表是 wordpress 设置的全局数据,主要存储的数据是和 WordPress 后台的设置对应 (如博客名、博客地址、基本设置…等),平常在 WordPress 控制面板–设置 里进行的设置,都会对应的存储在这里。 wp_options 表里垃圾残留记录会随着时间慢慢积累直至臃肿庞大致使你的数据库执行效率低下拖慢你整个主机的运行。
造成 wp_options 表数据膨胀的主要原因是:
(1) 在使用的过程中会经常安装、停用或者更换插件,或更换使用不同的主题,并且在使用插件和主题的过程中会在数据库 wp_options 表内增加大量的数据,包括一些冗余的垃圾数据 (插件、主题在删除之后没有进行清理,造成残留的无用数据)
(2) 占用数据的大户–RSS 缓存,后台的数据调用竟然会放到数据库里面。在 wp_options 表中发现了大量 option_name 包含 「_transient」 的数据,那就是 WordPress 程序中引入 RSSFeed 后产生的缓存。正常的 WordPress 使用过程中,会不断产生这些数据,久而久之,就非常之庞大了
清理 wp_options 表的处理方法
1) 禁用 RSS 缓存:打开根目录 wp-config.php 配置文件里面设置。将下面代码添加上去。
(2) 手动清理:进入 phpmyadmin 或者 mysql 命令行模式选择对应的数据库,执行下面 mysql 语句即可:
wp_options 表里的内容,特别是 _transient 、_site 开始的都可以删除,这些是控制板订阅缓存 (后台首页显示的订阅缓存,居然保存在 wp_options 表中,数量多体积大)
PS:可以使用插件 clean options 清理 wp_options 表中的垃圾数据。
清理 wp_posts 表 (包括删除修订版本、自动草稿的文章数据)
wordpress 的文章有好多:wp_posts 表中包括文章种类:文章、修订版本、页面、文章的附件、菜单;其中每种文章又会有很多状态:继承、发布、私有、草稿、自动草稿、回收站。
wp_posts 的重要字段含义
post_type(文章类型):post 表示为文章,revision 表示为修订版本,page 为页面,attachment 是文章的附件信息,nav_menu_item 是菜单。这里我们需要的是文章、页面、和菜单,除此之外的都可以删除。
post_status(文章状态):inherit 是继承的附件和文章的附带信息,publish 是已经发布、 private 是私有的,draft 是草稿,auto-draft 是自动草稿,trash 是在回收站。这里我们需要的是 publish 的状态的 (已经发布的文章、页面和菜单),除此之外的都可以删除。
PS:当然可以根据自己的需求选择删除哪些
造成 wp_posts 表中数据冗余原因:
(1) 在博主写文章的时候,系统会保存很多的中间状态 (如修订版本、自动保存等),在文章发布之后其很多的中间状态没有被删除。
(2) 点击 「写文章」 或 「新建页面」 时产生的,每点击一次就生成一条 「自动草稿 (auto draft)」 的冗余数据。
清理 wp_posts 表的解决办法
进入 phpmyadmin 或者 mysql 命令行模式选择对应的数据库,执行下面 mysql 语句即可:
清理 wp_postmeta 表
wp_postmeta 表是用来储存文章的元信息,多半是系统或者插件自动生成的,当然在主题使用了自定义字段是数据也是储存在这个表里的。
造成 wp_postmeta 表中数据冗余原因:
(1) 文章被删除之后,其在 wp_postmeta 中的数据理应被删除,在系统中多数情况是系统自动删除,但是由于人为删除文章,系统不知道被删除,就不会删除 wp_postmeta 表中的数据,造成冗余。
(2) 很多主题、插件没有做好及时清除的工作。
清理 wp_postmeta 表的解决办法
执行下列相关的 MySQL 指令则可以清理出无用的数据
在 WordPress 的后台上传图片或者附件后会在 wp_postmeta 中生成_wp_attached_file 和_wp_attachment_metadata 两个项,wp_posts 也会记录附件的信息。如果使用 FTP 工具上传文件,表中就不会有这些信息。
以下的这些可以考虑清,或者不清,其实很多人或许没这个项目,因为这些大都由插件产生的。
以上几条语句执行完毕能够删除掉 95% 以上的数据,算的上是极限优化了,最后考虑到这个数据表并不是很重要,有洁净癖的人可以尝试清空这个表,当然测试清空表会让一些原本的数据丢失。
清理 wp_commentmeta 表
wp_commentmeta 表是 WP 官方推荐的 Akismet 反垃圾评论防护插件保存的垃圾信息记录 (记录管理员用户对垃圾评论的处理结果以及插件自动判断某条评论是否为垃圾评论的相关记录),这个表如果长时间不清理的话,你会发现 wp_commentmeta 数据表会变得越来越大,甚至比我们文章数据库还要大。而且垃圾评论很少见的,建议还是不要用到像 Akismet 这类插件,或者我们用这个插件之后要定期清空数据 (直接清理删除 wp_commentmeta 数据表内容就可以,不要删除这个字段。) 。
造成 wp_commentmeta 表中数据冗余原因:
(1) 评论被删除之后,其在 wp_commentmeta 中的数据理应被删除,在系统中多数情况是系统自动删除,但是由于人为删除文章,系统不知道被删除,就不会删除 wp_commentmeta 表中的数据,造成冗余。
(2) 很多主题、插件没有做好及时清除的工作。
清理 wp_commentmeta 表的解决办法
进入 phpmyadmin 或者 mysql 命令行模式选择对应的数据库,执行下面 mysql 语句即可:
清理其他数据表
优化数据库表
原理:数据库优化不涉及数据的删除,是将数据库的表的状态调整好。在使用 phpmyadmin 时候,或许您会看到数据库表后面有多余 xxMB 的字样,这个指的是那些已经分配给当前表但是却没有使用的空间。这个多余是没有什么害处的,他不会占用你的空间。当删除一个表的一部分记录时, 这些记录仍然保持在一个 linked list 中,当插入新数据时会再次使用这些老纪录的位置。所以删除纪录会闲置一些空间造成你说的 「多余」 。
优化:在 phpmyadmin 手动 优化或者修复表即可,选择数据库后执行下面 SQL 语句:
PS:wp_ 是默认的前缀,如果自定义更改过,请根据实际修改即可。
汇总以上数据库的执行语句到 PHP 文件中一键优化清理 WordPress 数据库
将上面所有清理数据库的语句汇总到一个 php 文件 (SEOClear.php),打开 PHP 文件后就可以直接优化清理数据了,并且保证是安全的。 粘贴以下代码执行 PHP 文件即可:
执行后将会批量删除 WordPress 产生的冗余文件,修改好相应数据库信息后上传至网站然后使用浏览器直接访问该脚本文件 (SEOClear.php) 即可优化清理数据库,不过由于一次性执行多个 sql 查询,所以该脚本访问时响应速度可能会比较长,优化成功后会显示 Done 。
屏蔽垃圾评论提交到数据库,这样数据库就优化的差不多了
在当前 WordPress 主题的 functions.php 文件中加上以下代码即可