Press "Enter" to skip to content

一个 wordpress 博客迁移引发的 wp-posts主键索引失效问题

内容目录

问题

在一次常规的博客迁移后发现了 2个问题

  1. 是添加文章报错

    Warning: Attempt to read property "post_type" on null in    /www/wwwroot/chenjie.info/wp-includes/post.php on line 7874
    
    Warning: Attempt to read property "post_type" on null in /www/wwwroot/chenjie.info/wp-includes/post.php on line 7875
    
    Warning: Attempt to read property "ID" on null in /www/wwwroot/chenjie.info/wp-includes/post.php on line 7879
    
    Warning: Attempt to read property "post_type" on null in /www/wwwroot/chenjie.info/wp-includes/post.php on line 8137
    
    Warning: Attempt to read property "post_type" on null in /www/wwwroot/chenjie.info/wp-includes/theme.php on line 3644
    
    Warning: Attempt to read property "post_type" on null in /www/wwwroot/chenjie.info/wp-includes/theme.php on line 3870
    
    Warning: Attempt to read property "post_type" on null in /www/wwwroot/chenjie.info/wp-includes/post.php on line 5798
  2. 首页,搜索页大量文章重复

排查

首先针对问题一

采取以下措施:

  1. 屏蔽插件
  2. 采用默认主题
  3. 保留数据库使用同版本 wordpress 源码重新安装

分别使用以上方法测试错误依旧,说明程序并没有问题

定位问题到数据库,新建文章设计 wp-posts 表

结合问题二发现索引 id 失去了自增主键,可能迁移过程发生 sql 异常导致

解决

需要重新建议主键自增索引,
但是需要删除重复 id 记录,因为我只是简单重复,随机删除即可,如果不是简单重复需要按需调整以下 sql 语句

-- 添加辅助自增列
ALTER TABLE wp_posts ADD COLUMN auto_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

-- 删除重复 ID 中重复的那一条
DELETE wp1 FROM wp_posts wp1
JOIN wp_posts wp2 
  ON wp1.ID = wp2.ID AND wp1.auto_id > wp2.auto_id;

-- 删除辅助列
ALTER TABLE wp_posts DROP COLUMN auto_id;

-- 修改 ID 为主键+自增
ALTER TABLE wp_posts
DROP PRIMARY KEY,
MODIFY ID BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (ID);
发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注