2009-06-18 23 views
12

में एक नया कॉलम जोड़ें एक बड़ी mysql तालिका में नया कॉलम जोड़ने का सबसे तेज़ तरीका क्या होगा?एक बड़ी MySQL तालिका

परिवर्तन तालिका जोड़ें कॉलम पूर्ण तालिका की एक प्रति बनाता है, और उसके बाद पुरानी को नई बनाएं तालिका के साथ बदल देता है। हालांकि यह प्रक्रिया चल रही है, मूल तालिका पठनीय है, लेकिन सभी आवेषण और अद्यतन रुक गए हैं।

बड़ी तालिकाओं पर, प्रतिलिपि में काफी समय लग सकता है, क्या इसे कम करने का कोई तरीका है?

+0

संबंधित प्रश्न: http://stackoverflow.com/questions/1645215/how-do-i-add-a-column-to-large-sql-server-table –

+1

ट्यूनिंग innodb_log_file_size पर विचार करें (लेकिन सावधान रहें, http://www.mysqlperformanceblog.com/2011/07/09/how-to-change-innodb_log_file_size-safely/) और innodb_log_buffer_size देखें। अधिक जानकारी के लिए, मेरा उत्तर यहां देखें: http://stackoverflow.com/a/12688184/1148030 –

उत्तर

5

आप अल्टर टेबल कर रहे हैं। इसका प्रभावी ढंग से निपटने का सबसे अच्छा तरीका मास्टर-मास्टर सेटअप का उपयोग करना है।

आप पहले MASTER1 को संशोधित कर सकते हैं, और केवल उत्पादन में MASTER2 का उपयोग कर सकते हैं। फिर आप स्विच करते हैं और सटीक विपरीत करते हैं।

2

यह सक्रिय प्रणाली पर लाइव न करें। एक सक्रिय प्रणाली के लिए, नियमित रखरखाव के लिए सिस्टम को नीचे लेते समय ऐसा करें।

+0

दास बॉक्स में अपडेट करना संभव है, लेकिन वास्तविक पर अपडेट को फिर से बनाने के लिए कोई गैर-मैन्युअल तरीका है ? बाइनरी लॉग या ऐसा कुछ। मैन्युअल तरीका प्रत्येक डालने या अपडेट लॉग और एक ही क्रम में लागू होगा। – Maraino

1

एक InnoDB तालिका मान लिया जाये कि कोई डेटा के साथ

  1. कॉपी {मौजूदा तालिका} {नई तालिका} के लिए (स्कीमा केवल)
  2. उपयोग ऑल्टर तालिका जोड़ने/नई मेज पर स्तंभों को बदलने के लिए आदेश (काम करना चाहिए
  3. mysqldump मौजूदा तालिका एक फ्लैश में) (में {} नई तालिका
  4. आयात डंप फ़ाइल (इस फाइल करने के लिए, कुछ समय लग सकता एकल लेन-देन, --no-ड्रॉप-मेज, आदि) का उपयोग करते हुए, लेकिन पुराने तालिका अभी भी इस अवधि के दौरान प्रयोग योग्य)
  5. डी रखरखाव अवधि, डीआरओपी {पुरानी तालिका} और पिछले {पुरानी तालिका} में {नई तालिका} का नाम बदलें।
संबंधित मुद्दे