2012年09月27日凌晨三点做了一个DiscuzX2的myisam2innodb。最后遗留下来三个表(forum_postposition, common_member_grouppm, forum_post)由于索引结构问题当时未完成转换。09月28日,看过 NetSeek@LinuxTone 的帖子,自己写了个脚本,完成了这三个表的转换。
为了便于一次性操作,我重写了整个脚本,或许其他人有用。在我的实例中,这三个表的实际名字是有pre_前缀的。所以还请根据实际情况做库名和表明的更改。
#!/bin/bash
#dx2_myisam2innodb.sh
USER="root"
PASS="chang.me.please"
FILE_SQL="sql.myisam2innodb"
NAME_DB="discuzX2"

cat > "${FILE_SQL}" << EOF
USE ${NAME_DB};
ALTER TABLE pre_forum_postposition DROP PRIMARY KEY,ADD PRIMARY KEY(position,tid);
ALTER TABLE pre_common_member_grouppm DROP PRIMARY KEY,ADD PRIMARY KEY(gpmid,uid);
ALTER TABLE pre_forum_post DROP PRIMARY KEY,ADD PRIMARY KEY(position,tid);
    
EOF
    
mysql -u"${USER}" -p"${PASS}" -ANe "SELECT CONCAT('ALTER TABLE ', table_name, ' ENGINE=InnoDB;') as ToSQL from information_schema.tables where TABLE_SCHEMA='${NAME_DB}' and ENGINE='MYISAM' order by TABLE_ROWS;" >> "${FILE_SQL}"
mysql -u"${USER}" -p"${PASS}" < "${FILE_SQL}"

原始的 Discuz X2 的表缺省使用的是 MyISAM 和 MEMORY 存储引擎。而 MyISAM 经常发生锁表的情况,一执行 show processlist 会看到N多的Locked,会引起脚本执行等待超时等错误。截至2012年09月27日凌晨03时,单 pre_forum_post 表中就有接近2200万条记录,导致论坛经常出现502现象。叶金荣@CYOU对Discuz一直缺省使用MyISAM颇有微词,因此写了系列文章论证使用InnoDB替代MyISAM,也在新浪微博上提出了批评。据可靠消息,Comsenz内部也使用InnoDB的。
虽说 ALTER TABLE tbl_name ENGINE=InnoDB 输入和执行都很简单,但是感觉有个统一的脚本可能方便一些。所以急就章写下这个脚本。据闻 Discuz X2 有 PHP 脚本实现这个功能,应该比较可靠一些吧。
在 Discuz X2 的库表设计中,缺省存储引擎是 MyISAM 和 MEMORY 这两种,尽量不要把 MEMORY 的转换成 InnoDB,所以加了一个 ENGINE='MYISAM' 做筛选条件,而且已经是InnoDB的也就不用再费事儿重复操作了。

转载于:https://blog.51cto.com/floss/1010150

Discuz X2论坛数据库MyISAM转InnoDB的脚本相关推荐

  1. 如何去除discuz X2论坛网址中的forum.php

    在discuz X2论坛的过程中,直接安装在根目录的可以通过设置应用域名的方法来实现discuz X2论坛网址中完美去掉forum.php.但如果是安装在非根目录下(例如bbs目录下),网址中就会出现 ...

  2. 新浪sae部署html,利用新浪sae搭建discuz x2论坛

    开始建站有一个月了,用了很多免费空间,比如0fees,zymic,simplefreeweb等等,0fees和zymic不支持discuz,最终选择了000webhost的免费空间,各方面还不错,可是 ...

  3. MySQL数据库MyISAM和InnoDB存储引擎的比较

    MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种.这里介绍关于这两种引擎的一些基本概念(非深入介绍). MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索 ...

  4. 关于Discuz X2 论坛备份详解(论坛搬家)

      1.适用于论坛搬家,论坛镜像,本地与服务器完美测试,我的就是 最先在服务器上安装并设置好的,然后使用的,但是后来我在自己电脑上也部署了一个服务器,想完整的,一丝不差的把网上的镜像到本地,以此来设置 ...

  5. Discuz! X2.5数据库字典【转载】

    DROP TABLE IF EXISTS pre_common_admincp_cmenu; CREATE TABLE pre_common_admincp_cmenu ( `id` SMALLINT ...

  6. discuz X2.0数据库详解

    CREATE TABLE pre_common_admincp_cmenu (   `id` SMALLINT(6) UNSIGNED NOT NULL AUTO_INCREMENT,   `titl ...

  7. DISCUZ X2更换域名注意事项

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  8. MySQL数据库MyISAM存储引擎转为Innodb

    之前公司的数据库存储引擎全部为MyISAM,数据量和访问量都不是很大,所以一直都没什么问题.但是最近出现了MySQL数据表经常被锁的情况,直接导致了用户连接网站时超时而返回502,于是决定把存储引擎转 ...

  9. MySQL数据库中的MyISAM和InnoDB存储引擎对比

    一.InnoDB和MylSAM存储引擎对比 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访 ...

最新文章

  1. 修改git commit默认触发的编辑器
  2. 20155317 王新玮 2016-2017-2 《Java程序设计》第5周学习总结
  3. 匿名管道 阻塞_进程间通信-管道
  4. 三维点云学习(5)5-实现Deeplearning-PointNet-2-classfication
  5. L2Dwidget.js L2D网页动画人物添加
  6. 封装dialog弹窗
  7. 解决Linux连不上外国软件源或者软件源失效
  8. 7-27 冒泡法排序 (20分)
  9. 程序结构(顺序结构、选择结构、循环结构)
  10. It was either not specified and/or could not be found for the javaType (java.util.List) : jdbcType
  11. 关于 DRM 中 DUMB 和 PRIME 名字的由来
  12. OpenCV OAK-D-S2相机测试
  13. python最难的地方_全国 41611 个景点,程序员用 Python 告诉你哪些地方最值得一游!...
  14. 怎么批量改计算机名字,批量修改文件名,教您如何批量修改文件名称
  15. 修复setup violation的方法总结
  16. 【第40期】不可错过的数据挖掘好书
  17. 张飞开关电源二_sdchguyi_新浪博客
  18. 内网、校园网BT下载必看帖(BitComet加速篇)
  19. 云计算工程师必备的10本书
  20. css3如何实现滑块

热门文章

  1. ajax图书管理案例
  2. 【 C 】动态内存分配案例分析
  3. oracle自动冷备份脚本
  4. 将Linux脚本中的正常输出,警告,错误等信息输出到文件中
  5. android——ImageLoader添加缓存
  6. 用相对路径有时居然是这样,,加上%=basePath%
  7. Linux 启动mysql
  8. Matlab读写二进制文件
  9. vscode配置anaconda3
  10. python time.time()计算代码运行时间