В MySQL есть такой замечательный файл — ibdata1. Замечателен о не только тем, что растёт как дурак, но и тем, что хранит кучу данных сервера.
Начнём с того, что просто удалить его можно, но это приведёт к уничтожению данных таблиц. ibdata1 хранит данные таблиц (кроме схем — они хранятся в других файлах), индексы и прочую информацию. Альтернатива хранению в одном файле — хранить для каждой таблицы эту информацию в отдельном файле. Собственно это я и предлагаю сделать.
- Используем эту команду, чтобы выгрузить все данные сервера
mysqldump --all-databases > alldb.sql
- Удаляем все базы кроме служебных mysql.
- Останавливаем mysql.
- Добавим в my.cnf (во многих дистрибутивах этот файл лежит в /etc/mysql) в секцию
[mysqld]
строчку
innodb_file_per_table
- Удаляем /var/lib/mysql/ibdata1 и /var/lib/mysql/ib_logfile* файлы.
- Поднимаем сервер mysql
- Заливаем дамп в базу
cat alldb.sql | mysql -uroot -p