2016-04-27 11 views
5

pg_xlog को हटाने डेबियन खरखरा, Postgresql 9.3Postgres फ़ाइलों

मेरे डेटाबेस नीचे चला गया है क्योंकि विभाजन जहां वॉल फ़ाइलें रखता है पूरा हो गया का उपयोग करने के बाद शुरू नहीं करेंगे। तो, मैंने ./pg_xlog/ के अंदर सब कुछ हटा दिया, क्योंकि मुझे नहीं पता था कि वे क्या थे (हाँ, अविश्वसनीय रूप से बेवकूफ)। अब Postgres सेवा शुरू कर देंगे नहीं है, हालांकि समस्या, syslog के अनुसार:

00000: could not open tablespace directory "pg_tblspc/16386/PG_9.3_201306121": File or directory not found 
LOCAL: RelationCacheInitFileRemoveInDir, relcache.c:4895 
00000: Primary checkpoint record is invalid 
LOCAL: ReadCheckpointRecord, xlog.c:6543 
00000: Secondary checkpoint record is invalid 
LOCAL: ReadCheckpointRecord, xlog.c:6547 
PANIC: XX000: could not locate a valid checkpoint record 
LOCAL: StartupXLOG, xlog.c:5228 

मैं पूरी तरह यकीन नहीं है कि समस्या यह है कि यह उचित pg_tblspc या चौकी वाल की कुल कमी नहीं मिल सकता है नहीं कर रहा हूँ फ़ाइलें। डेटाबेस को संग्रहीत करने के लिए वास्तविक पथ /dados/PG_9.3_201306121 है। सेवा को फिर से शुरू करने के लिए मैं क्या कर सकता हूं?

EDIT1: ठीक है, मैं चीज़ वापस ऑनलाइन प्राप्त करने में कामयाब रहा हूं। कुछ डेटाबेस भ्रष्ट हो गए। मैंने उनमें से दो को DROPDB प्रबंधित किया है (बिना सेवा पुनरारंभ करने के लिए उनसे कनेक्ट भी हो सकता है)। मैंने इसे किसी अन्य व्यक्ति को भ्रष्ट करने की कोशिश की, लेकिन त्रुटि फिर से xlog से संबंधित थी। मैंने उस पर एक साफ बहाली करने की कोशिश की है, लेकिन बहाली अपूर्ण थी। फिर, मैंने एक नया डेटाबेस बनाया है और इस डेटाबेस के पुराने बैकअप को पुनर्स्थापित करने का प्रयास किया है। यह अधूरा भी आया।

अब मैं किसी भी डेटाबेस को नहीं छोड़ सकता, न ही नए बना सकता हूं, मुझे हमेशा xlog flush request not satisfied त्रुटि मिलती है। मैंने pg_resetxlog चलाने का प्रयास किया है, लेकिन ऐसा कुछ नहीं लगता है। एक और चीज त्रुटि दिखाती है cannot write to block 1 of pg_tblspc/16385/PG_9.3_201306121/36596452/11773, write error may be permanent

EDIT2: ऊपर की समस्या का हिस्सा उस 11773 फ़ाइल के साथ था। मैंने इसे बदलकर 11773.corrupt कर दिया है और अब डेटाबेस मुझे फिर से बनाने और ड्रॉप करने की अनुमति देता है।

+0

Nonono, इसका उपयोग न करें! इसे वापस ले जाएं, इसे बंद करें, पुरानी डेटा निर्देशिका का नाम बदलें, 'initdb' एक नया (या अपने पैकेज के रैपर का उपयोग करें, हालांकि आप इसे पहले सेट अप करते हैं) और फिर अपने डंप को नए PostgreSQL इंस्टेंस में पुनर्स्थापित करें। –

उत्तर

6

Postgres फ़ाइलों

उम, हाँ pg_xlog को हटाने के बाद शुरू नहीं करेंगे। ऐसा मत करो।

सेवा शुरू करने के लिए मैं क्या कर सकता हूं?

ठीक है, आपने अपना डेटाबेस दूषित कर दिया है। बैकअप से पुनर्स्थापित करें। आपके पास बैकअप हैं, है ना? पसंदीदा रूप से एक आसान पीआईटीआर संग्रह जैसे कि पीजी बार्मन, जहां आप 5 मिनट पहले तक पुनर्स्थापित कर सकते हैं। नहीं?

ठीक है, पहले, क्षतिग्रस्त प्रति संग्रहित करें। https://wiki.postgresql.org/wiki/Corruption

अब। यदि आप भाग्यशाली हैं, pg_resetxlog आपको डेटाबेस के pg_dump सफलतापूर्वक करने के लिए पर्याप्त रूप से चलाएगा और इसलिए आप पुराने क्षतिग्रस्त इंस्टॉलेशन के डेटादिर को एक तरफ initdb एक नया स्थानांतरित कर सकते हैं और डेटाबेस को पुनर्स्थापित कर सकते हैं।

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

तो हाँ। pg_xlog हटाएं मत।

पोस्टग्रेएसक्यूएल समुदाय के भीतर pg_xlog नाम बदलने के बारे में चर्चाएं हैं जो इसे और अधिक स्पष्ट करती हैं कि यह डेटाबेस का एक महत्वपूर्ण घटक है, और उम्मीद है कि यह 9.7 रिलीज में किया जाएगा।

+0

ठीक है, मुझे बैकअप मिल गया है, लेकिन अब कुछ डेटाबेस दूषित हैं। खैर, यह कोई समस्या नहीं होगी, लेकिन अब मैं डेटाबेस को ड्रॉप या क्रिएट नहीं कर सकता, मुझे हमेशा "xlog फ्लश अनुरोध संतुष्ट नहीं होता" त्रुटि – Arthur

+0

आपको initdb करना होगा, –