Follolwing तकनीक मैं दिखाने वाला हूं कि आपको स्टील की हिम्मत की आवश्यकता होगी।
निम्नलिखित मानदंडों को देखते हुए
- दातादिर है
/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 कहता है:
हम जिस तकनीक को प्रदर्शित करने वाले हैं वह असमर्थित, अनिर्धारित है और काम नहीं कर सकती है। अपने जोखिम पर प्रयोग करें। हम आपको सलाह देंगे कि आप पहले डेटा का बैकअप लें!
कोशिश तो करो ! (कृपया हमें बताएं कि यह कैसे निकला)
UPDATE 2011-10-05 17:49 EDT
यदि तालिका MyISAM है और आपके पास उत्पादन में पर्याप्त जगह है और एक सीधी अप-डाउन विंडो है, तो यह प्रयास करें:
service mysql restart --skip-networking
एक अलग ओएस / एसएसएच सत्र में, तालिका की एक प्रति बनाएं
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
कोशिश तो करो!