ibdata1 хранит данные таблиц (кроме схем — они хранятся в других файлах), индексы и некоторую другую информацию. Этот файл нельзя просто удалить, так как это приведет к уничтожению данных таблиц. Кроме того файл ibdata1 фактически не может быть сокращен в размере, если только вы не удалите все базы данных, не удалите файлы и не перезагрузите дамп.
С целью оптимизации потребления дискового пространства файлом ibdata1 я предлагаю комплексный подход: настроить MySQL на использование отдельных файлов для каждой таблицы и затем освобождение дискового пространства, занятого файлом ibdata1 :
Чтобы настроить сервер для использования отдельных файлов для каждой таблицы, в my.cnf добавьте следующую директиву:
|
1 2 3 |
[mysqld] innodb_file_per_table=1 |
Далее освобождаем пространство, занятое файлом ibdata1:
- Сделайте
mysqldumpвсех баз данных, процедур, триггеров и т.д.:
1mysqldump --all-databases > alldb.sql - Удалите все базы данных , кроме
mysqlиperformance_schema:
1> drop database db1; - Остановите mysql:
1sudo service mysqld stop - Удалите
ibdata1иib_logфайлы:
12sudo rm /var/lib/mysql/ibdata1sudo rm /var/lib/mysql/ib_logfile
(и удалите любой другой ib_logfile, который может быть назван ib_logfile0, ib_logfile1 и т.д.) - Запустите mysql:
|
1 |
sudo service mysqld start |
- Восстановите базы данных из дампа:
1mysql -u root -p < alldatabases.sql
Команда выше сработает если alldatabases.sql содержит CREATE DATABASE директивы, иначе вам необходимо будет сначала создать пустые базы данных командами create database [database_name] и лишь затем выполнить последний шаг.
После запуска MySQL файлы ibdata1 и ib_log будут воссозданы. Но теперь когда вы создаете новую базу данных, таблицы будут находиться в отдельных файлах ibd*, а не в ibdata1. Как правило, если вы удаляете базу данных, файлы ibd* также будут удалены.
Используя команду ALTER TABLE ENGINE=innodb или OPTIMIZE TABLE , вы можете извлекать данные и индексировать страницы из ibdata1 для разделения файлов. Однако ibdata1 не будет сокращаться в размере, если вы не выполните указанные выше шаги.




