折腾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语句,一下子就把媒体库里图片信息清空了,这就是为什么其他地方都没有异常,而偏偏媒体库中的图片消失了,新上传的又能显现的原因了。

问题解决!

标签: WordPress, SQL

已有 15 条评论

  1. 汗~你倒不如直接用数据库整理的扩展(如 WP-Optimize)……

    1. 以前也没想过要优化数据库什么的,所以也就没想到用插件,瞎折腾而已,估计不到万不得已的时候是不会再去动它了... :???:

  2. 😟 没用媒体库,都是 ftp 上传。

  3. 有折腾 才有成长

  4. 论做好备份的重要性

  5. 不好意思,把你坑了 :oops:
    attachment我漏写了。。。我自己代码是有的。。。
    不好意思,不好意思,文章已经编辑了。。

  6. 呵呵,需要小心!
    欢迎加入松松博客交流群,群聊号码:571334199

  7. 从百度点进来的,学习学习,呵呵!

  8. 76 76

    哥们,我的情况应该是和你一样的。能告诉我怎么修复的不?小白一枚,折腾半个月了。 😁

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

  9. 以前就吃过这种亏,最后媒体库缩略图消失而不知原因,今天才知道了答案。

    1. 我也是最后选择所有图片全部调用原图 😆

  10. 都是要先备份数据库再优化 修改

添加新评论