2012-11-30 12 views
6

से अलग निर्यातित ब्लॉब डेटा मैं अपने बहुत बड़े MySQL डेटाबेस (1.6 जीबी - ज्यादातर बीएलओबी) को निर्यात करने और नए सर्वर में आयात करने का प्रयास कर रहा हूं। मैंने अधिकांश समस्याओं के माध्यम से काम किया है और अंत में बिना किसी त्रुटि के आयात को पूरा किया है। MySQL क्वेरी ब्राउज़र का उपयोग करके मैंने छवियों के बीएलओबी के साथ एक टेबल पर एक क्वेरी चलाई और एक डिस्क को सहेजा (क्वेरी ब्राउज़र में सेव आइकन का उपयोग करके)। जब मैंने फ़ाइल खोलने की कोशिश की तो मुझे एक "अमान्य छवि प्रारूप" त्रुटि मिली। उह ओह।डीबी डेटा

क्वेरी ब्राउज़र का उपयोग करके मैंने स्रोत डेटाबेस और नए, हाल ही में आयातित डेटाबेस पर मूल्य का निरीक्षण किया। मान अलग हैं, मुझे लगता है। यह सिर्फ मुद्दों या कुछ एन्कोडिंग हो सकता है। यहाँ मैं क्या देख रहा है:

स्रोत (मान्य डेटा) सर्वर:

FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 60 
00 60 00 00 FF DB 00 43 00 08 06 06 07 06 05 08 
and so on... 

नए सर्वर:

C3 BF C3 98 C3 BF C3 A0 00 10 4A 46 49 46 00 01 
01 01 00 60 00 60 00 00 C3 BF C3 9B 00 43 00 08 
and so on... 

इस उदाहरण यह मेरे नौसिखिया आंख प्रतीत होता है में अतिरिक्त के 3 बाइट्स देखते हैं कि "नए" सर्वर पर डेटा के सामने डेटा।

मैंने फिर 010 editor का उपयोग कर एसक्यूएल डंप फ़ाइल की जांच की। मैं इस विशिष्ट उदाहरण के लिए लाइन मिल गया है और यहाँ मैं क्या देख रहा है:

FF D8 FF E0 5C 30 10 4A 46 49 46 5C 30 01 01 01 
5C 30 60 5C 30 60 5C 30 5C 30 FF DB 5C 30 43 5C 
30 08 06 06 07 06 05 08 and so on... 

अब मैं मेरे सिर पर जिस तरह से कर रहा हूँ। मैं पैटर्न देखता हूं, मुझे लगता है कि हेक्स जोड़ी 5 सी 30 00 जैसा ही प्रतीत होता है लेकिन मुझे समझ में नहीं आता है। इस बिंदु पर मेरे पास एक स्रोत सर्वर है जो मिटाए जाने वाला है और मुझे डरने वाला एक नया भ्रष्ट डेटा इसमें आयात किया गया है। मुझे आशा है कि यह किसी प्रकार का एन्कोडिंग मुद्दा है जिसे MySQL में वैश्विक चर सेट करके हल किया जा सकता है लेकिन मुझे वास्तव में पता नहीं है।

मुझे यह भी उल्लेख करना चाहिए कि जब मैं स्रोत (काम कर रहे) सर्वर और नए (दूषित) सर्वर से फ़ाइलों को सहेजता हूं तो भ्रष्ट फ़ाइल के लिए फ़ाइलों का आकार लगभग 40% बड़ा होता है।

मैं दोनों सर्वर पर वर्ण सेट चर जाँच:

SHOW VARIABLES LIKE '%char%' 

स्रोत सर्वर:

character_set_client  utf8 
character_set_connection utf8 
character_set_database latin1 
character_set_filesystem binary 
character_set_results  utf8 
character_set_server  latin1 
character_set_system  utf8 

नए सर्वर:

character_set_client  utf8 
character_set_connection utf8 
character_set_database latin1 
character_set_filesystem binary 
character_set_results  utf8 
character_set_server  latin1 
character_set_system  utf8 

वे एक ही हैं।

+1

FYI 1.6 जीबी डेटाबेस मामले में सिर्फ एक बच्चा है:

सबसे अच्छा समाधान जब ब्लॉब क्षेत्रों के निर्यात --hex-blob विकल्प का उपयोग करने, जो की तरह कुछ में परिणाम होगा हो सकता है! – briantyler

+0

हेक्स स्ट्रिंग '5 सी 30'' \ 0' है, इसलिए यह संपादक के साथ कुछ अजीब व्यवहार की तरह दिखता है, या एसक्यूएल डंप की सामग्री किसी भी तरह से छेड़छाड़/टूट गई है। – cmbuckley

उत्तर

6

नए डेटाबेस से दूषित डेटा ISO-8859-1 से UTF-8 में स्रोत डेटा परिवर्तित करने का परिणाम की तरह लग रहा है (जैसे U + 00FF - Y - पूर्व में FF और C3 BF उत्तरार्द्ध में है)।

चूंकि बीएलओबी के पास कोई चरित्र सेट नहीं है, इसलिए वर्ण एन्कोडिंग सर्वर चर द्वारा नियंत्रित नहीं है; मुझे संदेह है कि mysqldump आपके बीएलओबी डेटा को यूटीएफ -8-एन्कोडेड फ़ाइल (which is the default) में आउटपुट कर रहा है, और यह सर्वर सेटिंग्स और विकल्पों के कुछ संयोजन के माध्यम से mysqldump पर किसी भी तरह से एन्कोड किया गया है।

INSERT INTO `table` VALUES (0xFFD8FFE0...); 
संबंधित मुद्दे