如何一次在所有数据库上运行sql命令?

时间:2012-12-06 20:58:55

标签: mysql sql wordpress replace

我有大约80个wordpress博客,其中写了我的各种网站。我想更新所有数据库中的所有帖子,以获取特定的文本字符串,在本例中为域名。

该脚本在一个数据库上工作得非常好,但我需要对所有数据库进行一些更改,这些更改只需要很长时间。

我需要能够一次跨每个数据库运行这些命令,而不是一次只运行一个数据库。

我的脚本,因为它当前在单个数据库上运行:

UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://www.old-domain.com', 'http://mixudo.com');

非常感谢

3 个答案:

答案 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');

然后重新执行结果。

来源:https://dba.stackexchange.com/a/20251

答案 1 :(得分:0)

  1. 使用您需要在
  2. 上执行脚本的用户名/密码创建数据库名称列表
  3. 对于此列表中的每个数据库,执行:
  4. 登录该数据库并选择它
  5. 在该数据库上运行脚本
  6. 这是安全完成任务的唯一方法。

答案 2 :(得分:0)

您可以使用SHOW DATABASES命令获取mysql服务器上的数据库列表。使用它作为输入,您可以使用您能够通过数据库列表foreach()的任何语言编写shell脚本,并通过执行

在每个语句上运行UPDATE语句。
use DBNAME;

其中DBNAME是foreach中的变量。 update语句应该对所有数据库都一样,因为我假设每个db都有相同的表集,每个表中都有相同的表名。

至于Ed Heal的观点,这也假设您正在使用服务器的root / admin用户,以便它有权更新所有表。