网站之家技术交流论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1232|回复: 0

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

[复制链接]
发表于 2017-5-12 00:54:12 | 显示全部楼层 |阅读模式
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

完成
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|网站之家技术交流论坛 ( 粤ICP备09092995号 )

GMT+8, 2024-5-4 01:26 , Processed in 0.098686 second(s), 6 queries , File On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表