Mysql Innodb优化表

时间:2015-01-18 07:43:52

标签: mysql database

我在C:\驱动器上有一个100Gb的innodb表,而C:\驱动器现在空间不足。我删除了很多行,但是ibd文件没有收缩。 我在D:\驱动器上有超过200Gb,随后配置tmpdir在d:\驱动器中并尝试优化表。但是当我优化表时,它占用了c:\驱动器上剩下的任何空间而不是使用d :\

我应该更改哪个参数?

2 个答案:

答案 0 :(得分:1)

您不能缩小innodb数据文件(默认名称为ibdata1)而不删除它:S。

使用innodb引擎,您应该使用innodb_file_per_table=1

要解决空间问题,您应该:

1)执行完整数据库备份:mysqldump -u root -pMyPassword -R --all-databases > full.sql

2)停止mysql服务

3)添加(或更改值)参数innodb_file_per_table=1

4)删除现有的innodb数据文件(/$mysqldir/ibdata1

5)启动mysql服务

6)恢复备份:mylsql -u root -pMyPassword mysql < full.sql

现在innodb数据文件不会再增长太多了,优化表将允许你缩小涉及的表数据文件,因为现在每个表都会占用它自己的数据文件。

使用符号链接(至少在Linux下),它允许您在不同磁盘上查找数据库。

答案 1 :(得分:0)

有tmpdir参数。而且我认为你可以用

来设置
SET GLOBAL tmpdir = D:/temp

在任何优化操作之前或在mysld

下添加以下内容
set-variable = tmpdir=/var/tmp

作为奖励,我强烈建议您使用

innodb_file_per_table=1

如果你有innodb表,那么每个表都有单独的文件。 并且使用压缩数据也会减少磁盘使用量。