wordpress在MySQL批量替换数据库中所有表的域名(a.com → b.com)

Deepseek提供支持

方法一:使用存储过程(精确指定数据库)

DELIMITER //
CREATE PROCEDURE replace_domain_in_database(
    IN db_name VARCHAR(64), 
    IN old_domain VARCHAR(255), 
    IN new_domain VARCHAR(255)
)
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE tname VARCHAR(64);
    DECLARE cname VARCHAR(64);
    DECLARE cur CURSOR FOR 
        SELECT table_name, column_name 
        FROM information_schema.columns 
        WHERE table_schema = db_name  -- 明确使用传入的数据库名
        AND data_type IN ('varchar','char','text','longtext','mediumtext','tinytext','json');
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur;
    read_loop: LOOP
        FETCH cur INTO tname, cname;
        IF done THEN
            LEAVE read_loop;
        END IF;

        SET @sql = CONCAT('UPDATE `', db_name, '`.`', tname, '` SET `', cname, 
                         '` = REPLACE(`', cname, '`, "', old_domain, '", "', new_domain, '")');
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;

        SELECT CONCAT('Replaced in: ', db_name, '.', tname, '.', cname) AS progress;
    END LOOP;
    CLOSE cur;
END //
DELIMITER ;

-- 使用示例(替换wordpress_db数据库中所有a.com为b.com)
CALL replace_domain_in_database('wordpress_db', 'a.com', 'b.com');

-- 执行完成后删除存储过程
DROP PROCEDURE IF EXISTS replace_domain_in_database;

方法二:分表替换(指定数据库名)

-- 针对wordpress_db数据库的关键表替换
USE wordpress_db;

-- 文章内容
UPDATE wp_posts SET 
    post_content = REPLACE(post_content, 'a.com', 'b.com'),
    post_excerpt = REPLACE(post_excerpt, 'a.com', 'b.com');

-- 文章元数据
UPDATE wp_postmeta SET 
    meta_value = REPLACE(meta_value, 'a.com', 'b.com');

-- 系统选项(特别注意siteurl和home)
UPDATE wp_options SET 
    option_value = REPLACE(option_value, 'a.com', 'b.com')
WHERE option_name NOT IN ('siteurl', 'home');

-- 单独更新站点URL(谨慎操作)
UPDATE wp_options SET 
    option_value = 'https://b.com'
WHERE option_name IN ('siteurl', 'home');

-- 评论内容
UPDATE wp_comments SET 
    comment_content = REPLACE(comment_content, 'a.com', 'b.com'),
    comment_author_url = REPLACE(comment_author_url, 'a.com', 'b.com');

数据库名称验证方法

在执行替换前,建议先验证数据库名称和表结构:

-- 查看当前所有数据库
SHOW DATABASES;

-- 查看特定数据库的所有表
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'wordpress_db';

-- 查看包含a.com的数据表(预览)
SELECT DISTINCT table_name, column_name
FROM information_schema.columns
WHERE table_schema = 'wordpress_db'
AND EXISTS (
    SELECT 1 FROM information_schema.tables 
    WHERE table_schema = 'wordpress_db' 
    AND table_name = columns.table_name
);

重要安全提醒

  1. 必须备份指定数据库:
   mysqldump -u username -p wordpress_db > wordpress_db_backup.sql
  1. 对于大型数据库,建议分批操作:
   -- 示例:分批处理文章表
   UPDATE wordpress_db.wp_posts SET 
       post_content = REPLACE(post_content, 'a.com', 'b.com')
   WHERE ID BETWEEN 1 AND 1000;
  1. 如果使用不同数据库前缀(非wp_),请相应调整:
   -- 例如前缀为wp123_
   UPDATE wordpress_db.wp123_options SET 
       option_value = REPLACE(option_value, 'a.com', 'b.com');
  1. 操作完成后验证:
   -- 检查是否还有a.com残留
   SELECT * FROM wordpress_db.wp_posts 
   WHERE post_content LIKE '%a.com%' LIMIT 10;

后续操作

  1. 更新WordPress配置文件:
   // 修改wp-config.php
   define('WP_HOME', 'https://b.com');
   define('WP_SITEURL', 'https://b.com');
  1. 设置301重定向(在.htaccess中):
   RewriteEngine On
   RewriteCond %{HTTP_HOST} ^a\.com$ [OR]
   RewriteCond %{HTTP_HOST} ^www\.a\.com$
   RewriteRule ^(.*)$ https://b.com/$1 [R=301,L]
  1. 清除所有缓存:
  • WordPress缓存插件
  • 服务器OPcache
  • CDN缓存
  • 浏览器缓存
广告
广告图片
温馨提示 : 非特殊注明,否则均为©李联华的博客网原创文章,本站文章未经授权禁止任何形式转载;来自:俄亥俄州·哥伦布 ,欢迎您的访问!
文章链接:https://www.lilianhua.com/wordpress-batch-replaces-the-domain-names-of-all-tables-in.html
请先登录才能参与答题
距本场结束剩 00 00 00 00
轻量应用服务器 2核2G
200M峰值带宽,适用于网站搭建、Web应用、容器环境、电商独立站等
立即前往
扫码进入
扫描二维码购买
文澜千文

文澜千文

请登录以使用此功能。

盐津铺子薯片休闲零食多口味礼盒烘焙非油炸膨化零食整箱490g14小包 盐津铺子薯片休闲零食多口味礼盒烘焙非油炸膨化零食整箱490g14小包
Loading...