Teknik follolwing yang akan saya tunjukkan kepada Anda akan membutuhkan nyali baja.
Diberi kriteria berikut
- datadir adalah
/var/lib/mysql
- meja adalah
mydb.mytb
- disebut kolom enum disebut
enum_col
- Mesinnya adalah MyISAM
Berikut ini adalah celah yang menantang kematian:
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;
Dalam Sesi OS / SSH yang terpisah, tukar file .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;
Itu dia !!!
CAVEAT: SAYA TIDAK BISA MENGAMBIL KREDIT UNTUK INI!
Teknik ini berasal dari "MySQL Kinerja Tinggi: Optimalisasi, Cadangan, Replikasi, dan banyak lagi", Halaman 146-148 di bawah Subheading Mempercepat ALTER TABLE . Halaman 147 Paragraf 1 mengatakan:
Teknik yang akan kami tunjukkan tidak didukung, tidak berdokumen, dan mungkin tidak berfungsi. Gunakan dengan risiko Anda. Kami menyarankan Anda untuk mencadangkan data Anda terlebih dahulu!
Cobalah ! (Tolong beri tahu kami bagaimana hasilnya)
UPDATE 2011-10-05 17:49 EDT
Jika tabelnya adalah MyISAM dan Anda memiliki cukup ruang dalam produksi dan jendela down-up langsung, coba ini:
service mysql restart --skip-networking
Dalam Sesi OS / SSH yang terpisah, buat salinan tabel
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
secara otomatis akan mendeteksi keberadaan tabel baru yang disebut mydb.mytbplay
.
Lakukan algoritma nyali-baja pada mydb.mytbplay
Anda menguji integritas mydb.mytbplay
Jika Anda puas
ALTER TABLE mydb.mytb RENAME mydb.mytb_backup;
ALTER TABLE mydb.mytbplay RENAME mydb.mytb;
service mysql restart
Cobalah!