wordpress在MySQL批量替换数据库中所有表的域名(a.com → b.com)
AI摘要
由
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
);
重要安全提醒
- 必须备份指定数据库:
mysqldump -u username -p wordpress_db > wordpress_db_backup.sql
- 对于大型数据库,建议分批操作:
-- 示例:分批处理文章表
UPDATE wordpress_db.wp_posts SET
post_content = REPLACE(post_content, 'a.com', 'b.com')
WHERE ID BETWEEN 1 AND 1000;
- 如果使用不同数据库前缀(非wp_),请相应调整:
-- 例如前缀为wp123_
UPDATE wordpress_db.wp123_options SET
option_value = REPLACE(option_value, 'a.com', 'b.com');
- 操作完成后验证:
-- 检查是否还有a.com残留
SELECT * FROM wordpress_db.wp_posts
WHERE post_content LIKE '%a.com%' LIMIT 10;
后续操作
- 更新WordPress配置文件:
// 修改wp-config.php
define('WP_HOME', 'https://b.com');
define('WP_SITEURL', 'https://b.com');
- 设置301重定向(在.htaccess中):
RewriteEngine On
RewriteCond %{HTTP_HOST} ^a\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.a\.com$
RewriteRule ^(.*)$ https://b.com/$1 [R=301,L]
- 清除所有缓存:
- WordPress缓存插件
- 服务器OPcache
- CDN缓存
- 浏览器缓存
温馨提示 : 非特殊注明,否则均为©李联华的博客网原创文章,本站文章未经授权禁止任何形式转载;来自:俄亥俄州·哥伦布 ,欢迎您的访问!
文章链接:https://www.lilianhua.com/wordpress-batch-replaces-the-domain-names-of-all-tables-in.html
文章链接:https://www.lilianhua.com/wordpress-batch-replaces-the-domain-names-of-all-tables-in.html
