2009-07-10 24 views
18

संभव डुप्लिकेट:
Speeding up mysql dumps and importsक्या mysqldumps लोड करने का कोई तेज़ तरीका है?

mysqldump यथोचित तेजी से है, लेकिन एक मध्यम आकार के डेटाबेस (20-30 megs) का डंप का उपयोग कर लोड करने के लिए कई मिनट लग mysql my_database < my_dump_file.sql

क्या कुछ mysql सेटिंग्स हैं जो मैं लोड को तेज करने के लिए ट्यून कर सकता हूं? सहेजे गए डेटा को लोड करने का कोई बेहतर तरीका है?

मैंने CSV- आधारित डंप के साथ mysqlimport उपयोगिता का उपयोग करके प्रयोग किया है। ये भार थोड़ा - लेकिन सराहनीय नहीं - तेज़। मैं बस कच्चे डेटाबेस फ़ाइलों को प्रतिलिपि बनाने का लुत्फ उठा रहा हूं, लेकिन यह एक बुरा विचार की तरह लगता है।

+0

तुलना में तेजी से बहाल 10x बार करने के लिए बस FYI जो 3x है ... मैं एक छापे 5 ड्राइव में नाकाम रहने के है, जो एक MySQL के साथ वास्तव में खराब प्रदर्शन के कारण होता था बहाल । आम तौर पर 40 मिनट लगने पर 24 घंटों तक धक्का लग रहा था। बस संदर्भ के लिए। – gahooa

उत्तर

5

maatkit - parallel dump

और

maatkit - parallel restore

बहुत तेजी से।

+0

धन्यवाद, यह वही है जो मैं ढूंढ रहा था! –

+13

विवरण कहता है कि सॉफ़्टवेयर में बग हैं और बैकअप या महत्वपूर्ण डेटा पर उपयोग नहीं किया जाना चाहिए! बहुत बुरा ... मुझे आश्चर्य है कि क्या मैं एक गति प्राप्त करने के लिए अलग-अलग तालिकाओं पर समानांतर में एकाधिक mysqldumps चला सकता हूं? – davr

5

सुनिश्चित करें कि आप डंपिंग करते समय mysqldump के --opt विकल्प का उपयोग कर रहे हैं। इस सर्वर को रोकने, उन्हें एक बंद कर दिया सर्वर से कॉपी करके थोक डालने वाक्य रचना का उपयोग करेगा, कुंजी अद्यतन, आदि में देरी ...


आप केवल MyISAM तालिकाओं का उपयोग कर रहे हैं, तो आप सुरक्षित रूप से उन्हें कॉपी कर सकते हैं, और शुरू करना

आप मूल सर्वर को रोकने के लिए नहीं करना चाहते हैं, तो आप इस का पालन कर सकते हैं:

  1. सभी तालिकाओं
  2. फ्लश सभी तालिकाओं
  3. कॉपी फ़ाइलों
  4. अनलॉक पर पढ़ने ताला जाओ टेबल

लेकिन मुझे पूरा यकीन है कि जब आप उन्हें जगह में रखते हैं तो आपकी कॉपी-टू सर्वर को रोकना होगा।

+0

असल में यह है कि mysqlhotcopy – aldrinleal

+0

दुख की बात है, मेरे पास केवल एक ही वोट देने के लिए वोट है। जिस तरह से मैंने सुझाव दिया था, - विकल्प विकल्प का उपयोग करके, mysqldump प्रदर्शन करने के तरीके को बदलकर, मेरे आयात से 5 घंटे दूर मुंडा! – Nate

+0

@Nate अन्य कारण होने चाहिए कि आपका आयात अब तेज़ क्यों है, क्योंकि mysqldump में डिफ़ॉल्ट रूप से '--opt' सक्षम है। यह कम से कम v5.5 (2010) के बाद से किया गया है। – dr01

1

बैकअप के लिए LVM स्नैपशॉट्स का उपयोग करने और पुनर्स्थापित करने के लिए एक विधि है जो आपके लिए एक दिलचस्प विकल्प हो सकता है।

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

"रिकवरी समय डेटा को वापस और मानक MySQL क्रैश रिकवरी डालने जितना तेज है, और इसे और भी कम किया जा सकता है।"

http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/

4

आप डेटा समझदार है वाकई, और वहाँ किसी भी फाइल सिस्टम या सिस्टम प्रदर्शन समस्याएं नहीं हैं? 20-30 मेग डेटाबेस के लिए कई मिनट लंबे समय तक हैं। मैं एक मैकबुक पर 2 जीबी रैम, एक 320 जीबी एचडी और मानक 2.1GHz प्रोसेसर के साथ हूं। मैंने त्वरित डेटाबेस के लिए अपने डेटाबेस में से एक को पकड़ लिया:

gavinlaking$ du -sm 2009-07-12.glis 
74 2009-07-12.glis 
gavinlaking$ mysql -pxxx -e "drop database glis" 
gavinlaking$ mysql -pxxx -e "create database glis" 
gavinlaking$ time mysql -pxxx glis < 2009-07-12.glis 

real 0m17.009s 
user 0m2.021s 
sys 0m0.301s 

74 मेगाबाइट फ़ाइल के लिए 17 सेकंड। यह मेरे लिए बहुत उदास लगता है। यहां तक ​​कि अगर यह 4 गुना बड़ा था (इसे 300 मेगाबाइट्स का शर्मीला बनाना), यह 70 सेकंड से कम में खत्म हो जाता है।

25

यह मानते हुए कि आप InnoDB का उपयोग कर रहे ...

मैं मौजूदा mysqldump उत्पादन फ़ाइलों है कि मैं एक उचित समय में आयात करने के लिए करना चाहता था के ढेर होने के स्थिति में था। टेबल (प्रति फ़ाइल एक) लगभग 500 एमबी थी और इसमें प्रत्येक डेटा की 5,000,000 पंक्तियां थीं। निम्नलिखित पैरामीटर का उपयोग करके मैं 32 मिनट से 3 मिनट के भीतर सम्मिलित समय को कम करने में सक्षम था।

innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 256M
innodb_flush_method = O_DIRECT

तुम भी एक यथोचित बड़े innodb_buffer_pool_size सेटिंग की आवश्यकता होगी।

क्योंकि मेरी आवेषण एक बंद मैं बाद में सेटिंग कर दिए गए थे। यदि आप उन्हें दीर्घकालिक उपयोग करने जा रहे हैं, तो सुनिश्चित करें कि आप जानते हैं कि वे क्या कर रहे हैं।

मैं सुझाव Cedric Nilly's blog पर इन सेटिंग्स का उपयोग करने के लिए और सेटिंग्स से प्रत्येक के लिए विस्तृत विवरण पाया MySQL documentation में पाया जा सकता।

+0

यह दूसरी बार है जब मैं इस विधि का उपयोग करता हूं। दोनों मामलों में (विभिन्न डेटाबेस), इसने आयात समय को कुछ मिनटों में घटा दिया। धन्यवाद! – lepe

+0

मुझे हाल ही में ~ 8 कॉलम और अधिकतर int डेटा की एक साधारण तालिका के लिए ऐसा करना पड़ा। इन्हें लागू करने से पहले, मुझे ~ 30 आवेषण/एस (इंडेक्स अक्षम) मिल रहा था। परिवर्तन के बाद मुझे ~ 600 आवेषण मिल रहा था। सबसे बड़ी जीत (डिफ़ॉल्ट) '2' है, जो हर सेकंड लॉग इन करने लिखते हैं के बजाय हर लेन-देन पर flushes से innodb_flush_log_at_trx_commit स्थापित करने से आता है '1' (जो एक डालने जब एक autocommit सच है के बाद है। यह डिफ़ॉल्ट रूप से सच है) – Adil

+0

क्या आप समझा सकते हैं कि इस मान को संपादित करते समय क्या होता है? हमारे लिए समझने के लिए। मैंने अभी इसका इस्तेमाल किया और गति शानदार है। – reignsly

संबंधित मुद्दे

 संबंधित मुद्दे