我正在导入一个数据库转储 – 几乎1GB的价值:
mysql -uroot -ppassword < mysqldump.sql
当我收到警告说硬盘快满了。 我惊慌和Ctrl-Ced导入。 两次。
看着我的数据库,我可以看到导入被取消。 但是,当我看在/var/lib/mysql/我可以看到ibdata1仍然太大 – 我想它仍然有所有导入的数据。 这大约是数据库中可用数据的两倍。
我运行mysqlcheck -optimize -A但如果有的话,它使ibdata1文件变大。
我怎样才能清除这个孤立的数据? 硬盘上剩下大约100MB
这是MySQL中的一个已知错误: 1341 。 现在已经有8年了。 您可能想尝试一个解决方法, 张贴在StackOverflow上 :
ibdata1不缩小是MySQL特别恼人的特性。 除非删除所有数据库,删除文件并重新加载转储,否则ibdata1文件实际上不会收缩。
但是您可以configurationMySQL,以便每个表(包括其索引)都存储为一个单独的文件。 这样ibdata1将不会增长。
我刚才做了这个。 但是,要设置服务器为每个表使用单独的文件,您需要更改my.cnf以启用此function:
[mysqld] innodb_file_per_table=1
http://dev.mysql.com/doc/refman/5.5/en/multiple-tablespaces.html
如果您想要从ibdata1回收空间,您实际上必须删除该文件:
mysqldump ibdata1和ib_log文件 在步骤5中启动MySQL时,将重新创buildibdata1和ib-log文件。
现在你可以走了。 当您创build新的数据库进行分析时,这些表将位于单独的ibd*文件中,而不是位于ibdata1 。 正如您通常在数据库后不久, ibd*文件将被删除。
http://dev.mysql.com/doc/refman/5.1/en/drop-database.html
或者,如果你想保持数据库的运行,你可以试试这个:
在不closures数据库的情况下启用innodb_file_per_table选项。 这个想法是:
详细的文章可以在这里find。