เทคนิค follolwing ฉันกำลังจะแสดงให้คุณเห็นว่าจะต้องมีความกล้าเหล็ก
ได้รับเกณฑ์ดังต่อไปนี้
- datadir คือ
/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ภายใต้หัวข้อย่อยการเร่งความเร็วตารางการเปลี่ยนแปลง หน้า 147 ย่อหน้าที่ 1 พูดว่า:
เทคนิคที่เรากำลังจะสาธิตไม่ได้รับการสนับสนุนไม่มีเอกสารและอาจใช้งานไม่ได้ ใช้ความเสี่ยงของคุณ เราแนะนำให้คุณสำรองข้อมูลของคุณก่อน!
ให้มันลอง ! (โปรดแจ้งให้เราทราบว่าเปิดใช้งานอย่างไร)
อัพเดท 2011-10-05 17:49 EDT
หากตารางคือ MyISAM และคุณมีพื้นที่เพียงพอในการผลิตและหน้าต่างหยุดทำงานตรงให้ลองทำดังนี้:
service mysql restart --skip-networking
ใน OS / SSH Session แยกทำสำเนาของตาราง
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
โดยอัตโนมัติ
ดำเนินการอัลกอริทึม guts-of-steel mydb.mytbplay
คุณทดสอบความสมบูรณ์ของ mydb.mytbplay
หากคุณพอใจ
ALTER TABLE mydb.mytb RENAME mydb.mytb_backup;
ALTER TABLE mydb.mytbplay RENAME mydb.mytb;
service mysql restart
ให้มันลอง!