2014-03-31 49 views
2

我试图运行以下语句,希望创建两个现有表的连接。Mysql查询失败,但没有清理磁盘空间

create table CRS_PAIR 
select concat_ws(',', a.TESTING_ID, b.TRAINING_ID, a.TESTING_C) as k, concat_ws(',', a.YTG, b.YTG) as YTG 
from CRS_TESTING a, CRS_TRAINING b 
where a.TESTING_C=b.TRAINING_C; 

目前这两个表的尺寸是:

mysql> SELECT table_name, round(((data_length + index_length)/(1024*1024)),2) as "size in megs" FROM information_schema.tables WHERE table_schema = "crs"; 
+----------------+---------------+ 
| table_name  | size in megs | 
+----------------+---------------+ 
| CRS_TESTING |   36.59 | 
| CRS_TRAINING |  202.92 | 
+----------------+---------------+ 

过了一会儿过了一天,查询完成,我得到了以下的结果。

140330 2:53:50 [ERROR] /usr/sbin/mysqld: The table 'CRS_PAIR' is full 
140330 2:53:54 InnoDB: ERROR: the age of the last checkpoint is 9434006, 
InnoDB: which exceeds the log group capacity 9433498. 
InnoDB: If you are using big BLOB or TEXT rows, you must set the 
InnoDB: combined size of log files at least 10 times bigger than the 
InnoDB: largest such row. 

原来的/var/lib/mysql规模已经增长到246GB的磁盘空间,以及磁盘空间用尽。但是,由于某些原因,CRS_PAIR表不会显示在shell中。即使我试图获得所有数据库的大小。

mysql> SELECT table_schema "Data Base Name", sum(data_length + index_length)/(1024 * 1024) "Data Base Size in MB" FROM information_schema.TABLES GROUP BY table_schema ; 
+--------------------+----------------------+ 
| Data Base Name  | Data Base Size in MB | 
+--------------------+----------------------+ 
| crs    |   1426.4531 | 
| information_schema |    0.0088 | 
| mysql    |    0.6453 | 
| performance_schema |    0.0000 | 
+--------------------+----------------------+ 
4 rows in set (0.74 sec) 

这是show tables命令。

mysql> show tables; 
+----------------+ 
| Tables_in_crs | 
+----------------+ 
| CRS_TESTING | 
| CRS_TRAINING | 
some other tables 
+----------------+ 
9 rows in set (0.00 sec) 

CRS_PAIR不存在。

请问有没有人可以帮我弄清楚这个神秘的桌子去了哪里,以便我可以清理我的磁盘空间?

回答

1

如果您没有设置innodb_file_per_table(或设置为0),那么InnoDB将把所有的InnoDB表放入池文件(通常为/var/lib/mysql/ibdata1),并根据需要进行扩展以适应写入的数据。但是,引擎从不进行任何空间回收。这意味着ibdata1文件总是增长,它永远不会缩小。

减小此文件大小的唯一方法是备份您的数据,关闭MySQL,删除它,重新启动MySQL,然后重新加载您的数据。

+0

“删除它”,你的意思是卸载它吗?谢谢 – ssgao

+0

不,我的意思是实际删除文件('rm/var/lib/mysql/ibdata1'或无论它在哪里)。如果它在启动时不存在,MySQL将创建一个新的。 – staticsan