WordPress站点更换域名处理流程

做个笔记

众所周知,榆桦的老域名被人抢走后,只能被迫换域名。但WordPress站点更换域名之后,替换域名是非常痛苦的。主要是因为数据库中大量使用了老域名,且有大部分内容存在序列化数据。如果盲目的直接在MySQL中替换老域名,将是灾难性的。

榆桦,这次恢复站点时最痛苦的就是无法进入WordPress后台,因为我有数据库替换插件,只要能进入后台就可用是用子比主题作者自己写的这个插件来无痛替换。但问题就在于老域名不是我的,我进不去,每次尝试进入WordPress后台都会被跳转到老域名中去。所以才有了今天折磨人的痛苦替换经历。

图片[1]-WordPress站点更换域名处理流程

如何正确处理

安装WP-CLI

当WordPress后台进不去时,使用WP-CLI是最优解。
我们直接在SSH中链接服务器,在终端执行以下命令:

# 下载 wp-cli.phar 文件
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
# 赋予执行权限
chmod +x wp-cli.phar
# 移动到系统路径中以便全局调用
sudo mv wp-cli.phar /usr/local/bin/wp
# 验证是否安装成功
wp --info

如果安装成功则显示如:

  • WP-CLI root dir: phar://wp-cli.phar/vendor/wp-cli/wp-cli
  • WP-CLI vendor dir: phar://wp-cli.phar/vendor
  • WP_CLI phar path: phar:///usr/local/bin/wp
  • WP-CLI packages dir:
  • WP-CLI cache dir: /home/ubuntu/.wp-cli/cache
  • WP-CLI global config:
  • WP-CLI project config:
  • WP-CLI version: 2.12.0

看到上面的内容就证明安装成功了,榆桦已经把坑踩完了,找了一堆安装源,就这个可以成功安装WP-CLI

正片开始

使用WP-CLI模拟检查

# 检查所有表中包含旧域名的内容
wp search-replace 'www.yhkj8888.com' 'old.yhzyw.top' --all-tables --dry-run

# 检查特定表中的序列化数据
wp search-replace '/www/wwwroot/www.yhkj8888.com' '/www/wwwroot/old.yhzyw.top' wp_options --dry-run

你将得到模拟替换数据和影响范围,说人话就是大概要替换多少条数据!而且还能知道有哪些是需要单独处理的序列化数据。

再根据老唐的教程里序列化替换内容来判断自己需要处理哪些数据。(仅限是用子比主题的,如果不是子比主题请备份数据库后自行尝试!)

顺便贴一下老唐的MySQL命令替换法,各位根据自己实际情况使用。

批量替换命令

如果前后内容字符数量一致,请使用以下命令批量替换数据库全部内容(包括序列化数据)。请复制以下代码,并按下面的图示修改后,再粘贴到SQL命令中执行!

#前后内容字符数量一致
UPDATE wp_options     SET option_value       = replace(option_value,       'https://old.zibll.com','https://new.zibll.com');#配置表
UPDATE wp_posts       SET post_content       = replace(post_content,       'https://old.zibll.com','https://new.zibll.com');#文章内容
UPDATE wp_postmeta    SET meta_value         = replace(meta_value,         'https://old.zibll.com','https://new.zibll.com');#文章Meta
UPDATE wp_posts       SET guid               = replace(guid,               'https://old.zibll.com','https://new.zibll.com');#文章链接
UPDATE wp_comments    SET comment_content    = replace(comment_content,    'https://old.zibll.com','https://new.zibll.com');#评论内容
UPDATE wp_comments    SET comment_author_url = replace(comment_author_url, 'https://old.zibll.com','https://new.zibll.com');#评论网址
UPDATE wp_commentmeta SET meta_value         = replace(meta_value ,        'https://old.zibll.com','https://new.zibll.com');#评论mate
UPDATE wp_users       SET user_url           = replace(user_url,           'https://old.zibll.com','https://new.zibll.com');#用户链接
UPDATE wp_usermeta    SET meta_value         = replace(meta_value,         'https://old.zibll.com','https://new.zibll.com');#用户meta
UPDATE wp_zib_message SET title              = replace(title,              'https://old.zibll.com','https://new.zibll.com');#子比消息:标题
UPDATE wp_zib_message SET content            = replace(content,            'https://old.zibll.com','https://new.zibll.com');#子比消息:内容
UPDATE wp_termmeta    SET meta_value         = replace(meta_value ,        'https://old.zibll.com','https://new.zibll.com');#trem_mate

如果前后字符数量不一致,则使用以下代码(已排除序列化数据):

#前后内容字符数量不一致
UPDATE wp_posts       SET post_content       = replace(post_content,       'http://old.zibll.com','https://new.zibll.com');#文章内容
UPDATE wp_posts       SET guid               = replace(guid,               'http://old.zibll.com','https://new.zibll.com');#文章链接
UPDATE wp_comments    SET comment_content    = replace(comment_content,    'http://old.zibll.com','https://new.zibll.com');#评论内容
UPDATE wp_comments    SET comment_author_url = replace(comment_author_url, 'http://old.zibll.com','https://new.zibll.com');#评论网址
UPDATE wp_users       SET user_url           = replace(user_url,           'http://old.zibll.com','https://new.zibll.com');#用户链接
UPDATE wp_zib_message SET title              = replace(title,              'http://old.zibll.com','https://new.zibll.com');#子比消息:标题
UPDATE wp_zib_message SET content            = replace(content,            'http://old.zibll.com','https://new.zibll.com');#子比消息:内容
UPDATE wp_options     SET option_value       = replace(option_value,       'http://old.zibll.com','https://new.zibll.com') WHERE option_value NOT LIKE '%{%' and option_value NOT LIKE '%}';#配置表
UPDATE wp_termmeta    SET meta_value         = replace(meta_value ,        'http://old.zibll.com','https://new.zibll.com') WHERE meta_value NOT LIKE '%{%' and meta_value NOT LIKE '%}';#trem_mate
UPDATE wp_postmeta    SET meta_value         = replace(meta_value,         'http://old.zibll.com','https://new.zibll.com') WHERE meta_value NOT LIKE '%{%' and meta_value NOT LIKE '%}';#文章Meta
UPDATE wp_commentmeta SET meta_value         = replace(meta_value ,        'http://old.zibll.com','https://new.zibll.com') WHERE meta_value NOT LIKE '%{%' and meta_value NOT LIKE '%}';#评论mate
UPDATE wp_usermeta    SET meta_value         = replace(meta_value,         'http://old.zibll.com','https://new.zibll.com') WHERE meta_value NOT LIKE '%{%' and meta_value NOT LIKE '%}';#用户meta

安装成功后的基本测试

# 进入WordPress网站目录
cd /var/www/your-wordpress-site

# 测试WP-CLI功能
wp core version
wp plugin list --status=active

没有报错就OK!

# 进入WordPress网站根目录
cd /www/wwwroot/your-domain.com

再次提醒,备份好你的数据库再操作!

替换wp_posts表

wp search-replace 'www.yhkj8888.com' 'old.yhzyw.top' wp_posts

‌替换wp_postmeta表

wp search-replace 'www.yhkj8888.com' 'old.yhzyw.top' wp_postmeta

替换wp_options表

wp search-replace 'www.yhkj8888.com' 'old.yhzyw.top' wp_options

替换wp_comments表

wp search-replace 'www.yhkj8888.com' 'old.yhzyw.top' wp_comments

替换wp_zib_message表

wp search-replace 'www.yhkj8888.com' 'old.yhzyw.top' wp_zib_message

以上我都是直接替换成功,但在过程中有三处报错主要是插件,但我感觉此时就算替换失败也不影响登录后台。还是贴出来各位参考一下。

wp search-replace 'www.yhkj8888.com' 'old.yhzyw.top' wp_yoast_indexable
wp search-replace 'www.yhkj8888.com' 'old.yhzyw.top' wp_yoast_seo_links
wp search-replace 'www.yhkj8888.com' 'old.yhzyw.top' wp_zib_message

这三处WP-CLI替换失败后,我是用mysql命令在phpMyAdmin中执行SQL语句替换成功。

USE old_yhzyw_top;

-- 替换 Yoast SEO 表
UPDATE wp_yoast_indexable 
SET permalink = REPLACE(permalink, 'www.yhkj8888.com', 'old.yhzyw.top')
WHERE permalink LIKE '%www.yhkj8888.com%';

-- 替换子比消息表
UPDATE wp_zib_message 
SET content = REPLACE(content, 'www.yhkj8888.com', 'old.yhzyw.top')
WHERE content LIKE '%www.yhkj8888.com%';

-- 替换 Yoast SEO链接 表
UPDATE wp_yoast_seo_links 
SET url = REPLACE(url, 'www.yhkj8888.com', 'old.yhzyw.top')
WHERE url LIKE '%www.yhkj8888.com%';

执行SQL语句前先选中你的数据库!

验证结果,然后清理缓存。没有报错信息就是OK的

# 检查是否还有残留旧域名
wp search-replace 'www.yhkj8888.com' 'old.yhzyw.top' --all-tables --dry-run

# 清理缓存
wp cache flush

到此替换工作完成了90%,现在前端可以正常显示了,后端登录也没有问题了,但替换工作还没有结束。
登录后台之后,安装老唐的数据库替换插件,可以去子比主题官网找,最新版V1.7
启动插件,利用插件将剩余的未替换到的全一次性替换掉。

好了,此时整个站点都干净了。接下来就可以处理其他的事情了。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享