叮叮 发表于 2017-5-12 00:54:12

程:discuz x3.2数据库的表从MYISAM转到INNODB和bug解决方法

1.discuz 3.2 转INNODB的时候,是不是可以把所有表都转成INNODB,或者是要表留住哪几个表?
2.那个x3.1 的innodb补丁,能用于discuz 3.2吗?

===========
导出并替换discuz数据库中的MYISAM为INNODB

[*]mysqldump -u root -p'password' centos > centos_table.sql
2、替换centos_table.sql里的MyISAM为INNODB

[*]sed -i 's/MyISAM/INNODB/g' centos_table.sql
不用保留任何表,discuz 3.2中 MYISAM 的表可以全转为INNODB
因为:forum_postposition 表已经在3.2中取消,common_session表直接使用memory 为引擎

之后,清空原表,尝试导入INNODB数据库的文件
mysql-u root -p'password' centos <centos_table.sql

导入数据库过程有两个表结构有bug
举例: line 1169: Incorrect table definition; there can be only one auto column and it must be defined as a key

解决方法:把auto column 的列单独定义为一个key就可以解决,比如 KEY gpmid(gpmid)

所以
修改前:
CREATE TABLE `pre_common_member_grouppm` (
`uid` mediumint(8) unsigned NOT NULL DEFAULT '0',
`gpmid` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
`status` tinyint(1) NOT NULL DEFAULT '0',
`dateline` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`uid`,`gpmid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
修改后:
CREATE TABLE `pre_common_member_grouppm` (
`uid` mediumint(8) unsigned NOT NULL DEFAULT '0',
`gpmid` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
`status` tinyint(1) NOT NULL DEFAULT '0',
`dateline` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`uid`,`gpmid`),
KEY gpmid(gpmid)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

另一个表修改雷同

之后,再次尝试导入INNODB数据库的文件
mysql-u root -p'password' centos <centos_table.sql

完成
页: [1]
查看完整版本: 程:discuz x3.2数据库的表从MYISAM转到INNODB和bug解决方法