2012-08-24 58 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