Назад | Перейти на главную страницу

Освободите место на диске после удаления базы данных Magento MySQL

Мне нужно было освободить место на диске, поэтому я удалил старую базу данных Magento со своего сервера. Размер базы данных составлял около 16 ГБ. Я был удивлен, что после того, как база данных была удалена, это не освободило дисковое пространство.

Я попытался перезапустить сервер MySQL, но он все еще занимает это место.

Если это важно, база данных Magento довольно сильно использует innoDB.

Что я могу сделать, чтобы вернуть это дисковое пространство?

Я написал процедуру очистки для InnoDB в StackOverflow.

https://stackoverflow.com/a/4056261/491757 (29 октября, 2010)

Вот

Чтобы сжать ibdata1 раз и навсегда, вы должны сделать следующее:

1) MySQLDump всех баз данных в текстовый файл SQL (назовите его SQLData.sql)

2) Отбросьте все базы данных (кроме схемы mysql)

3) Завершение работы mysql

4) Добавьте следующие строки в /etc/my.cnf

[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G

Примечание: независимо от того, какой у вас установлен для innodb_buffer_pool_size, убедитесь, что innodb_log_file_size составляет 25% от innodb_buffer_pool_size.

5) Удалите ibdata1, ib_logfile0 и ib_logfile1

На данный момент в / var / lib / mysql должна быть только схема mysql.

6) Перезапустите mysql

Это воссоздает ibdata1 на 10 МБ, ib_logfile0 и ib_logfile1 на 1 ГБ каждый

7) Перезагрузите SQLData.sql в mysql

ibdata1 будет расти, но будет содержать только метаданные таблицы

Каждая таблица InnoDB будет существовать вне ibdata1

Предположим, у вас есть таблица InnoDB с именем mydb.mytable. Если вы зайдете в / var / lib / mysql / mydb, вы увидите два файла, представляющих таблицу

  • mytable.frm (заголовок механизма хранения)
  • mytable.ibd (домашняя страница табличных данных и табличных индексов для mydb.mytable)

ibdata1 больше никогда не будет содержать данные и индексы InnoDB.

С параметром innodb_file_per_table в /etc/my.cnf вы можете запустить OPTIMIZE TABLE mydb.mytable, и файл /var/lib/mysql/mydb/mytable.ibd действительно сократится.

Я делал это много раз за свою карьеру администратора баз данных MySQL.

Фактически, в первый раз, когда я сделал это, я свернул файл ibdata1 размером 50 ГБ в 500 МБ.

Попробуйте. Если у вас есть дополнительные вопросы по этому поводу, напишите мне. Доверьтесь мне. Это будет работать как в краткосрочной, так и в долгосрочной перспективе. !!!

В настоящее время единственный способ восстановить пространство, используемое удаленной базой данных InnoDB, - это выгрузить все базы данных, остановить MySQL, удалить базовые файлы хранилища, перезапустить MySQL и, наконец, импортировать дамп базы данных.

В документации MySQL есть дальнейшая информация об этом.