解决 Discuz 转换数据库存储引擎为 InnoDB 失败的问题

Discuz 默认的数据库存储引擎是 MyISAM,云数据库不能支持。而且,从 MySQL 5.5 开始,默认的存储引擎就不再是 MyISAM,而是 InnoDB。宝塔 Linux 面板提供了一个工具,可以批量转换数据表存储引擎,所以我尝试了一下。结果发现,有两张表转换不成功:

pre_forum_post 
pre_common_member_grouppm

用 phpMyAdmin 转换了一下,看到了错误提示:这两张表没有主键。MyISAM允许没有主键的表存在,而 InnoDB 不允许。我一个纯小白,知道原因还不够,毕竟不知道主键怎么加。幸好,宝塔的开发者阿良很热心,给了两条语句:

ALTER TABLE pre_forum_post DROP PRIMARY KEY, ADD PRIMARY KEY (position,tid);
ALTER TABLE pre_common_member_grouppm DROP PRIMARY KEY, ADD PRIMARY KEY (gpmid,uid);

主键加上了,再次执行转换,就成功了。

据阿良说,宝塔官方论坛一年前就转换了数据库引擎,没有问题。


(12月30日更新)官方方案来了:

ALTER TABLE pre_forum_post CHANGE position position int(8) unsigned NOT NULL;
ALTER TABLE pre_common_member_grouppm ADD INDEX gpmid(gpmid);

官方方案还需要修改 PHP 文件,具体方法见官方 Git:forum_post表最终方案table_forum_post.phpdiscuz_database.phpdb_driver_mysqli.php

如果之前按最初的方案改过,可以改回官方的方案:

ALTER TABLE pre_forum_post CHANGE position position int(8) unsigned NOT NULL,DROP PRIMARY KEY, ADD PRIMARY KEY (tid,position);
ALTER TABLE pre_common_member_grouppm DROP PRIMARY KEY, ADD PRIMARY KEY (uid,gpmid),ADD INDEX gpmid(gpmid);

本文链接:

https://dev.euyyue.com/note/373.html
1 + 9 =
快来做第一个评论的人吧~