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.php、discuz_database.php、db_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);