别让数据库优化毁了你的WordPress媒体库

折腾WordPress也有这么久了,但一直都是停留在主题的修改上,数据库层面的东西很少去研究。看惯了小七等人针对WordPress左一个优化,右一个优化,我就只能挑点简单的来实验一下,其他的就只有羡慕的份了。

某天,没事瞎折腾,照着小七发的那篇《总结下WordPress数据库优化》,也想把博客的数据库清理一下,虽然原本也没多大。

结果,一不小心,WordPress后台媒体库里的照片竟然全没了!主机上的图片文件还在,文章中的图片也显示正常,就是媒体库里之前上传的图片全不见了。尝试着再上传几张图片,发现后面上传的又能正常出现在媒体库里,有点摸不着头脑了……

去度娘谷歌了好久,虽然网友们也有很多类似媒体库不显示图片的问题,但都不是我这种情况。我甚至备份了主机上的所有数据后,准备把一切重置了试试。

重装了VPS,重装了WordPress,一连串的重装了VPS上有的BBR、SSR等,懂行的人一定觉得我脑抽了是不是。确实,每每回想起那天的情形,我都觉得自己跟脑抽了一样,放着娃不带,顶着老婆大人的抱怨,头疼却在医脚。

虽然问题没有解决,但终归不影响博客的使用,先放一边了。

直到前段时间,工作中需要频繁分析大量的数据,面对几十万行数据的Excel表,还要不停编辑复杂的公式,运算起来电脑卡爆了,实在是受不了了,于是决定用数据库试试。

起先试用的是ACCESS,毕竟OFFICE自带的,不用重新安装,方便。不过使用了一段时间后还是放弃了,对于大量数据虽然比Excel好些,但打开ACCESS就是个煎熬(公司电脑的配置真心不够用),果断放弃了。

第二次尝试的是MySQL社区版,下载到本地安装,接着装个HeidiSQL图形界面管理器,一下子感觉轻快了许多。顺手从某阅读APP里搞了本《SQL必知必会(第4版)》,还是要认真学习一下滴。这是本好书,至少是一本入门级别的好书。

学了点简单的用法,满足了工作的需要后,我把之前备份的两个不同时间的博客数据库导入到了本地数据库,研究了一下wordpress的数据结构。然后,我恍然明白,为什么会有“笑哭了”这个表情。

原来,我在做数据库清理时,Copy小七写的SQL语句时,运行了这么一句:

DELETE FROM wp_posts WHERE NOT(post_status = 'publish' AND post_type IN('post','nav_menu_item','page'));

这句的意思是在wp_posts表中删除文章状态(post_status)不是发布(publish)状态,并且文章类型(post_type)不是文章(post)、导航菜单(nav_menu_item)或者页面(page)的所有文章。

然而WordPress媒体库中图片信息在数据库中也是存放在wp_posts表中的,其文章类型为attachment

就是上面那句SQL语句,一下子就把媒体库里图片信息清空了,这就是为什么其他地方都没有异常,而偏偏媒体库中的图片消失了,新上传的又能显现的原因了。

问题解决!

这个故事告诉我们我:
1、不懂技术别装13
2、好好学习,天天向上

共有 12 条评论

    1. 首先你得备份了数据库,找到一份“事故”前备份的数据,从wp_posts表中提取文章类型为attachment的记录,然后insert into当前数据的wp_posts表中。把当前数据库和备份的数据均下载到本地数据库中,操作完了后再覆盖上去,以防万一。具体的SQL语句大致如下:
      insert into 当前数据库名.wp_posts select * from 备份的数据库名.wp_posts where post_type=’attachment’;

发表评论

电子邮件地址不会被公开。 必填项已用*标注