При работе с базами данных в MySQL рано или поздно начинает полнеть файл ibdata1. Этот файл содержит в себе индексы и данные всех innodb таблиц, если не было указано в настройках иное. При работе с крупными базами рекомендуется использовать опцию innodb_file_per_table, тогда этот файл будет гораздо меньше. Но просто добавлением опции дело не исправить, необходимо переложить все таблицы имеющихся баз руками в отдельные файлы и папки.
Для этого:
- Делаем бэкап всех баз
mysqldump --all-databases -p > mysqldump-all.sql
- Удаляем все базы, кроме служебных (mysql и performance_schema)
- Добавляем в my.cnf опцию innodb_file_per_table в секцию [mysqld]
- Останавливаем MySQL
- Удаляем файлы /var/lib/mysql/ibdata1 и /var/lib/mysql/ib_logfile*
- Запускаем MySQL
- Заливаем дамп назад, наблюдая за заполнением /var/lib/mysql отдельными папками под каждую базу
mysql -p < mysqldump-all.sql
Ссылки: