3

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

该脚本在一个数据库上运行良好,但我需要对所有数据库进行几处更改,这将花费太长时间。

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

我的脚本,因为它目前在单个数据库上工作:

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

非常感谢

4

3 回答 3

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

于 2016-12-16T13:13:43.800 回答
0
  1. 使用需要执行脚本的用户名/密码创建数据库名称列表
  2. 对于此列表中的每个数据库,请执行以下操作:
  3. 登录到该数据库并选择它
  4. 在该数据库上运行脚本

这是安全完成任务的唯一方法。

于 2012-12-06T21:03:07.597 回答
0

您可以使用 SHOW DATABASES 命令获取 mysql 服务器上的数据库列表。使用它作为输入,您可以使用任何语言编写 shell 脚本,该脚本将通过数据库列表进行 foreach(),并在每个数据库上运行 UPDATE 语句,方法是执行

use DBNAME;

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

就 Ed Heal 而言,这还假设您正在使用 root/admin 用户作为服务器,以便它有权更新所有表。

于 2012-12-06T21:04:02.057 回答