免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3446 | 回复: 4
打印 上一主题 下一主题

MySQL单表2G数据限制问题,老问题新提 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-18 20:12 |只看该作者 |倒序浏览
问题现象,只要数据大小超过2G,在phpMyAdmin里面打开最后面的数据就会报错


系统内核(CentOS5.2)
# uname -a
Linux centos52 2.6.18-92.el5 #1 SMP Tue Jun 10 18:49:47 EDT 2008 i686 i686 i386 GNU/Linux

文件格式(ext3)
# df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
ext3       60499848  23780324     33596736      42%     /

MySQL编译参数
# cat /usr/local/mysql/bin/mysqlbug |grep ./configure
CONFIGURE_LINE="./configure '--prefix=/usr/local/mysql' '--localstatedir=/usr/data/mysql' '--with-mysqld-user=mysql4' '-with-named-thread-libs=-lpthread' '--without-debug' '--with-extra-charsets=gbk'"

数据超过2G时:
在mysql查看表状态
mysql> show table status from discuz like 'cdb_posts01'\G
*************************** 1. row ***************************
           Name: cdb_posts01
           Type: MyISAM
     Row_format: Dynamic
           Rows: 12615563
Avg_row_length: 198
    Data_length: 2510425460
Max_data_length: 1099511627775
   Index_length: 846066688
      Data_free: 0
Auto_increment: 27231847
    Create_time: 2008-11-17 06:36:45
    Update_time: 2008-11-18 06:23:28
     Check_time: 2008-11-17 15:57:11
Create_options: max_rows=1000000000 avg_row_length=202
        Comment:
1 row in set (0.11 sec)


用myisamchk查看表状态
# /usr/local/mysql/bin/myisamchk -dv /usr/data/mysql/discuz/cdb_posts01

MyISAM file:         /usr/data/mysql/discuz/cdb_posts01
Record format:       Packed
Character set:       latin1 (
File-version:        1
Creation time:       2008-11-17  6:36:45
Recover time:        2008-11-17 15:57:11
Status:              open,changed
Auto increment key:              1  Last value:              27231846
Data records:             12615563  Deleted blocks:                 0
Datafile parts:           12615563  Deleted data:                   0
Datafile pointer (bytes):        5  Keyfile pointer (bytes):        4
Datafile length:        2510425460  Keyfile length:         846066688
Max datafile length: 1099511627774  Max keyfile length: 4398046510079
Recordlength:                  151

table description:
Key Start Len Index   Type                     Rec/key         Root  Blocksize
1   1     4   unique  unsigned long                  0     97449984       1024
2   5     2   multip. unsigned short                 0    172725248       1024
3   109   4   multip. unsigned long                  0    270175232       1024
4   26    3   multip. uint24                         0    356802560       1024
5   139   1   multip. int8                           0    421388288       1024
6   7     3   multip. uint24                         0    811988992       1024
    139   1           int8                           0
    109   4           unsigned long                  0
7   7     3   multip. uint24                         0    660605952       1024
    10    1           int8                           0



此时用phpMyAdmin打开表最后的几个记录报错
MySQL 返回:
#1030 - Got error 127 from table handler




尝试用myisamchk修复表
# /usr/local/mysql/bin/myisamchk -r /usr/data/mysql/discuz/cdb_posts01.MYI
- recovering (with sort) MyISAM-table '/usr/data/mysql/discuz/cdb_posts01.MYI'
Data records: 12615563
- Fixing index 1
Read error for block at: 2151038968 (error: 22); Skipped
- Fixing index 2
- Fixing index 3
- Fixing index 4
- Fixing index 5
- Fixing index 6
- Fixing index 7
Data records: 10615563



修复完再用myisamchk查看状态大量的记录被忽略,数据大小停留在2G位置
# /usr/local/mysql/bin/myisamchk -dv /usr/data/mysql/discuz/cdb_posts01

MyISAM file:         /usr/data/mysql/discuz/cdb_posts01
Record format:       Packed
Character set:       latin1 (
File-version:        1
Creation time:       2008-11-17  6:36:45
Recover time:        2008-11-18  8:24:38
Status:              checked,optimized keys
Auto increment key:              1  Last value:              27231846
Data records:             10615563  Deleted blocks:                 0
Datafile parts:           10615563  Deleted data:                   0
Datafile pointer (bytes):        5  Keyfile pointer (bytes):        4
Datafile length:        2151038964  Keyfile length:         660606976
Max datafile length: 1099511627774  Max keyfile length: 4398046510079
Recordlength:                  151

table description:
Key Start Len Index   Type                     Rec/key         Root  Blocksize
1   1     4   unique  unsigned long                  0     97449984       1024
2   5     2   multip. unsigned short                 0    172725248       1024
3   109   4   multip. unsigned long                  0    270175232       1024
4   26    3   multip. uint24                         0    356802560       1024
5   139   1   multip. int8                           0    421388288       1024
6   7     3   multip. uint24                         0    563155968       1024
    139   1           int8                           0
    109   4           unsigned long                  0
7   7     3   multip. uint24                         0    660605952       1024
    10    1           int8                           0

论坛徽章:
0
2 [报告]
发表于 2008-11-18 20:15 |只看该作者
补充Mysql版本是4.0.26

比较疑惑的是,初始的时候查看表状态 Max_data_length: 4294967295 应该数据最大是4G
但是仍然有上述问题,后来mysql> ALTER TABLE `cdb_posts01` MAX_ROWS=1000000000 AVG_ROW_LENGTH=202;
后查看表状态 Max_data_length: 1099511627775 应该很大了,仍然出现上述情况

[ 本帖最后由 lphy 于 2008-11-18 20:19 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-11-21 09:09 |只看该作者
MySQL4 我就用了几天,然后就升级到5.0了。如果你实在觉得没有办法解决问题的话,直接升级OS到64BIT吧。

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
4 [报告]
发表于 2008-11-21 11:28 |只看该作者


没怎么用过4.

5的话MYSQL本身没这样的限制了,要不支持也是OS不支持。

论坛徽章:
0
5 [报告]
发表于 2008-11-22 01:43 |只看该作者
1.升级到4.1的最新版本吧,应该可以解决你的2G问题,默认的话还是会有4G问题
2.要不直接就是换64位的好了:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP