我试图运行以下语句,希望创建两个现有表的连接。
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
不存在。
我可以问一下是否有人可以帮我弄清楚这个神秘的桌子去哪里,以便我可以清理我的磁盘空间?
答案 0 :(得分:1)
如果你没有innodb_file_per_table
设置(或设置为0),那么InnoDB会将你所有的InnoDB表放入池文件(通常是/var/lib/mysql/ibdata1
),根据需要扩展它以适应在书面数据中。但是,引擎永远不会进行任何空间回收。这意味着ibdata1文件总是在增长,它永远不会缩小。
减少此文件大小的唯一方法是备份数据,关闭MySQL,删除它,重新启动MySQL,然后重新加载数据。