Pages

Thursday, 21 February 2013

删除wordpress冗余数据及优化

提示:以下操作带有一定的风险,请先备份好数据库再操作!!!
WordPress使用MySQL数据库,先来看一下每个表对应的内容,没耐心的可跳过直接看下一节→具体清理步骤
首先我们需要了解Wordpress各个数据库表(3.0以上)的作用,这样删除的时候心里有底。
(1)wp_commentmeta: 用于保存评论的元信息,在将评论放入回收站等操作时会将数据放入此表,Akismet等插件也会生成此表的数据。此表不太重要。
(2)wp_comments: 用于保存评论信息的表。
(3)wp_links: 用于保存用户输入到Wordpress中的链接(通过Link Manager)的表。
(4)wp_options: 用于保存Wordpress相关设置、参数的表,里面包括了大量的重要信息。
(5)wp_postmeta: 用于保存文章的元信息(meta)的表。此表不太重要。
(6)wp_posts: 用于保存你所有的文章相关信息的表,非常的重要。一般它存储的数据是最多的。
(7)wp_terms: 文章和链接分类以及文章的tag分类可以在表里找到。
(8)wp_term_relationships: 日志与wp_terms中的类别与标签联合起来共同存储在wp_terms_relationships表中。类别相关链接也存储在wp_terms_relationships中。
(9)wp_term_taxonomy: 该表格对wp_terms表中的条目分类(类别、链接以及标签)进行说明。
(10)wp_usermeta : 用于保存用户元信息(meta)的表。
(11)wp_users:用于保存Wordpress使用者的相关信息的表。 »»»点击获取英文原版说明
具体清理步骤
» 清理wp_commentmeta
如果文章的所有评论中并没有此条评论,那么它在wp_commentmeta中也没有意义。用下面2个语句分别进行清理DELETE FROM wp_comments WHERE comment_approved = 'trash';DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments);另外在wp_commentmeta里面会记录评论被删除的时间,基本没什么意义,使用以下语句进行清理DELETE FROM wp_commentmeta WHERE meta_key LIKE '%trash%';因为wp_commentmeta没有涉及要重要数据,所以彻底清除的话影响不会太大。 以下是清空wp_commentmeta表语句TRUNCATE TABLE wp_commentmeta
» 清理Wp-options
第一种方法(暂不赘述,插件大家都会用吧):使用Clean Options plugin插件
第二种方法(新手不要做,有点小危险)
1本地端-在本地电脑上搭建一个全新的Wordpress
2本地端-将本地的wp_options表进行单独导出
3服务器端-先备份数据库,接着停用服务器上所有博客插件
4服务器端-在服务器后台的phpmyadmin中单独勾选wp_options表并清空
5服务器端-在服务器后台的phpmyadmin导入刚才在本地导出的wp_options表
6服务器端-phpmyadmin中的wp_options表的siteurl字段改成你的域名
7服务器端-WordPress里的【常规-站点地址(URL)改成你的地址】。
8服务器端-固定链接也要改成你原先的类型。
» 清理wp_postmeta
分别执行以下代码DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';
DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';
DELETE FROM wp_postmeta WHERE meta_key = '_revision-control';
下面一条也是删除语句,但是貌似有风险,不建议使用。期待高手来解释一下该语句的具体意思
DELETE FROM wp_postmeta WHERE meta_value = '{{unknown}}';
» 清理wp_posts
第一种方法:WP Cleaner插件(删除无用的修订版、自动草稿及自动保存的文章,减小空间,提高性能。有了上面的超级开关插件,WP Cleaner基本使用一次就足够了。)
第二种方法:执行以下语句
DELETE FROM wp_posts WHERE post_type = "revision";
最后再介绍下手动删除垃圾评论的语句
DELETE from wp_comments WHERE comment_approved = '0';
简单总结一下:前面写了这么多其实都不用看了,要清理冗余数据,分别依次执行以下语句就够了
DELETE FROM wp_comments WHERE comment_approved = 'trash';
DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments);
DELETE FROM wp_commentmeta WHERE meta_key LIKE '%trash%';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock';
DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';
DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';
DELETE FROM wp_postmeta WHERE meta_key = '_revision-control';
DELETE FROM wp_posts WHERE post_type = "revision";
DELETE FROM wp_posts WHERE post_status = "auto-draft";
DELETE from wp_comments WHERE comment_approved = '0';
最后,在phpMyAdmin中,选中所有表,点“优化表”。
经过这一番优化操作,就可以将WordPress数据库中的冗余数据删除,优化了数据库的性能。

最后推荐一个插件Super Switch(超级开关) 可以有选择地禁用Wordpress部分功能(其中就包括关闭自动草稿功能),或许可以使博客更快。
最后提醒一下,一定要事先备份好数据库!
------------------------------

WordPress MYSQL数据库优化技巧

WordPress系统使用时间长了,数据库中的冗余数据就会很多,定期优化和清理Wordpress的数据库,可以保证Wordpress能够快速工作。
  首先,停用一些无用的插件,将WordPress系统表之外的数据表都删除,只保留wp_posts, wp_comments, wp_terms, wp_term_relationships, wp_term_taxonomy 等系统数据表。
  其次,打开phpMyadmin,通过SQL语句进行冗余数据删除操作。删除前记得先备份一下。
  删除脚本是:
  DELETE FROM wp_posts WHERE post_type = ‘revision’;
  DELETE FROM wp_postmeta WHERE meta_key = ‘_edit_lock’;
  DELETE FROM wp_postmeta WHERE meta_key = ‘_edit_last’;
  最后,在phpMyAdmin中,选中所有表,点“优化表”。
  经过这一番优化操作,就可以将WordPress数据库中的冗余数据删除,优化了数据库的性能。
以上操作,需要用户懂一些SQL语句,不要进行误操作,如果用户SQL比较熟的话,还可以看看这篇文章

八个有用的WordPress的SQL语句
在过去的十年中,MySQL已经成为广受欢迎的数据库,而WordPress博客使用的是MySQL数据库,虽然使用插件可以解决一些问题,但是实现某些 特殊任务的时候,在phpMyAdmin中执行SQL语句是最简洁的方法,这里就总结八个有用的WordPress系统的SQL语句,用于解决一些实际碰 到的问题。
   1、创建备份数据库
  备份数据库是首先要做的事情,只需要通过以下方法就可以简单备份数据库:
  登录phpMyAdmin后。选择你的WordPress数据库,然后点击“导出”按钮,选择一种压缩方式(可以使用gzip)并单击“执行”按钮,当浏览器提示是否下载的时候,点“是”,将数据库文件下载到本地。
   2、批量删除文章修订
  WordPress2.6以后的版本增加了一个Post revisions功能,虽然有点用,但文章修订增加了你数据库的大小,我们可以选择批量删除。
  登录phpMyAdmin后执行下面的SQL语句即可批量删除。
DELETE FROM wp_posts WHERE post_type = “revision”;
   3、批量删除垃圾评论
  一个真实的故事是,我的一个朋友在网上建立了一个博客,有次他花了几天时间外出度假,没有上网,当他回来的时候,登录自己的博客,看到有5000多条评论等待审核,当然,大多数都是垃圾评论,要手动删除这些评论要花大量时间,因此我们可以使用以下办法。
  登录phpMyAdmin后执行下面的SQL语句。
DELETE from wp_comments WHERE comment_approved = ’0′;
  要小心,虽然这种解决方案对于处理数百万的垃圾平邮非常有用,但是也会清除未经批准的评论,因此最好还是安装使用Akismet来对付垃圾评论。
   4、修改文章属性
  你安装WordPress后,admin账户就创建了,不少人都错误的使用这个帐号来写博客,直到他们认识到,这并不是个人帐号。
  解决的方法,每篇文章修改作者属性需要大量的时间,下面的这个SQL语句可以帮你快速完成这个功能。
  首先你要找到你正确的用户名,使用下面的SQL语句可以找到你的用户ID号。
SELECT ID, display_name FROM wp_users;
  假设这个ID为NEW_AUTHOR_ID,而管理员admin的ID为OLD_AUTHOR_ID,接着,运行下面的SQL语句。
UPDATE wp_posts SET post_author=NEW_AUTHOR_ID WHERE post_author=OLD_AUTHOR_ID;
   5、手动重设密码
  很多人为了保护自己的博客不被人黑掉,使用了很复杂的密码,这虽然是一件好事,但也经常会发生遗忘管理员密码的事情。
  当然,通过电子邮件可以发送给你WordPress重设密码的链接,但如果你无法访问你的邮件地址,那么就只好使用下面的SQL语句来重设你的密码了。
UPDATE wp_users SET user_pass = MD5(‘PASSWORD’) WHERE wp_users.user_login =’admin’ LIMIT 1;
  MD5是MySQL内置的哈希函数,用于将密码转换为散列值。
   6、更改WordPress的域名
  你可能有时候会想要更改你博客的域名,但是WordPress会将你的域名存储在数据库中,因此你要使用下面的SQL语句来修改。
UPDATE wp_options SET option_value = replace(option_value, ‘http://www.oldsite.com’, ‘http://www.newsite.com’) WHERE option_name = ‘home’ OR option_name = ‘siteurl’;
  接着,你还要使用下面的SQL将文章的GUID也进行修改。
UPDATE wp_posts SET guid = replace(guid, ‘http://www.oldsite.com’,'http://www.newsite.com’);
  最后,使用下面的语句将文章里所有旧域名替换为新域名。
UPDATE wp_posts SET post_content = replace(post_content, ‘http://www.oldsite.com’, ‘http://www.newsite.com’);
   7、显示SQL查询数量
  在你有话博客性能的时候,了解到查询数据库的数量是非常重要的,为了减少数据库查询,我们需要知道在一个页面上到底有多少个查询。
  这一次,不需要登录phpMyAdmin了,你只需要修改footer.php文件,在文件结尾增加下面几行代码即可。

queries in seconds.

   8、恢复你的WordPress数据库
  当你的数据库因为某些原因(黑客或者升级错误)被损坏或者丢失了,如果你有备份的话,那可以恢复你的WordPress数据库。
  登录phpMyAdmin,选择你的WordPress数据库,点“导入”按钮,点“浏览”按钮,然后从你的硬盘选择备份文件,点“执行”按钮就可以将数据库导入。
  如果顺利的话,你的WordPress功能将会恢复正常。