Следующая техника, которую я собираюсь показать вам, требует стальных кишок.
Учитывая следующие критерии
- Датадир
/var/lib/mysql
- стол
mydb.mytb
- enum столбец называется называется
enum_col
- двигатель MyISAM
Вот смертельная трещина в этом:
CREATE TABLE mydb.mybt LIKE mydb.mytb;
ALTER TABLE mydb.mybt MODIFY enum_col ENUM('First value','Second value');
SET wait_timeout=86400; SET interactive_timeout=86400;
FLUSH TABLES WITH READ LOCK;
В отдельной сессии OS / SSH поменяйте местами файлы .frm
$ mv /var/lib/mysql/mydb/mytb.frm /var/lib/mysql/mydb/myxx.frm
$ mv /var/lib/mysql/mydb/mybt.frm /var/lib/mysql/mydb/mytb.frm
$ mv /var/lib/mysql/mydb/myxx.frm /var/lib/mysql/mydb/mybt.frm
UNLOCK TABLES;
DROP TABLE mydb.mybt;
Это оно !!!
ПРЕДОСТЕРЕЖЕНИЕ: Я НЕ МОГУ ЗАБРАТЬ КРЕДИТ ДЛЯ ЭТОГО!
Эта техника взята из статьи «Высокопроизводительный MySQL: оптимизация, резервное копирование, репликация и т. Д.», Страницы 146-148 в разделе «Подзаголовок, ускорение» ALTER TABLE . Страница 147 Параграф 1 говорит:
Техника, которую мы собираемся продемонстрировать, не поддерживается, не имеет документов и может не работать. Используйте это на свой риск. Мы советуем вам сначала сделать резервную копию ваших данных!
Попробуйте! (Пожалуйста, дайте нам знать, как это получилось)
ОБНОВЛЕНИЕ 2011-10-05 17:49 EDT
Если таблица - MyISAM, и у вас достаточно места на рабочем месте и окно простоя, попробуйте следующее:
service mysql restart --skip-networking
В отдельной сессии OS / SSH сделайте копию таблицы
cp /var/lib/mysql/mydb/mytb.frm /var/lib/mysql/mydb/mytbplay.frm
cp /var/lib/mysql/mydb/mytb.MYD /var/lib/mysql/mydb/mytbplay.MYD
cp /var/lib/mysql/mydb/mytb.MYI /var/lib/mysql/mydb/mytbplay.MYI
INFORMATION_SCHEMA.TABLES
автоматически обнаружит наличие новой таблицы с именем mydb.mytbplay
.
Выполните алгоритм "Стали по железу" на mydb.mytbplay
Вы проверяете целостность mydb.mytbplay
Если вы удовлетворены
ALTER TABLE mydb.mytb RENAME mydb.mytb_backup;
ALTER TABLE mydb.mytbplay RENAME mydb.mytb;
service mysql restart
Попробуйте!