注意:是要操作数据库的
更换网站域名
以下内容专注站点本身的恢复,如果wordpress目录也有变化,也需要做调整表记录值。实际中,还得考虑搜索引擎的收录、外部链接更新等等。
在wordpress 6.7.2上成功。
-- DBeaver 动态参数
@set oldUrl = https://t725.cn
@set newUrl = https://blog.t725.cn
select * from wp_options o WHERE o.option_value LIKE '%${oldUrl}%';
-- UPDATE wp_options SET option_value = replace(option_value, '${oldUrl}', '${newUrl}') WHERE option_value LIKE '%${oldUrl}%';
select * from wp_posts p WHERE p.guid LIKE '%${oldUrl}%' ;
-- UPDATE wp_posts SET guid = replace(guid, '${oldUrl}', '${newUrl}') WHERE guid LIKE '%${oldUrl}%';
select * from wp_posts p WHERE p.post_content LIKE '%${oldUrl}%'; -- 正文里,上传的图片URL
-- UPDATE wp_posts SET post_content = replace(post_content, '${oldUrl}', '${newUrl}') WHERE post_content LIKE '%${oldUrl}%';
select * from wp_postmeta m WHERE m.meta_value LIKE '%${oldUrl}%';
-- UPDATE wp_postmeta SET meta_value = replace(meta_value, '${oldUrl}', '${newUrl}') WHERE meta_value LIKE '%${oldUrl}%';
select * from wp_usermeta u WHERE u.meta_value LIKE '%${oldUrl}%'; -- simple_local_avatar 插件,上传的头像URL
-- UPDATE wp_usermeta SET meta_value = replace(meta_value, '${oldUrl}', '${newUrl}') WHERE meta_value LIKE '%${oldUrl}%';
COMMIT;修改固定链接结构
网上的WP Permalinks Migration插件,在插件商店里搜索不到了。还有Custom Permalinks、Permalink Manager Lite插件,不想装了。
思路:先安装插件 Redirection,再找出现有访问URI与文章ID(/p?=id)的关联关系,后批量插入到插件 Redirection中。
实战:原URI是 /%postname%/ ,在6.8.2上成功。
1、访问URI与文章ID(/p?=id)的关联
select p.id,p.post_name from wp_posts p WHERE p.post_type ='post' AND p.post_status='publish';2、生成批量插入 wp_redirection_items 记录的示例SQL
INSERT INTO wordpress.wp_redirection_items
(url, match_url, match_data, regex, `position`, last_count, last_access, group_id, status, action_type, action_code, action_data, match_type, title)
VALUES('/{给人看的post_name,也就是原URI}/', '/{p.post_name,也就是原URI}', NULL, 0, {分组ID下记录序号,从0开始}, 0, '1970-01-01 00:00:00.000', {插件 Redirection的分组ID}, 'enabled', 'url', 301, '/?p={post_id}', 'url', NULL);- {xxx}代表变化的值
- {给人看的post_name,也就是原URI}是值{p.post_name,也就是原URI}的,URL解码后的值。
3、将第一步的所有记录数据,加工成第二步数据记录。
- Excel大法:要注意含数字的,在批量拖拉时,会变成自增长序号,而有字段是只能复制,比如301
- Select 文本拼接大法:可使用行号,来解决{分组ID下记录序号,从0开始}值的生成。
-- 行号处理 mysql 自定义变量显示行号@rowno,简洁而实用
SELECT @rowno:=@rowno+1 as rowno,r.* from grade_table r ,(select @rowno:=0) t;4、调整WordPress设置中,固定链接的结构为 /post/%postname%/
5、在数据库中执行第三步生成的SQL
6、手工增加一条正则表达式重定向,用来处理原来URI中分页与feed的访问。

^/(?!(post|page|category|tag))(.*)/(\d|feed)/$
$2引用(.*)
还有不建议使用的扩展版本,Nginx配置正则表达式:^/(?!(feed|page|post|tag|category|privacy-policy|contact-us|wp-json|wp-admin|wp-content|wp-includes|additional|autodiscover)).*/
- 虽然可以命中不是以上列举的,开头的(非法URI)请求,但有缺点:
- 存在会误杀 /? 开头的正常请求,比如:/?rest_route=/
- 使用以上列举开头,也不会命中,比如: /feedABC/
- URI开头 /.XXX 的请求,也不会命中,但可以为单独
location解决 - 没有使得 / 结尾的请求,也不会命中
- 需要固定链接为 /post/ 开头
- 还有没有其他,正常请求URI?
7、检查原来老的URI(文章、页面、标签、分类),是否能正确重定向到文章里,而页面、标签、分类有没有影响。
- 后续1~3,还得检查,看有没有404记录产生。
修改 wordpress 数据库的表名前缀
两种方法:使用插件 DB PREFIX,或手工调整。
手工方式有三步,目前看下来,只适合由安装自义值改回默认值(第三步从wp_改为其他值,会查找出其他记录)。
- wp-config.php 数据库前缀改回为 wp_ ,注意区分大小写
$table_prefix = 'wp_';
- 改表名:收集所有表名,后批量修改表名。
show TABLES; -- 收集表名
RENAME TABLE my_commentmeta TO wp_commentmeta; -- 改表名方式一
ALTER TABLE my_commentmeta RENAME AS wp_commentmeta; -- 改表名方式二- 调整记录值,在wordpress 6.7.2上成功。
-- REPLACE(option_name, 'my_', 'wp_') 注意区分大小写,先 select 确认。
SELECT REPLACE(o.option_name, 'my_', 'wp_'),o.* FROM wp_options o WHERE o.option_name LIKE 'my_%';
SELECT REPLACE(u.meta_key, 'my_', 'wp_'),u.* FROM wp_usermeta u WHERE u.meta_key LIKE 'my_%';
UPDATE wp_usermeta u SET u.meta_key=REPLACE(u.meta_key, 'my_', 'wp_') WHERE u.meta_key LIKE 'my_%';
UPDATE wp_options o SET o.option_name=REPLACE(o.option_name, 'my_', 'wp_') WHERE o.option_name LIKE 'my_%';
COMMIT;将用户密码重置为123456
UPDATE wp_users SET user_pass = '$1$rSziHLDY$399k.JuJsy.oHVp5lquJC.' WHERE ID = N;
发表回复