Программы
Чистим разросшийся файл mysql ibdata1

Чистим разросшийся файл mysql ibdata1

В MySQL есть такой замечательный файл — ibdata1. Замечателен о не только тем, что растёт как дурак, но и тем, что хранит кучу данных сервера.

В 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
Изображение Шпаргалка по командам Linux, FreeBSD и MacOS