mysql 数据库,版本是 5.1.22因为表是InnoDB型,所以数据都存在 ibdata1 上面了。现在发现删除了大量数据后, ibdata1 的大小都不会减小。因为现场数据库是尽量不重启的,数据库的记录很多,达到1000W。
如果是要重建数据库,基本上要好几个小时,所以这种方法尽可能不用。请问有什么办法可以缩小 ibdata1 的大小呢?另外,我把表从InnoDB型转成 MyISAM型,发现ibdata1 大小不变。这该怎么办?谢谢!!!!

解决方案 »

  1.   

    我查过GOOGLE,发现都是需要重建数据库,手册上也没有说,或许是我没看到,但我都通看了几遍的了。这件事情比较急,因为是生产现场,数据量比较大。
      

  2.   

    http://topic.csdn.net/t/20060216/10/4558825.html
      

  3.   

    楼上的,不对啊,你提供的资料是针对MyISAM的,跟ibdata1没关系啊。还是谢谢啊
      

  4.   

    不行,必须重构,或者添加新的DATA文件。
      

  5.   

    可以向Oracle公司提出这个new feature,他们有兴趣,说不定会为你添加这个特性。
      

  6.   

    to 骑着上帝看戏不行,必须重构,或者添加新的DATA文件。======================================请问该怎么重构???
      

  7.   

    导出数据,
    删除IBDATA
    重新导入数据。
      

  8.   

    谢谢了。最后搞定了。删除ibdata1的方法:1, 把所有的表类型都转成 MyISAM 后, 停止数据库服务,删除 ibdata1文件,再重起.
    2, 把数据库用 mysqldump 出来后, 再删除 数据库, 停止数据库服务, 删除ibdata1文件,再重起,再重新导入数据.两种方法,都需要大量的硬盘,以及时间比较长.比较遗憾的是,mysql没有提供像 sqlserver 那种收缩数据库的功能,必须要停止数据库。这对于生产线上的数据库,是件很痛苦的过程。