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
);
重要安全提醒
- 必须备份指定数据库:
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
English (US)
Español (ES)
Português (PT)
Français (CA)
Español (MX)
Español (VE)
Español (CO)
Español (AR)
Português (BR)
Quechua (PE)
Guaraní (PY)
简体中文 (ZH)
繁體中文 (HK)
日本語 (JP)
한국어 (KR)
हिन्दी (HI)
Pilipino (PH)
ไทย (TH)
Tiếng Việt (VN)
Bahasa Melayu (MY)
Bahasa Indonesia (ID)
বাংলা (BD)
اردو (PK)
සිංහල (LK)
ភាសាខ្មែរ (KH)
English (UK)
Français (FR)
Deutsch (DE)
Italiano (IT)
Русский (RU)
Nederlands (NL)
Türkçe (TR)
Polski (PL)
Svenska (SE)
Norsk (NO)
Dansk (DK)
Suomi (FI)
Ελληνικά (GR)
Čeština (CZ)
Magyar (HU)
Română (RO)
Български (BG)
Српски (RS)
Українська (UA)
