MySQL使用InnoDB引擎的时候,ibdata1这个文件会随着时间的增长,会变得越来越大,占据大量的磁盘空间。
那么,ibdata1里保存了哪些东西,为什么会变得越来越大呢,让我们开看看ibdata1的构造。
ibdata1是InnoDB的共有表空间,默认情况下会把表空间存放在一个文件ibdata1中,会造成这个文件越来越大。
发现问题所在之后,解决方法就是,使用独享表空间,将表空间分别单独存放。MySQL开启独享表空间的参数是Innodb_file_per_table,会为每个Innodb表创建一个.ibd的文件。
操作步骤
下面讲一下具体的操作。
1) 导出数据库中所有数据
# mysqldump -u root -p --all-database > /tmp/all-database.dump
2) 删除数据库中数据
# mysql -u root -p mysql> drop database dbname;
3) 停止MySQL
# /etc/init.d/mysqld stop
4) 删除ibdata1文件(移动到/tmp下)
# mv /var/lib/mysql/ibdata1 /tmp # mv /var/lib/mysql/ib_logfile0 /tmp # mv /var/lib/mysql/ib_logfile1 /tmp
5) my.cnf设定
# vi /etc/my.cnf 开启独享表空间,并指定ibdata1大小为1G,ibdata2大小200M,自动扩张。 innodb_data_home_dir = /var/lib/mysql innodb_data_file_path = ibdata1:1G;ibdata2:200M:autoextend innodb_file_per_table
6) 启动MySQL
# /etc/init.d/mysqld start
7) 导入数据
# mysql -u root -p < /tmp/all-database.dump
8) 确认
后记
开启独享表空间后,并不是说就不需要ibdata1了,因为在ibdata1中还保存着下面这些数据。
InnoDB表的元数据
Buffer
UNDO日志