2012-08-24 62 views
1

我必須從一臺服務器轉儲數據庫,將.SQL轉移到不同的服務器,然後運行下面的腳本使用此語法來刪除某些行:mysqldump過濾器?

DELETE wp_posts 
FROM wp_posts 
INNER JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID 
WHERE (wp_postmeta.meta_key = 'InternalOnly' AND wp_postmeta.meta_value IS NOT NULL); 

有沒有一種方法,我可以過濾傾銷他們之前的帖子?我不想在原始服務器上刪除它們。

回答

0

在要轉儲,運行下面的查詢,MySQL數據庫:

CREATE TABLE wp_posts_copy LIKE wp_posts; 
INSERT INTO wp_posts_copy 
SELECT wp_posts.* 
FROM wp_posts 
INNER JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID 
WHERE NOT(wp_postmeta.meta_key = 'InternalOnly' AND wp_postmeta.meta_value IS NOT NULL); 

它會創建表wp_posts_copy具有相同的結構wp_posts,然後插入你想保持到這個新表中的行。

當使用mysqldump來導出數據,exclude the original wp_posts table from the dump

mysqldump -u username -p database --ignore-table=your_database.wp_posts > backup.sql 

導入備份到新的服務器後,不要忘了重命名錶:

ALTER TABLE wp_posts_copy RENAME TO wp_posts; 
+0

夫婦的事情,我需要轉儲與我想保留的帖子相對應的postmeta和term_relationships。另外,在導入後重命名錶,是否覆蓋現有的wp_posts表? – AlxVallejo

+0

使用post_meta和term_relationships處理與我在答案中詳細描述的相同類型的事務,只導出要保留的數據。表wp_posts不應該存在於目標數據庫中,因爲您沒有從源數據庫導出它。如果新表已經存在,重命名錶將失敗。 – Jocelyn

+0

目標數據庫是源的以前的克隆。數據庫將每週更新一次,所以重命名方法的確會失敗。我可能必須按原樣轉儲源數據庫,然後在目標上運行刪除權限。 – AlxVallejo