我有大约80个wordpress博客,其中写了我的各种网站。我想更新所有数据库中的所有帖子,以获取特定的文本字符串,在本例中为域名。
该脚本在一个数据库上工作得非常好,但我需要对所有数据库进行一些更改,这些更改只需要很长时间。
我需要能够一次跨每个数据库运行这些命令,而不是一次只运行一个数据库。
我的脚本,因为它当前在单个数据库上运行:
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://www.old-domain.com', 'http://mixudo.com');
非常感谢
答案 0 :(得分:1)
尝试执行此查询:
SELECT CONCAT('UPDATE ',
schema_name, '.\'wp_posts\' SET \'post_content\' = REPLACE(post_content, \'http://www.old-domain.com\', \'http://mixudo.com\');')
FROM information_schema.schemata
WHERE schema_name NOT IN ('information_schema','mysql','performance_schema','phpmyadmin', 'webauth');
然后重新执行结果。
答案 1 :(得分:0)
这是安全完成任务的唯一方法。
答案 2 :(得分:0)
您可以使用SHOW DATABASES命令获取mysql服务器上的数据库列表。使用它作为输入,您可以使用您能够通过数据库列表foreach()的任何语言编写shell脚本,并通过执行
在每个语句上运行UPDATE语句。use DBNAME;
其中DBNAME是foreach中的变量。 update语句应该对所有数据库都一样,因为我假设每个db都有相同的表集,每个表中都有相同的表名。
至于Ed Heal的观点,这也假设您正在使用服务器的root / admin用户,以便它有权更新所有表。