18 11 2019

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);
延伸阅读