Size göstermek üzere olduğum follolwing tekniği, çelik bağırsaklara ihtiyaç duyacaktır.
Aşağıdaki kriterler göz önüne alındığında
- datadir
/var/lib/mysql
- tablo
mydb.mytb
- enum sütunu denir
enum_col
- motor MyISAM
İşte ölüme meydan okuyan bir çatlak:
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;
Ayrı bir OS / SSH Oturumunda, .frm dosyalarını değiştirin
$ 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;
Bu kadar !!!
CAVEAT: BU KREDİ ALAMIYORUM!
Bu teknik, "Yüksek Performanslı MySQL: Optimizasyon, Yedeklemeler, Çoğaltma ve daha fazlası", Sayfa 146-148'den ALTER TABLE Hızlandırma Alt Başlığı altındadır . Paragraf 1 diyor ki:
Göstermek üzere olduğumuz teknik desteksiz, belgesizdir ve işe yaramayabilir. Risk altında kullanın. Önce verilerinizi yedeklemenizi öneririz!
Bir şans ver ! (Lütfen bunun nasıl ortaya çıktığını bize bildirin)
GÜNCELLEME 2011-10-05 17:49 EDT
Tablo MyISAM ise ve üretimde yeterli alanınız ve düz duruş süreniz varsa, şunu deneyin:
service mysql restart --skip-networking
Ayrı bir OS / SSH Oturumunda tablonun bir kopyasını oluşturun
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
adlı yeni tablonun varlığını otomatik olarak algılar mydb.mytbplay
.
Çelik bağırsak algoritmasını mydb.mytbplay
Bütünlüğünü test edersin mydb.mytbplay
Memnun olursan
ALTER TABLE mydb.mytb RENAME mydb.mytb_backup;
ALTER TABLE mydb.mytbplay RENAME mydb.mytb;
service mysql restart
Bir şans ver!