记录一下,32bit mysql下,table size太大引起db crash的处理过程
user来电告知无法访问系统了,于是查看log,从log来看space是4359,对应的table是tpbdb_pbd1/tpb_respon
启动数据库,尝试访问tpbdb_pbd1.tpb_respon(query其他table均正常),直接lost connection
mysql直接crash
查看log让然如下:
从log来看space 仍然是4359,table是tpbdb_pbd1/tpb_respon(使用如下sql也验证了table name)
跟user讨论后,决定drop这个db,然后重新汇入,细节就不写了,这里只贴汇入的语法
mysql -u root -ppcices-123 --one-database tpbdb_pbd1 < D:\backup\xampp\2022-06-29.sql
汇入后,第一次可以查询tpb_respon这个table(很奇怪,不知是为何?),再次访问这个table,db就直接crash,log报同样得错误
从which is outside the tablespace bounds这条log看,猜想应该是table太大,查看table有4.5G
再与user商量,重新import db,利用第一次可访问得机会,直接delete不需要得数据,结果user直接删除了今年以外的资料,table size直接降到约1.3G(user真是给力)
再query验证数,据出来的一刻,心情真是激动
事后google得知,32bit的系统单个table最大size只能到2 ^32 ,正好4GB,再大就超出边界了
这里仍有两个疑问,希望有缘的朋友帮忙解惑
1.至于db导入后,为何第一次可以访问,再次访问db就crash,我的理解既然是size过大的问题,第一次就会crash,难道第一次mysql并不知道table outside the tablespace bounds.,经过一次访问后才得知?
2.为何query单个table会引起整个db crash,mysql这设计不科学呀