Когда я вижу размер моего db_1, он отображается как 4k. Но когда я показываю состояние таблицы для db_1, я вижу, что общий размер составляет примерно 3,7 ГБ в зависимости от длины данных. Почему есть это несоответствие? И почему ibdata1 такой большой?
drwx------ 2 mysql mysql 4.0K Jun 3 08:52 db_1
-rw-r-xr-x 1 mysql mysql 22G Jun 3 08:51 ibdata1
drwx------ 2 mysql mysql 4.0K Apr 30 22:30 my_DB
drwxr-xr-x 2 mysql dba 8.0K May 1 12:44 mysql
-rw-r-xr-x 1 mysql root 4.4K Jun 1 14:33
-rw-rw---- 1 mysql mysql 5 May 17 18:19
-rw-r-xr-x 1 mysql mysql 51K Jun 3 08:41
drwxr-xr-x 2 mysql dba 4.0K Apr 30 22:29 performance_schema
----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+------------------------------------------------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+-------------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+
| xxxxxxxxxxxxxxxxxxxxxx | InnoDB | 10 | Compact | 117 | 140 | 16384 | 0 | 0 | 17825792000 | NULL | 2012-05-01 13:24:34 | NULL | NULL | latin1_swedish_ci | NULL | | |
| xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| InnoDB | 10 | Compact | 466203 | 248 | 116015104 | 0 | 0 | 17825792000 | NULL | 2012-05-01 13:31:28 | NULL | NULL | latin1_swedish_ci | NULL | | |
| xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | InnoDB | 10 | Compact | 1028265 | 111 | 114147328 | 0 | 0 | 17825792000 | NULL | 2012-05-01 13:32:36 | NULL | NULL | latin1_swedish_ci | NULL | | |
| xxxxxxxxxxxxxxxxxxxxxxxx | InnoDB | 10 | Compact | 1353685 | 98 | 133922816 | 0 | 0 | 17825792000 | NULL | 2012-05-01 13:32:49 | NULL | NULL | latin1_swedish_ci | NULL | | |
| xxxxxxxxxxxxxxxxxx | InnoDB | 10 | Compact | 50546 | 52 | 2637824 | 0 | 0 | 17825792000 | NULL | 2012-05-01 13:04:18 | NULL | NULL | latin1_swedish_ci | NULL | | |
| xxxxxxxxxxxxxxxxxxxxxx | InnoDB | 10 | Compact | 44281 | 83 | 3686400 | 0 | 0 | 17825792000 | NULL | 2012-05-01 13:19:25 | NULL | NULL | latin1_swedish_ci | NULL | | |
| xxxxxxxxxxxxxxxxxxxxxxxxx | InnoDB | 10 | Compact | 5841698 | 124 | 729808896 | 0 | 163397632 | 17825792000 | NULL | 2012-05-01 13:17:29 | NULL | NULL | latin1_swedish_ci | NULL | | |
| xxxxxxxxxxxxxxxxxxxxxxxx | InnoDB | 10 | Compact | 52327792 | 60 | 3171942400 | 0 | 0 | 17825792000 | NULL | 2012-05-03 17:09:41 | NULL | NULL | latin1_swedish_ci | NULL | | |
+------------------------------------------------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+-------------+----------------+---------------------+-------------+------------+-------------------+----------+----------------+---------+
Это очень частый вопрос, который задавали много раз.
Это потому, что вы храните все таблицы в одном файле InnoDB (ibdata1). Этот файл никогда не сжимается после удаления данных. Итак, в какой-то момент у вас было 22 ГБ данных, хранящихся во всех ваших таблицах InnoDB, хотя сейчас у вас может не так много данных.
Чтобы решить эту проблему, вам нужно удалить все таблицы InnoDB, закрыть MySQL, удалить этот файл, запустить резервное копирование MySQL и затем повторно импортировать эти таблицы.
Также вы можете использовать настройку MySQL innodb_file_per_table
чтобы разделить каждую таблицу InnoDB в отдельный файл. Файлы по-прежнему не сжимаются автоматически, но вы можете выполнить очистку с помощью alter table ... type=innodb
.