我有一个字符串,包含在wordpress安装(服务器的名称)内,数千次,包含多个列,记录和表格。
我想用另一台服务器的位置更新它 - 我们正在移动内容。
所以来源就像http://my-server1/some/link/to/something,我想用http://my-other-server/some/link/to/something替换它。我基本上希望为http://my-server1的每个实例重复此过程。
在MySQL中有一种简单的方法吗?一个工具? 或者,我是否遗憾地必须更新每个记录?
谢谢,
答案 0 :(得分:38)
一种粗略(但有效)的方法是将模式转储到文件中,仔细应用搜索和替换然后重新导入。
事实上我今天就这样做了:)
答案 1 :(得分:17)
在谷歌搜索中遇到过这个问题,但这可能对某些人有所帮助。如果您知道表和列(您可以使用phpMyAdmin中的通配符搜索找到它),
更新 table_name SET column_name = REPLACE( column_name , '的 http://oldsite.com 强>', '的 http://newsite.com 强>');
将粗体部分替换为您自己的部分。
如果你有一个大型数据库,你可以将它应用到一个可以遍历每个表和列的脚本中。
答案 2 :(得分:11)
如果您乐意重新导入整个数据库,那么MySQL转储方法将是最好的选择。对于任何不想这样做的人 - WordPress核心安装实际上只包含11个表,其中很少是内容列,因此按列替换也同样容易。假设您没有引用链接或字符串的插件表,这将是您的SQL:
UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx');
UPDATE wp_comments SET comment_content = REPLACE(comment_content,'xcurrentx','xreplacementx');
UPDATE wp_links SET link_description = REPLACE(link_description,'xcurrentx','xreplacementx');
UPDATE wp_options SET option_value = REPLACE(option_value,'xcurrentx','xreplacementx');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx');
UPDATE wp_posts SET post_content = REPLACE(post_content,'xcurrentx','xreplacementx');
UPDATE wp_posts SET post_title = REPLACE(post_title,'xcurrentx','xreplacementx');
UPDATE wp_posts SET post_excerpt = REPLACE(post_excerpt,'xcurrentx','xreplacementx');
UPDATE wp_term_taxonomy SET description = REPLACE(description,'xcurrentx','xreplacementx');
UPDATE wp_usermeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx');
答案 3 :(得分:2)
您的问题已于2009年发布,在那一年,另一个人开发了一个基本的php工具,用于在某个数据库的所有表中搜索字符串。或者,您也可以使用不同的字符串替换所有出现的内容。
仍然在5年后(在撰写本文时)对Wordpress安装使用此工具比使用mysql转储更有效且更容易(尽管您可能希望在运行脚本之前创建转储)用于备份目的)。
您可以在其作者Eric Amundson的博客和项目的启动板页面中找到更多信息MySQL Search & Replace
我不相信你在这段时间之后仍然在寻找答案,但我也决定发布我的提示,希望它可以帮助别人在这里突然出现仍在寻找这个问题的解决方案
答案 4 :(得分:1)
还有一个名为Search Regex的Wordpress插件,允许在数据库中运行grep
搜索和替换。
答案 5 :(得分:0)
另外还有Brad Larson的答案 - 设置变量如:
SET @what_to_be_replaced = "what_to_be_replaced", @to_be_replaced_by = "to_be_replaced_by";
然后按如下方式使用它:
UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value, @what_to_be_replaced, @to_be_replaced_by );
答案 6 :(得分:0)
MySQL的替换或在 WordPress 中的sql文件或db中手动替换字符串不是一个好方法。 WordPress使用序列化字段,如果您替换其中的某些字符串,则序列化字段可能会中断(这是我的情况)
我使用了Better Search Replace插件,对我来说效果很好