雖然通過 WordPress 強大的插件外掛庫,你幾乎可以幹任何的事情,但是有時候需要快速修復一些特定的問題的時候,直接運算元據庫可能反而是方便的方法,所以這篇文章就給大家介紹 WordPress 資料庫維護時常用到 12 個 SQL 語句。切記一點,操作前記得備份哦!!
*注:下面假設 WordPress 資料庫的表的字首都是預設的 “wp_” 。
1. 直接在資料庫中修改密碼
密碼忘記了是經常的事情,博客網站密碼忘記了進不去,可以直接在資料庫裏面修改:
UPDATE ‘wp_users’ SET ‘user_pass’ = MD5(‘PASSWORD’) WHERE ‘user_login’ =’admin’ LIMIT 1;
上面採用了 MySQL 的 MD5() 函式講密碼轉成 MD5 Hash 。
2. 將日誌從一個作者轉移到另外一個
假如你的博客網站的某個作者離開了,或者你不想讓 “admin” 作為作者名,想把日誌的作者從一個改到另外一個:
UPDATE wp_posts SET post_author=NEW_AUTHOR_ID WHERE post_author=OLD_AUTHOR_ID;
*注:你需要知道兩個作者的 user id 。
3. 刪除資料庫中日誌修訂記錄和其相關的 post_meta 資料
特別是針對多人博客網站的時候,日誌修訂功能很重要,但是日誌修訂功能也在資料庫裏面新增了很多的資料,假設你的博客網站只有 100 篇日誌,每篇日誌有 10 個日誌修訂,你的 posts 表中就會有超過 1000 條記錄,嚴重的資料冗餘:
DELETE a,b,c FROM wp_posts a WHERE a.post_type = ‘revision’ LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id);
*注:上面的 SQL 將刪除資料庫中所有的日誌修訂記錄和其相關的 meta 資訊(自定義欄位)。
當然你還可以:徹底遮蔽日誌修訂功能。
4. 批量刪除垃圾留言
如果你一段時間沒有管理你的博客網站,剛好出去休假,沒有辦法上網,並且博客網站也沒有裝類似 Akismet 這類防垃圾留言插件外掛,那麼你回來的時候,你會發現博客網站後台有成千上萬條垃圾留言需要你去稽核。
這個時候,其實你只需要稽核通過正常的留言,然後執行下面這條 SQL:
DELETE from wp_comments WHERE comment_approved = ‘0’;
5. 查詢沒用的標籤
你可能建立一些 WordPress 標籤之後,就沒有再使用,你可以通過下面這條 SQL 找到它們,然後安全的刪除他們。
SELECT * From wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy=’post_tag’ AND wtt.count=0;
6. 查詢和替換資料
對於熟悉 MySQL 資料庫的開發者來説,replace() 這個 MySQL 函式都應該很熟悉,它可以讓你指定一個欄位,然後替換它裏面的字串,一旦執行,所有這個欄位裏面的字串都會被替換。對於 WordPress 博客網站來説,這個 SQL 則非常實用,它可以讓你批量修改某些輸入錯誤,或者某個郵件地址等等。
UPDATE table_name SET field_name = replace( field_name, ‘string_to_find’, ‘string_to_replace’ ) ;
替換日誌內容中字串:
UPDATE wp_posts SET post_content = replace( post_content, ‘string_to_find’, ‘string_to_replace’ ) ;
將某個留言者地址替換下:
UPDATE wp_comments SET comment_author_url = REPLACE( comment_author_url, ‘http://oldurl.com’, ‘http://newurl.com’ );
留言者郵箱:
UPDATE wp_comments SET comment_author_email = REPLACE( comment_author_email, ‘old-email@address.com’, ‘new-email@address.com’ );
還有一個 WordPress 插件外掛 Search & Replace 還提供一個後台讓你更加容易進行批量替換。
7. 獲取所有留言者的郵件地址
有時候你想做點不是那麼好的事情,比如給所有留言者發下郵件,告訴他們你博客網站做了一些新的功能,或者寫了一個很不錯的文章,那麼你幹壞事情之前,首先要獲取所有留言者的郵件地址:
SELECT DISTINCT comment_author_email FROM wp_comments;
*注:上面的 DISTINCT 讓你獲取的郵件地址是唯一的,即使這個使用者發過好幾次留言,也不怕。
不過羣發郵件這件事情個人建議還是不要這樣做好。
8. 一次把所有插件外掛都停了
網站出現問題了,需要一次把插件外掛全部都先停了之後檢測下:
UPDATE wp_options SET option_value = ” WHERE option_name = ‘active_plugins’;
9. 刪除所有標籤
有時候,你瘋了,想刪除博客網站所有的標籤,這個時候你不能單純的清空 wp_terms 表,因為 wp_terms 表同時存了分類和標籤的資料,這樣你就把分類資訊也刪除了,這樣你就真的瘋了。
DELETE a,b,c
FROM
database.prefix_terms AS a
LEFT JOIN database.prefix_term_taxonomy AS c ON a.term_id = c.term_id
LEFT JOIN database.prefix_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_id
WHERE (
c.taxonomy = ‘post_tag’ AND
c.count = 0
);
*注:上面 SQL 除了刪除標籤,還刪除了所有標籤和標籤和日誌關聯的關係。
10. 列出沒用的 post meta
wp_postmeta 中的資料是由一些插件外掛或者自定義欄位生成的,他是對 wp_posts 表的一種無限的擴充套件,但是可能由於某種原因,日誌被刪除了,但是它的 meta 資訊還存在 wp_postmeta 表中,下面這條 SQL 將這些沒有關聯日誌的 meta 資料列出:
SELECT * FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;
11. 關閉舊日誌留言功能
厄,對於一些技術博客網站或者其他博客網站來説,一些舊日誌的內容可能已經過時了,但是一些讀者,還是對一些問題 “糾纏不清” 或者 “喋喋不休”,怎麼辦,把留言關了就好了:
關閉留言:
UPDATE wp_posts SET comment_status = ‘closed’ WHERE post_date < '2009-01-01' AND post_status = 'publish';
關閉 Trackback:
UPDATE wp_posts SET ping_status="closed" WHERE post_date < '2009-01-01' AND post_status = 'publish';
12. 刪除所有 url 含有特定字串的留言
一些留言者很煩,一次留幾十個,其連結都指定到一些賣偉哥,起重機,SEO 站羣 的站點,煩人的很,一個一個刪,又累,下面這條 SQL 可以來幫忙:
DELETE from wp_comments WHERE comment_author_url LIKE "%viagra%" ;
簡單總結
這些 SQL 語句是直接對資料庫進行操作的,如果你不是那麼懂資料庫或者 SQL 語言,建議你不要這麼做,如果你還是比較自信 SQL 操作,建議操作之前備份下資料庫。