Мне нужно было освободить место на диске, поэтому я удалил старую базу данных 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, вы увидите два файла, представляющих таблицу
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 есть дальнейшая информация об этом.