最近将数据库从库从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 ファイルを削除し、再起動して効果を確認するなど、自由に試すことができます。
または、いくつかのテーブル並べ替えコマンドを使用するか、テーブル ストレージ エンジンを変更していくつかのテーブルを並べ替え、効果があるかどうかを確認してみてください。