最近将数据库从库从5.5升级到5.7,发现储存MySQL磁盘空间一下子占用变大了很多,排查了一下发现是升级后MySQL的系统表空间(ibdata1)很大[原本就很大],单个innodb表的表空间也变得很大[升级后变大],正常情况下应该只有一方会很大(系统的MyISAM表不多)
具体情况如下:
升级前,mysql数据库5.5,innodb_file_per_table使用默认配置,即是关闭的,innodb的表和索引都存储在一起(ibdata1文件很大);
升级到5.7时,innodb_file_per_table仍使用默认配置,但是默认是开启的,升级时使用mysql_upgrade后,每个表使用了独立的表空间,即每个数据库文件夹下的表空间文件很大,但是原本的系统表空间ibdata1并没有对应的变小。
查询手册发现:
在mysql5.5的时候innodb_file_per_table配置是默认关闭的,
但是数据库升级到5.7的时候,innodb_file_per_table配置默认开启了(其实在mysql5.6.6的时候就默认开启了),
官网说明:http://dev.mysql.com/doc/refm...
请问有没有方法在不重新导入数据的情况下(重新导入耗时太长),使原本的系统表空间ibdata1文件变小。
怪我咯2017-04-17 15:32:18
먼저 자신이 무엇을 하고 싶은지 알아야 합니다
1. MySQL이 5.5에서 5.7로 업그레이드되었습니다
2. 데이터를 다시 가져오고 싶지 않고 ibdata1 공간을 줄이고 싶습니다
데이터가 프로덕션 환경에 있는 경우 데이터베이스를 업그레이드하기 전에 호환성 작업을 수행하고 비호환성이나 문제 지점을 충분히 평가하고 찾아서 해결하는 것이 좋습니다. 프로덕션 환경에서 버전을 업그레이드할 때 데이터베이스를 가져오고 내보내는 것이 권장되며, 그 자리에서 업그레이드하는 것은 권장되지 않습니다.
테스트 환경이라면 mysql_upgrade를 실행한 후에도 원하는 대로 하고 MySQL을 닫고 ibdata1 파일을 삭제한 후 다시 시작하면 효과를 확인할 수 있습니다.
또는 일부 테이블 정렬 명령을 사용하거나 테이블 스토리지 엔진을 수정하여 일부 테이블을 정렬하고 효과가 있는지 확인해보세요.