2017mysql补丁,Discuz! X2.5/X3-X3.4 InnoDB数据库补丁 beta1.0.8 【2017.8.1更新】

这篇博客介绍了如何将Discuz!论坛的数据库引擎从MyISAM转换为InnoDB,以提高写性能和并发处理能力。转换过程包括修改post表结构、利用内存缓存分配楼层号、内建错误修复机制等步骤,并提供了转换脚本和错误处理方案。适合日发帖量大的论坛,但需要确保服务器配置和内存缓存支持。注意,转换可能引起统计偏差和对MySQL5.6的特殊要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本帖最后由 民审大大 于 2017-8-1 01:27 编辑

2017.8.1更新

修正写死mysql_query的问题,兼容mysqli

2013.10.8更新

修正启用主从时可能出现的数据库错误页面

2013.9.26更新

修正bin脚本在关闭论坛或论坛某些设置的情况下不执行而输出html的问题

2013.9.24升级X3.1请参考最下方升级指南。

2013.9.12更新

修正一个逻辑错误,该错误会导致部分情况下缓存不生效,而导致可能出现的发帖卡顿,建议更新。

2013.8.30更新

修正删帖子后形成一个内容为del_post的空帖子,只有更新内存缓存才会消失的bug

2013.8.23更新

修正一个部分服务器上可能遇到的脚本意外中断问题

2013.8.13更新

修正bin执行脚本log日志累增不清零

修正脚本异常退出

本脚本分为两部分,第一部分是修改post表结构,第二部分为转换表为INNODB引擎

当第一部分出现异常时,脚本会退出并提示重试。这时需要重新执行脚本。

当第二部分异常时,脚本仍将执行整个库,并将转换失败的表写到log日志中。

这时可以选择按照log中的表名手动转,或者重新执行脚本(可能耗时会多些)

2013.8.9更新

修正了昨天压缩包里一个遗漏,该问题会导致复杂条件的语句失效

2013.8.8更新

修正一个可能导致后台页面管理错误的问题

MySQL InnoDB 引擎相比我们论坛默认的 MyISAM 引擎在写性能上有很大提升。InnoDB 支持行锁(更准确的说是索引锁)而 MyISAM 只能是表锁。使得 InnoDB 在高并发环境中有更好的表现。

在 Discuz! X2 或者更早的版本,有站长手动把数据库引擎转为 InnoDB , 来避免论坛发帖高峰时期带来的卡顿,

但是 Discuz! X2.5 以及 Discuz! X3版本,由于 post 表使用了联合自增主键,而 InnoDB 不支持这个特性,而无法手动把数据库引擎改为 InnoDB 。

考虑到大型站点站长们的这个需求后,我们发布了在大型论坛测试过的第一个Discuz! X2.5 / X3  InnoDB 补丁测试版。

基本原理:

1,去掉 post 表 position 字段的自增属性。

2,利用内存缓存来记录每个帖子的当前最大楼层数,并在发帖请求过来时依次分发并自增楼层号。

3,由于内存缓存速度极快当多个发帖请求过来后能快速自增并分配楼层号,每条插入语句都能快速领取到唯一楼层号。

4,内建了错误修复机制避免内存失效或者统计错误时自动修复。

5,取消了 count(*) 语句,改为读取模糊值。

适应场景:

发帖比较频繁,适应于会员热衷于交流场景,日发帖一般在数万贴每日的。

服务器要求:

1,独立服务器,或能执行命令行(命令行避免超时)

2,启用了内存缓存(建议为 memcache或redis )

操作步骤:

使用方法:

1,请到http://www.discuz.net/thread-3334048-1-1.html下载最新对应版本的框架,里面包含了一个文件class_core.php,直接覆盖即可。

2,关闭论坛,避免有发帖操作。对数据库全库进行备份。

3,确认论坛有开启内存缓存的某一个。

4,在命令行下切换到extend/bin目录下执行 bin_innodb_upgrade.php,一般命令如下:

切换到该目录下执行

~$php bin_innodb_upgrade.php

耐心等待执行完毕,如果显示其中一些任务失败了,则需要到目录下找log文件,对转换失败的表手工进行转 innodb 。(对于数据库超大需要转换很久的情况,可以采用下面的命令:nohup php bin_innodb_upgrade.php  > innodblog 2> innodberror &

,这样可以关掉客户端而让其在后台执行,执行的即时情况可以到innodblog里面查看)

6,删除 innodb_grade.php 和 log 文件(如果有的话),去论坛发帖测试无误后,开放论坛。

恢复:

如果测试后不想使用了,可以按照如下两个步骤操作:

1,所有表换回MyISAM,恢复 post 表 position 的自增属性。

问题:

我们建议大家先在测试论坛上使用无误后再部署到正式论坛。

如果有新版或者补丁出现,会持续在本帖更新,建议大家关注此贴。

已知注意事项:

1, MySQL 5.6版本的 index_condition_pushdown 参数请关闭,在帖子倒序显示的时候会引起严重慢查询。

2, 因为全表统计 count(*) 改为了读取模糊值,所以有少部分的统计数据最大会有10%左右的偏差。

3, 没有一定技术能力,平时服务器运行良好的网站,应继续使用默认的 MyISAM 版本,Innodb 在使用和维护上都有更高的要求。

4,在执行脚本的时候一定要保证内存足够,否则很容易造成各种不成功的问题。

下载:

X2.5/X3升级到X3.1:

1,按照官方升级指南,在执行完第四步之后,把这个附件解压后把sql文件上传到install/data目录下,,然后再执行update脚本。

2,确保安装了最新框架,确保原始的innodb扩展文件都存在,确保至少存在一个内存缓存正常工作。

3,发帖测试无误后开放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值