MySQL数据库单一表突破4G限制的实现方法
一个Discuz!老用户论坛在回复时出现“表已满”的提示,字面意思是数据表已满。因为很少有开发者遇到单桌超过4G的情况,朋友间的讨论只能提供一些外围信息。为了解决这个问题,我看了很多资料。本文将结合我的解决过程介绍这一问题的原因和对策。
根据经验,表已满提示通常出现在以下两种情况:
1.MAX_ROWS值在表中设置。简单来说,如果MAX_ROWS设置为100,程序试图写入第101条记录,就会出现这个错误。
2.桌子满了。这种情况是本文的重点。
我们认为MySQL在访问表时有一个位置分配规则。默认情况下,该规则可以处理4G以内的数据。超过这个大小,数据库将无法定位数据,所以它不能读或写。经过实验,这种限制完全可以被打破。
在这个例子中,用户的系统环境是双Athlon处理器,SCSI硬盘72G,2G内存,用户post表的数据大小是4294963640,接近4G(实际字节数4294967296)。
首先,在SSH登录之后,检查用户的系统信息:
# uname -a
Linux zichen.com 2 . 4 . 20-8 SMP # 1 SMP 3月13日星期四16:43:01 EST 2003 i686 athlon i386 GNU/Linux
证明是Linux系统。根据内核版本2.4.20-8smp,加上国内常用的系统,估计应该是redhat 9发行包。
#卡特彼勒/etc/*版本*
Red Hat Linux release 9 (Shrike)
这也证明了我们关于系统版本的猜想。
然后看一下使用的是什么文件系统。因为这个用户不是高手,估计系统装上的时候就是一路回车了。redhat 9的默认应该是EXT3,不过我们来看看:
#分开
GNU Parted 1.6.3
版权所有(C) 1998、1999、2000、2001、2002自由软件基金会。
这个程序是自由软件,受GNU通用公共许可证保护。
分发这个程序是希望它有用,但没有任何保证;甚至没有暗示的保证
适销性或对特定目的的适用性。更多细节请参见GNU通用公共许可证。
使用/dev/sda
信息:操作系统认为/dev/sda上的几何是8942/255/63。因此,圆柱体1024在8032.499米处结束
(分开的)印刷品
/dev/sda的磁盘几何:0.000-70149.507兆字节
位律师回复
0条评论