2009-02-28 13 views
13

अचानक बिजली कटौती के कारण, PostGres सर्वर अपने स्थानीय मशीन पर चल अचानक शट डाउन। रिबूट करने के बाद, मैं postgres को पुनः आरंभ करने की कोशिश की और मैं इस त्रुटि मिलती है:मैं पोस्टग्रेज़ को कैसे ठीक करूं ताकि यह अचानक बंद होने के बाद शुरू हो जाए?

$ pg_ctl -D /usr/local/pgsql/data restart

pg_ctl: PID file "/usr/local/pgsql/data/postmaster.pid" does not exist 
Is server running? 
starting server anyway 
server starting 
$:/usr/local/pgsql/data$ LOG: database system shutdown was interrupted at 2009-02-28 21:06:16 
LOG: checkpoint record is at 2/8FD6F8D0 
LOG: redo record is at 2/8FD6F8D0; undo record is at 0/0; shutdown FALSE 
LOG: next transaction ID: 0/1888104; next OID: 1711752 
LOG: next MultiXactId: 2; next MultiXactOffset: 3 
LOG: database system was not properly shut down; automatic recovery in progress 
LOG: redo starts at 2/8FD6F918 
LOG: record with zero length at 2/8FFD94A8 
LOG: redo done at 2/8FFD9480 
LOG: could not fsync segment 0 of relation 1663/1707047/1707304: No such file or directory 
FATAL: storage sync failed on magnetic disk: No such file or directory 
LOG: startup process (PID 5465) exited with exit code 1 
LOG: aborting startup due to startup process failure 

डेटा निर्देशिका में कोई postmaster.pid फ़ाइल नहीं है। संभवतः इस तरह के व्यवहार का कारण क्या हो सकता है और निश्चित रूप से क्या रास्ता है?

+0

आपकी जानकारी के लिए, संभावना है कि आप बैकअप से पुनर्स्थापित करना पड़ सकता है कर रहे हैं। लेकिन ऐसा करने से पहले, कृपया हमारे पोस्टग्रेज़ संस्करण (v8.1.5 और v8.1 में) के साथ साझा करें।6 आईआईआरसी वसूली के दौरान इस त्रुटि को ट्रिगर करने वाला एक बग था) और फाइल सिस्टम प्रकार (आप इसे अगले आउटेज से पहले बदलना चाहते हैं।) – vladr

+0

संकेत: "पुनरारंभ करें", आप पोस्टग्रेएसक्यूएल को बता रहे हैं कि यह चल रहा है और इसे पुनरारंभ करने की आवश्यकता है। यह नहीं चल रहा है, इस प्रकार कोई प्रक्रिया आईडी (.pid) फ़ाइल नहीं है। – Kurt

+0

आप किस पोस्टग्रेज़ संस्करण का उपयोग कर रहे हैं, और '/ usr/local/pgsql/data' के लिए फाइल सिस्टम का प्रकार क्या है? – vladr

उत्तर

0

पहली बात मैं कोशिश करता हूँ कि डिस्क पर fsck चल रहा है तो आप पहले से ही ऐसा नहीं किया है।

6

PostgreSQL मेलिंग सूची के अभिलेखागार में कुछ इसी तरह के संदेशों को पढ़ना ("भंडारण सिंक चुंबकीय डिस्क पर विफल: ऐसी कोई फ़ाइल या निर्देशिका") से संकेत मिलता है कि वहाँ एक बहुत ही गंभीर हार्डवेयर मुसीबत, बहुत खराब लगता है एक साधारण बिजली विफलता की तुलना में। आपको बैकअप से पुनर्स्थापित करने के लिए खुद को तैयार करना पड़ सकता है।

+0

एंट पी, व्लाद रोमास्कानु और बोर्ट्ज़मेयर - आपके सभी कॉमन्स के लिए धन्यवाद। मैंने पाया है कि पावर स्पाइक की वजह से हार्ड डिस्क दूषित हो गई है। मुझे पोस्टग्रेज़ को दूसरी मशीन पर ले जाना है। –

+0

यदि यह सही था, तो आप दो उत्तरों को ऊपर उठा सकते हैं (क्यों एक मूर्खता को समझाने के लिए परेशान किए बिना मेरा नीचे गिरा दिया गया)। – bortzmeyer

+0

@bortzmeyer: सही उत्तर के कारण उपरोक्त। –

18

आप pg_resetxlog नहीं करनी होंगी। इसके बाद आपका डेटाबेस एक असंगत स्थिति में हो सकता है, इसलिए pg_dumpall के साथ इसे डंप करें, फिर से बनाएं और आयात करें।

इस के लिए एक कारण हो सकता है:

  • आप डिस्क पर हार्डवेयर लिखने कैश है, जो अक्सर सुनिश्चित करें कि डेटा से पहले यह आवेदन करने के लिए सफल लिखने की रिपोर्ट लिखा है करने से रोकता है ओएस बंद नहीं किया है।

    hdparm -I /dev/sda

    से संपर्क करें यदि यह "*" "लिखें कैश" तो इस मामले से पहले हो सकता है पता चलता है। Source of PostgreSQL में एक प्रोग्राम src/tools/fsync/test_fsync.c है, जो डिस्क के साथ डेटा समन्वयित करने की गति का परीक्षण करता है। इसे चलाएं - अगर यह आपकी तुलना में कम से कम तीन बार रिपोर्ट करता है, तो कहें, आपकी डिस्क से 3 सेकेंड ओएस पर झूठ बोल रहा है - 7500 आरपीएम डिस्क पर एक ही स्थान पर 1000 लिखने के परीक्षण को पूरा करने के लिए कम से कम 8 सेकंड की आवश्यकता होगी (1000/(7500 आरपीएम/60 के दशक)) क्योंकि यह केवल प्रति मार्ग एक बार लिख सकता है। आप इस test_fsync.c संपादित करने के लिए करता है, तो अपने डेटाबेस/var/tmp विभाजन से एक और डिस्क पर है आवश्यकता होगी - बदल

    #define FSYNC_FILENAME "/var/tmp/test_fsync.out"

    #define FSYNC_FILENAME "/usr/local/pgsql/data/test_fsync.out"

  • करने के लिए अपने डिस्क विफल हो रहा है और एक खराब ब्लॉक है, badblocks के साथ जांचें।

  • आप एक बुरा रैम, कम से कम 8 घंटे के लिए memtest86+ के साथ जांच की है।

+0

धन्यवाद एक टन। मैंने डीबी को स्थानांतरित कर दिया था, लेकिन मैंने आपके विकल्प को एक कोशिश देने का फैसला किया। यह काम किया है और डीबी बहाल किया गया है। pg_resetxlog ने चाल की है। –

+0

यह समस्या तब भी हो सकती है जब एक विंडोज ओएस अपग्रेड होता है - पोस्टमास्टर न पहुंचने योग्य होता है, लेकिन डेटा फ़ोल्डर और सेवा पर अनुमतियां गायब हो सकती हैं। pg_resetxlog पहली समस्या हल करता है। – MytyMyky

+0

यह लिनक्स पर अविश्वसनीय अधिभारित स्टोरेज उपप्रणाली के साथ भी हो सकता है। –

0

पुनरारंभ करने के बजाय प्रारंभ करें। नीचे आदेश निष्पादित करें:

$pg_ctl -D /usr/local/pgsql/data start 
+0

मुझे ऐसा ही त्रुटि मिलती है जब मैं ऐसा करता हूं। – student001

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

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