डीआरओपी टेबल को पूर्ववत कैसे करें?


11

मैंने गलती से सभी तालिकाओं को गिरा दिया। क्या मैं वापस बहाल कर सकता हूं? मेरे पास बैकअप कॉपी नहीं है।

जवाबों:


12

यदि आपके पास शाब्दिक रूप से कोई बैकअप नहीं है, तो मुझे यकीन है कि आप भाग्य से बाहर हैं।

यदि आपके पास बैकअप का कोई भी रूप है, हालांकि पुराना है, तो क्या आपके पास लॉग-बिन विकल्प के माध्यम से बाइनरी लॉगिंग चालू है जो कि MySQL config file (my.ini) में है? यदि ऐसा है तो आप पिछले बैकअप के बाद से पुनर्प्राप्त करने में सक्षम हो सकते हैं।

एक सप्ताह शुरू करने के लिए बुरा तरीका है, क्षमा करें।


2
शायद इसलिए कि आप अनुभवहीन हैं, हम सब इस तरह का काम कर चुके हैं, फिर भी कभी-कभी करते हैं (वास्तव में एक सप्ताह पहले खुद को अपने वीसीएनआर से बाहर बंद कर दिया था) - यह सब मायने रखता है कि आप इससे सीखते हैं इसलिए आप कम हैं दोहराने की संभावना।
चॉपर 3

अब मैं क्या कर सकता हूँ?? मैं बस बैठ कर इंतजार नहीं कर सकता !!!!

8
अपने प्रबंधक को बताएं
चॉपर 3

4
यह समस्या को ठीक नहीं करता है, लेकिन शायद आपके डेवलपर्स में से एक की एक प्रति है जो पिछली अच्छी प्रतिलिपि से बहुत दूर नहीं है?
टॉम ओ'कॉनर

3
टॉम एक बहुत अच्छा मुद्दा उठाता है: यदि आपके डेवलपर्स नियमित रूप से परीक्षण / विकास उद्देश्यों के लिए लाइव डेटा का स्नैपशॉट लेने की आदत में हैं, तो आप भाग्य में हो सकते हैं और उनमें से एक ठीक हाल ही में आपकी स्थिति को डाउनग्रेड करने के लिए पर्याप्त अनिर्दिष्ट प्रतिलिपि है " पूर्ण आपदा "केवल" प्रमुख असुविधा "।
डेविड स्पिललेट

7

सवाल बल्कि पुराना है, लेकिन एक भी सकारात्मक जवाब नहीं है, इसलिए मैं एक जोड़ूंगा।

MySQL एक टेबल ड्रॉप करने के बाद कुछ समय के लिए मीडिया पर डेटा अभी भी है। तो आप रिकॉर्ड प्राप्त कर सकते हैं और एक टेबल का पुनर्निर्माण कर सकते हैं। बाद में मैं इसके बारे में ब्लॉग करूँगा, लेकिन अब त्वरित स्केच के लिए।

आपको अपनी तालिका की संरचना (क्रिएट टेबल स्टेटमेंट) की आवश्यकता होगी।

अगर innodb_file_per_table पर है, तो टेबल डिस्क विभाजन पर है। MySQL को रोकें और इसे केवल पढ़ने के लिए ASAP के रूप में माउंट करें। यदि MySQL रूट पार्टीशन पर था (जो कि अच्छा विचार btw नहीं है) तो एक इमेज लें या डिस्क को बाहर निकालें और दूसरे सर्वर में प्लग करें। दूसरे शब्दों में सब लिखना बंद करो।

अगर innodb_file_per_table बंद है तो बस MySQL बंद करो।

फिर https://github.com/twindb/undrop-for-innodn/ से InnoDB के लिए अन-ड्रॉप टूल डाउनलोड करें और संकलित करें । विवरण के लिए " संकलन ट्विनबीडी रिकवरी टूलकिट " पोस्ट की जांच करें।

तब स्ट्रीम विभाजन के साथ डिस्क विभाजन या ibdata1 (innodb_file_per_table सेटिंग के आधार पर) पार्स करें:

./stream_parser -f /path/to/diskimage_or_ibdata1

इसके बाद इनोबीडी डिक्शनरी को रिकवर करें, जिसमें यह पता चलता है कि इंडेक्स_डेड टेबल गिरा हुआ था।

फिर तालिका संरचना लें और रिकॉर्ड प्राप्त करें

./c_parser -f pages-diskimage_or_ibdata1/FIL_PAGE_INDEX/00000<index_id>.page

यह स्टडआउट और लोड डाटा कमांड को स्टादर को रिकॉर्ड करेगा।


सर आपने मेरी जान बचाई
बुद्धी Apr१५

2

यहाँ मैंने क्या किया है। Mysql निर्देशिका में (उबंटू के लिए यह / var / lib / mysql है, मैक के लिए Homebrew का उपयोग करके यह है / usr / स्थानीय / var / mysql), मुझे कुछ फाइलें मिलीं। पहले मैंने myapp_development / निर्देशिका की प्रतिलिपि बनाई जिसमें विशेष स्कीमा मेरे स्थानीय mysql निर्देशिका में थी। फिर मैंने अपने स्थानीय ibdata1 का बैकअप लिया और सर्वर के ibdata1 को mysql निर्देशिका में कॉपी किया। मार डाला मेरे मायके। ( ps auxपीआईडी ​​को खोजने के लिए, तब kill PID)। Mysql को पुनरारंभ किया, यह क्रैश रिकवरी मोड में शुरू हुआ। फिर अपने स्थानीय mysql क्लाइंट को निकाल दिया और मुझे आवश्यक तालिकाओं का एक पूरा डंप उत्पन्न किया।

और, 15,000 पंक्तियों का प्रतिनिधित्व करते हुए काम के हफ्तों में मेटाडेटा में प्रवेश करना हमने सोचा कि हमेशा के लिए चले गए, बच गए !!

आशा है कि यह किसी की मदद करता है।


यह एक अच्छा प्रयास है, लेकिन मुझे यकीन है कि यह एक विश्वसनीय तकनीक होने पर बहुत सारी उम्मीदें नहीं जगाएगा। फिर भी, कुछ रचनात्मक सोच के लिए +1।
जॉन गार्डनियर्स

हां, आप सही हैं। यह केवल इसलिए काम कर रहा है क्योंकि हमने गलती से mysql उपयोगकर्ता से सभी अनुमतियां हटा दी थीं, इसलिए डेटाबेस उस उपयोगकर्ता के लिए खाली दिखाई दे रहा था।
ड्यूक

2

बहुत कम आप दुर्भाग्य से कर सकते हैं, एक अच्छी बैकअप योजना की आवश्यकता के बारे में बहुत मूल्यवान सबक लेने के अलावा।

तालिका प्रकार के आधार पर आप एक विशेषज्ञ को खोजने में सक्षम हो सकते हैं जो डेटा को एक साथ वापस कर सकता है जो इसे डिस्क पर छोड़ दिया है, लेकिन इस तरह के फोरेंसिक विश्लेषण बहुत महंगे होंगे (क्योंकि इसमें अपेक्षाकृत असामान्य कौशल की आवश्यकता होगी) और बिल्कुल गारंटी नहीं है वास्तव में उपयोगी होने के लिए।


क्या कोई और विकल्प है?

1
FractalizeR पता चलता है, अगर टेबल सरल MyISAM तालिकाओं थे तो आप हो सकता है उन लोगों के साथ जुड़े फ़ाइलों को हटाना रद्द करने में सक्षम हो। यदि आप प्रयास करने जा रहे हैं, तो आपको सर्वर को अब बंद करने की आवश्यकता है क्योंकि अब सिस्टम सक्रिय है और अधिक संभावना है कि फ़ाइलों द्वारा उपयोग किए जाने वाले स्थान का उपयोग अप्रयुक्त असंभव बना दिया जाएगा (या अनिर्दिष्ट फ़ाइलों को बनाने से सामग्री दूषित होती है )। कैसे हटाना रद्द करना फाइल सिस्टम पर निर्भर करता है। NTFS पर undelete के लिए Google खोज में ntfsundelete.com पहला उपयोगी खोज लिंक है।
डेविड स्पिललेट

0

यदि यह MyISAM तालिका थी, तो आपको बस / var / log / mysql या जो भी आपका डेटा dir है, टेबल फ़ाइलों को हटाना चाहिए। आप उदाहरण के लिए इसके लिए ext3grep उपयोगिता का उपयोग कर सकते हैं ।


ext3grep ext3 फाइलसिस्टम के लिए है। यदि आप Windows का उपयोग कर रहे हैं, तो आप ext3 फाइल सिस्टम का उपयोग करने की संभावना नहीं रखते हैं (संभावना है कि आप NTFS का उपयोग कर रहे हैं, हालांकि यह FAT32 हो सकता है)। यदि आप नष्ट की गई फ़ाइलों की किसी भी पुनर्प्राप्ति का प्रयास करने जा रहे हैं, तो आपको जितनी जल्दी हो सके सर्वर को बंद करने की आवश्यकता है, इससे कोई फर्क नहीं पड़ता कि अन्य सेवाएं किस पर चल रही हैं, क्योंकि जितनी अधिक देर तक सर्वर सक्रिय रहेगा, उतनी अधिक मदद नहीं मिल सकती है तुम बिल्कुल।
डेविड स्पिललेट

यदि आपके पास छाया प्रतिलिपि है जो उस मात्रा पर चालू है जो MyISAM तालिकाओं को संग्रहीत करता है जो आपके पास उस तरह से वापस लाने पर एक शॉट है।
कैथरीन मैकइन्स

हटाए गए डेटाबेस फ़ाइल को पुनर्स्थापित करने के लिए आप "ntfs undelete" के लिए Google खोज सकते हैं। मुझे नहीं पता कि डेटा dir आपके पीसी पर कहाँ स्थित है। आपको इसके लिए अपना my.ini चेक करना होगा या उदाहरण के लिए MYD एक्सटेंशन वाली फाइलों को खोजना होगा।
व्लादिस्लाव रास्ट्रुसनी

0

आप "पूर्ववत्" नहीं कर सकते DROP TABLE

आप देख सकते हैं और देख सकते हैं कि MySQL में बाइनरी लॉगिंग सक्षम थी, हो सकता है कि आप वहां से कुछ डेटा निकाल सकें।

इसके अलावा, आप MySQL के बारे में भूल सकते हैं और "मैं गलती से अपने फाइल सिस्टम से कुछ फ़ाइलों को हटा दिया" जैसी समस्याओं का एक ही वर्ग में हैं। वहाँ कुछ उपकरण हैं जो फ़ाइलों को पुनर्प्राप्त करने का प्रयास करते हैं, और ऐसी कंपनियां भी हैं जो पेशेवर आधार पर ऐसा करती हैं।


-1

यदि आपके पास बाइनरी लॉगिंग चालू है, तो आप स्कीमा होने पर पहले एक तालिका को फिर से बना सकते हैं। सुनिश्चित करें कि जब आप द्विपद बंद कर देते हैं तो आप स्कीमा बनाते हैं। या आप सिर्फ सत्र के लिए छोड़ सकते हैं। फिर आप अंतिम कथन तक बिनलॉग्स को फिर से दोहरा सकते हैं जो ड्रॉप टेबल ही था।

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

भविष्य के लिए आप एक विलंबित दास की तरह हो सकते हैं जैसे 10-24 घंटे पीछे। आप पेरकोना टूलकिट (pt-slave-delay) का उपयोग करके विलंबित दास बना सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.