2010-08-15 9 views
10

मैं कमांड के साथ कई वर्षों के लिए एक MySQL डेटाबेस का बैकअप ले रहे है: mysqldump myDatabaseName -u root > myBackupFile.sqlकैसे मज़बूती से MySQL धब्बे बहाल करने के लिए

बैकअप ठीक काम करने के लिए दिखाई दिया ...

मैं तो एक को बहाल करना चाहता था एक अलग नाम दिया डेटाबेस के लिए बैकअप की तो मैंने किया: mysql myNewDatabaseName -u root < myBackupFile.sql

मैं लॉगफ़ाइल आकार के बारे में कुछ त्रुटियों मिला तो मैं Mysql बंद कर दिया और लॉगफ़ाइल हटा दिया और my.ini फ़ाइल और पुन: प्रारंभ mysql में निम्नलिखित मानकों की स्थापना की।

innodb_log_file_size=64M

innodb_log_buffer_size=8M

अब बहाल नहीं त्रुटियों के साथ पूरा करता है लेकिन तीन तालिकाओं जो धब्बे होते हैं में से एक बहाल कभी नहीं किया गया है।

मेरे max-allowed-packet 32M

डेटाबेस बैकअप आकार 2.2 जीबी है कि आकार तालिका बहाल नहीं करता में होने का बहुमत है पर सेट है। यदि मैं पुनर्स्थापित डेटाबेस पर एक mysqldump चलाता हूं तो आकार 185 एमबी है।

मैंने अब विकल्प --hex-blob विकल्प के साथ करने का प्रयास किया है, लेकिन मैंने अभी तक उस फ़ाइल को पुनर्स्थापित करने का प्रयास नहीं किया है (3.9 जीबी)।

मुझे बैकअप और पुनर्स्थापित करने के लिए वास्तव में एक बमप्रूफ तरीका होना चाहिए क्योंकि मेरे मौजूदा बैकअप बेकार दिखाई देते हैं। मैं विशेष रूप से चिंतित हूं कि यह "चुपचाप विफल रहता है" जहां तक ​​मैं देख सकता हूं कि कोई त्रुटि लॉग प्रविष्टियां नहीं हैं।

पर्यावरण Windows Server 2003 SP2

किसी भी मदद की सराहना की है!

जॉर्ज

+0

क्या डंप फ़ाइल में ब्लब्स मौजूद हैं?शायद उन्हें कभी भी शुरू करने के लिए समर्थन नहीं दिया गया था और पुनर्स्थापना प्रक्रिया वास्तव में किस डेटा के साथ काम करती थी। Max_packet डेटा को दोनों तरीकों से प्रभावित करता है। यदि आप बहुत कम सीमा से डंप हो जाते हैं, तो ब्लब्स को गिरा दिया या छोटा कर दिया जा सकता है। –

उत्तर

4

मैं बैक अप लेने और निम्नलिखित mysqldump कमांड का उपयोग करके धब्बे को बहाल करने में कामयाब रहे: अगर यह कमांड लाइन पर max_allowed_packet या skip-extended-insert कि चाल किया निर्दिष्ट करने है

mysqldump --opt --skip-extended-insert --max_allowed_packet=128M -u root myDB > filename 

सुनिश्चित नहीं हैं।

मुझे लगता है कि 32 एम के मेरे max_allowed_packet का उपयोग किया जा रहा था, लेकिन मुझे लगता है कि mysql कॉन्फ़िगरेशन फ़ाइल में यह [mysqld] अनुभाग में है और इसलिए शायद डंप पर लागू नहीं होता है।

मुझे अभी भी समझ में नहीं आता कि मुझे डंप या पुनर्स्थापना पर कोई त्रुटि क्यों नहीं मिली।

+0

mysqldump max_allowed_packet को अनदेखा करता है। यह बग रिपोर्ट पढ़ें कि यह पता लगाने के लिए कि क्या यह डिज़ाइन द्वारा है या नहीं: http://bugs.mysql.com/bug.php?id=9753 – Leopd

2

mysqldump --skip-extended-insert काम करता है लेकिन पुनर्स्थापना पर 100x द्वारा प्रदर्शन को कम कर सकता है, जिससे यह व्यवहार्य विकल्प नहीं बनता है।

जब आप बैकअप करते हैं, max_allowed_packet (design से?) mysqldump द्वारा नजरअंदाज कर दिया है वास्तविक पूरक net_buffer_length है। तो सुनिश्चित करें कि आपका max_allowed_packet आपके net_buffer_length से बड़ा है और इसे काम करना चाहिए। जैसा कि:

mysqldump -u root --net_buffer_length=100k oldDB > backup.sql 
mysql -u root --max_allowed_packet=10M newDB < backup.sql 
संबंधित मुद्दे