前言:
某论坛因性能不佳,升级到了X3.2版本.但是升级后却发现楼层乱了.仔细研究了一下发现,cdb_forum_post表新增了position字段,并且是自增属性.抽查帖子时,这个position字段不是按照1 2 3 4自增的,而是1 3 5 7 9这样的序列.导致这个问题的原因是mysql服务器是M-M架构,并且使用了如下两个选项来保证两个M不冲突:
auto-increment-increment = 2
auto-increment-offset = 1
于是我们的position自增时也根据这个属性来自增了.
下面就是针对此问题的处理过程.
处理步骤:
1.先在服务器上取消这两个参数2.查找下数据库中有没有position是偶数的:
SELECT distinct tid FROM cdb_forum_post WHERE MOD(POSITION,2)=0;
3.把这些帖子的所有内容都移到临时表,后续对这部分帖子进行手工处理.
4.先处理position都是1 3 5 7这样增长的帖子:
为加快执行速度,可以对position增加索引,处理完后再删除索引.
for ((i=3;i 备注:这个i
5.手工处理刚才那个临时表中的position,然后再把这部分帖子灌回cdb_forum_posts.参考SQL如下:
update tmp_table set position=(position-1)/2+3 where tid=331335 and position>=7;
update tmp_table set position=(position-1)/2+28 where tid=362515 and position>=55;
6.使用下面的SQL处理最大楼层数和回复数:
update cdb_forum_thread a set maxposition=(select max(position) from cdb_forum_post b where a.tid=b.tid);
UPDATE cdb_forum_thread SET replies=(CAST(maxposition AS SIGNED)-1) WHERE CAST(replies AS SIGNED)!= (CAST(maxposition AS SIGNED)-1) and maxposition>0;
现在看看楼层是不是正常了.