MySQL数据分析及清理之wordpress数据清理

如果你看到的是WordPress默认主题,说明本站正在搭建中。但是对于发博文,又有什么关系呢。毕竟内容大于形式!
下面进入正文

本站终于折腾好了,首先感谢从服务器搭建,服务器面板安装以及配置过程中,以下朋友对我的帮助:(我这么有人缘的人,当然没花钱)

我的另一个站点 狐狸影视城 做了好几年了,其中折腾过好多主题,也折腾过许多插件。以及上万条注册用户的记录,并且运营网站期间也删除了许多用户。所以如今需要清理很多不需要的数据。

这篇文章写的就是处理 狐狸影视城 网站的数据库,所以你们点开显示的是网站升级中。

本来想直接就搞起来了。可后来想一想,还是发一篇文章吧,记录一下心酸历程,顺便分享我的经验。还能攒攒人气

阅读本文技术,所需技能:

  • WordPress 站长
  • myphpadmin 使用经历
  • WordPress 主题、插件安装使用经历
  • mysql 语句差不多能看懂

为了站点数据的安全,首先将线上站点的数据库备份。备份数据库是基础操作,我不做具体说明

MySQL数据分析及清理之wordpress数据清理

然后在本地环境新建一个数据库并到如备份的数据库内容。然后开始操作。当然你若勇敢,也可直接线上操作。

MySQL数据分析及清理之wordpress数据清理
MySQL数据分析及清理之wordpress数据清理

一、用户表分析及清理

1. 筛选并删除用户元数据表中,被删除的用户信息

用户信息包含 wp_users, wp_usermeta 两个表,共计1.3万条注册用户记录

MySQL数据分析及清理之wordpress数据清理

首先确认 wp_usermeta 表中记录的用户数,是否和 wp_users 表中的用户数一致。因为有可能我们删除用户的时候,并没有删除用户的元数据(wp_usermeta)内容

SELECT DISTINCT user_id FROM wp_usermeta
MySQL数据分析及清理之wordpress数据清理

结果是13817条确实对不上号,注册用户应该是 13816 条。多了一个人的元数据。接着我们查看到底是那些用户的元信息没有被删除

SELECT * FROM wp_usermeta WHERE user_id NOT IN (SELECT ID FROM wp_users)
MySQL数据分析及清理之wordpress数据清理

user_id 都是同一个人的,17条数据。我们吧它删除

DELETE FROM wp_usermeta WHERE user_id NOT IN (SELECT ID FROM wp_users)
MySQL数据分析及清理之wordpress数据清理

2. 筛选并删除元数据表中,除了WordPress以外的字段内容

用户的元数据因为使用了主题或插件,会产生很多自定义的内容。这次我打算按照最原始的WordPress必须的元数据信息保留,其他元数据的字段全部删掉。

首先查看以下都有哪些字段名,并且都有多少条数据

SELECT meta_key, COUNT(meta_key) AS num FROM wp_usermeta GROUP BY meta_key
MySQL数据分析及清理之wordpress数据清理

一共51中元数据内容,num 列 是这个字段的数量。然后我们在本地创建一个新的WordPress,看看wp默认有哪些字段内容

MySQL数据分析及清理之wordpress数据清理

一共21条,那么家下来,我们筛选一下。看一下这21条记录意外的字段都是那些

SELECT meta_key, COUNT(meta_key) AS num FROM wp_usermeta WHERE meta_key NOT IN ( 'nickname', 'first_name', 'last_name', 'description', 'rich_editing', 'syntax_highlighting', 'comment_shortcuts', 'admin_color', 'use_ssl', 'show_admin_bar_front', 'locale', 'wp_capabilities', 'wp_user_level', 'dismissed_wp_pointers', 'show_welcome_panel', 'session_tokens', 'wp_dashboard_quick_press_last_post_id', 'wp_user-settings', 'wp_user-settings-time', 'community-events-location', 'meta-box-order_dashboard' ) GROUP BY meta_key
MySQL数据分析及清理之wordpress数据清理

51个现有种类,减去需要保留的21种wp所需种类,正好是30条。当然,若果你还需要保留一些自定义的字段内容,可以修改SQL语句。我是一个都不需要额外保留的

为了安全,我们再看看,现有元数据表中,一共多少条记录。并且这21种字段记录中,占了多少条。我们就能计算出大概需要删除多少条记录了。

MySQL数据分析及清理之wordpress数据清理

表中共有数据21.7367万行,我们看看需要删除的21种数据占了多少行。

MySQL数据分析及清理之wordpress数据清理

共2.8294万行数据是除了wp所需的字段数据。当然,因为wp版本的升级,固定字段的数量有何能增减,所以如果你想通过加减运算来验证数据,结果有可能对不上。比如以下计算过程:

wp所需 每个人是17条固定内容。1.3816万人共需要 13816*17=23.4872万条。表中一共21万条,这算下来23万条,肯定对不上了

接着就是删除了。如果你需要保留更多,记得加上你需要保留的额外字段名称到SQL中

DELETE FROM wp_usermeta WHERE meta_key NOT IN ( 'nickname', 'first_name', 'last_name', 'description', 'rich_editing', 'syntax_highlighting', 'comment_shortcuts', 'admin_color', 'use_ssl', 'show_admin_bar_front', 'locale', 'wp_capabilities', 'wp_user_level', 'dismissed_wp_pointers', 'show_welcome_panel', 'session_tokens', 'wp_dashboard_quick_press_last_post_id', 'wp_user-settings', 'wp_user-settings-time', 'community-events-location', 'meta-box-order_dashboard' )
MySQL数据分析及清理之wordpress数据清理

执行成功,删除了 2.8294 万行数据。至此,我们已经吧用户信息清除完成

二、文章数据表分析及清理

和处理用户表的逻辑一样,文章数据表也是由 wp_posts, wp_postmeta 两个表组成

MySQL数据分析及清理之wordpress数据清理

wp_posts 共3.353千条记录,也就是3千多篇文章

先来看一下网站所有的文章的类型有哪些,也就是 wp_posts 表中 post_type 字段有哪些种类。

SELECT post_type, COUNT(post_type) FROM wp_posts GROUP BY post_type
MySQL数据分析及清理之wordpress数据清理

八个类型,除了 post 为常规发布的文章:page 为发布的页面。
bulletin, picture, video 这三个是主题自定义的文章类型,不能删除。
attachment 是文章上传附件所产生的。
revision 是文章发布时,wp保存的修订版本
nav_menu_item 看名字是导航菜单,不晓得为啥导航要放到wp_posts 这个表中。
反正遵循一个原则就是,不知道的不要删除。

修订版的数据很多插件都可以搞定,比如我开发的 会员系统插件,也就是本站推广的插件,就有一些数据分析的模块。

MySQL数据分析及清理之wordpress数据清理

哈哈,我就不打广告了。

接下来我们来处理文章元数据表中的数据,首先看一下大概结构,共有7.2463万条记录。

MySQL数据分析及清理之wordpress数据清理

然后我们看看 meta_key 都有哪些种类,分别是多少。

SELECT meta_key, COUNT(meta_key) FROM wp_postmeta GROUP BY meta_key
MySQL数据分析及清理之wordpress数据清理

519个分类,这又点太多了吧。乍一看,感觉挺难分析的,但是仔细一看,有许多特别有规则,你就比如字段内容以 _oembed_ 开头的。我们筛选一下看看

SELECT * FROM wp_postmeta WHERE meta_key LIKE '_oembed%'
MySQL数据分析及清理之wordpress数据清理

345条记录,也就是500多条记录里面,以 _oembed 开头的就300多个,这东西到到底是什么呢。

一开始我也不明觉厉,百度好像也没找到比较靠谱的解释。那么久Google试试。结果还真有一篇帖子详细介绍了它:https://seo-gold.com/understanding-wordpress-oembed-and-unknown-postmeta-entries/

MySQL数据分析及清理之wordpress数据清理

这个作者跟我一样,甚至比我的还多。

MySQL数据分析及清理之wordpress数据清理

然后我就知道了,这玩意是可以删除的。

如果你还想在分析,可以如法炮制。我就不浪费时间了。接下来看看WordPress原生的文章元数包含哪些

MySQL数据分析及清理之wordpress数据清理

哈哈,总共才9条。这些文章是WordPress自动创建的 欢迎的文章,和示例页面的帖子数据。站长们应该都见过。

那么 wp_postmeta 表中这么多种类,不太好删除,并且我做的插件,也会向postmeta表中添加数据。这些是需要保留的。但是这找些 meta_key 有点费事。那么我们就删除已知的不需要的字段内容,比如刚才说的以 _oembed 开头的。

DELETE FROM wp_postmeta WHERE meta_key LIKE '_oembed%'
MySQL数据分析及清理之wordpress数据清理

ok, 就这么愉快的搞定了。

三、wp_options 设置表分析及清理

wp_options 这个表和各位的区别可就大的狠了,所以几乎没有雷同。如果我们是需要将数据删除到只剩原生wordpress需要的设置项,那么我们可以大致的用肉眼对比下。先看我现有数据库中的内容

MySQL数据分析及清理之wordpress数据清理

431条设置项。再看一下,原生的WordPress有多少个。

MySQL数据分析及清理之wordpress数据清理

185条,大概有200多条后加的。也不算太多。花店时间,通过大致的浏览就能判断出一些不需要的设置项。比如我通过一段时间对比出以下字段内容是什么,看你们需求是否要保留。

  • 以 widget_ 开头的是小工具的一些设置,包含wp和主题生成,一般不删除,因为不好筛选,除发你真的一一对照wp原生的 widget_ 有哪些。
  • 以 wpb_js_ 开头的,不知道是啥,反正原生wp中没有。那就可以删除
  • 以 wpjam- 开头的,微信机器人插件。我打算继续使用这个插件,保留
  • 以 ossdl_ 开头的,不知道是啥,反正原生wp中没有。
  • 以 mycred_ 开头的,国外mycred积分插件,不用了,删除
  • 以 duoshuo_ 开头的,多说评论插件,都是古董了,老早不用了,也用不了了。删掉
  • ...

其他的我就不写了,你们自己对比观察。那问题是怎么删除呢。笨!

MySQL数据分析及清理之wordpress数据清理

没多少条,直接手动删吧,优规则的名字可以使用SQL批量删除。比如这个以 _site_transient 开头的,使用以下删除语句:

DELETE FROM `wp_options` WHERE option_name LIKE '_site_transient_%'

吧里面对应的固定内容换成你需要的就可以了。百分号表示向后匹配任何字符,百分号之前表示我们需要相同匹配的内容

清理完成之后,回头看一下

MySQL数据分析及清理之wordpress数据清理

弄掉 200 多条记录。

好了,本文到此基本结束。WordPress内置数据表的基本完成了。其他表很少会有垃圾内容我的都是的记录。就不花时间了。

至于其他非WordPress的原生表,那你们自己看需要吧。最后截图一下WordPress原生数据库有哪些表。你们可以对比下自己的

MySQL数据分析及清理之wordpress数据清理

马赛克是数据库前缀。因为本站刚创建好,没有额外内容,所以表前缀不给你们看了,每个网站不一样。默认是wp_

千年骚狐
  • 本文由 发表于 2020年3月5日
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定