HDD क्रैश के बाद PostgreSQL सर्वर शुरू करने में विफल रहता है


10

के Fedora 15साथ उपयोग कर रहा हूं PostgreSQL 9.1.4। हाल ही में दुर्घटनाग्रस्त होने के बाद फेडोरा:

PostgreSQL सर्वर शुरू करने का प्रयास:

service postgresql-9.1 start

देता है

Starting postgresql-9.1 (via systemctl):  Job failed. See system logs and 'systemctl status' for details.
                                                       [FAILED]

हालाँकि, सर्वर सामान्य रूप से तब शुरू होता है जब मैं सिस्टम रिबूट के बाद पहली बार सर्वर शुरू करता हूं
लेकिन, उपयोग करने का प्रयास psqlयह त्रुटि देता है:

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

.s.PGSQL.5432फ़ाइल सिस्टम पर कहीं भी मौजूद नहीं है। एक locate .s.PGSQL.5432आउटपुट कुछ नहीं।


सिस्टम लॉग में यह है:

Aug 14 17:31:58 localhost systemd[1]: postgresql-9.1.service: control process exited, code=exited status=1
Aug 14 17:31:58 localhost systemd[1]: Unit postgresql-9.1.service entered failed state.

systemctl status postgresql-9.1.service

देता है

postgresql-9.1.service - SYSV: PostgreSQL database server.
          Loaded: loaded (/etc/rc.d/init.d/postgresql-9.1)
      Active: failed since Tue, 14 Aug 2012 17:31:58 +0530; 58s ago
     Process: 2811 ExecStop=/etc/rc.d/init.d/postgresql-9.1 stop (code=exited, status=1/FAILURE)
     Process: 12423 ExecStart=/etc/rc.d/init.d/postgresql-9.1 start (code=exited, status=1/FAILURE)
    Main PID: 2551 (code=exited, status=1/FAILURE)
      CGroup: name=systemd:/system/postgresql-9.1.service

मैंने fsync की डिफ़ॉल्ट सेटिंग नहीं बदली थी इसलिए मैं अनुमान लगा रहा हूं, यह सेट किया गया था on। मैं एचडीडी पर हूं। HDD दुर्घटनाग्रस्त हो गया।

HDD दुर्घटना

एचडीडी दुर्घटना के परिणामस्वरूप fsckप्रॉम्प्ट पर मैनुअल चलाने के लिए और गुई आधारित नहीं था। इसके साथ गज़िल इनोड्स आदि की मरम्मत करना .. जिसके बाद मैंने सिस्टम को Ctrl+ Alt+ के साथ फिर से शुरू किया Delete

PostgreSQL के लॉग में यह है:

LOG:  database system was interrupted; last known up at 2012-08-14 17:31:57 IST
LOG:  database system was not properly shut down; automatic recovery in progress
LOG:  record with zero length at 0/41A4E58
LOG:  redo is not required
FATAL:  could not access status of transaction 1
DETAIL:  Could not open file "pg_multixact/offsets/0000": No such file or directory.
LOG:  startup process (PID 13016) exited with exit code 1
LOG:  aborting startup due to startup process failure

अपडेट करें

फ़ाइल सिस्टम स्तर /var/lib/pgsqlनिर्देशिका की प्रतिलिपि लेने के बाद सर्वर को शुरू करने की कोशिश कर रहा है , और ./pg_resetxlog -f /var/lib/pgsql/9.1/data/परिणाम xlog -f /var/lib/pgsql/9.1/data/अभी भी पैदावार के साथ चल रहा है:

LOG:  database system was interrupted; last known up at 2012-08-14 18:46:36 IST
LOG:  database system was not properly shut down; automatic recovery in progress
LOG:  record with zero length at 0/6000078
LOG:  redo is not required
FATAL:  could not access status of transaction 1
DETAIL:  Could not open file "pg_multixact/offsets/0000": No such file or directory.
LOG:  startup process (PID 13766) exited with exit code 1
LOG:  aborting startup due to startup process failure

और पोस्टग्रेज का लॉग?
मिलीन ए। राडदेव १४'१२

@ MilenA.Radev ने पोस्टग्रेज के लॉग के साथ सवाल को अपडेट किया है ..
ThinkingMonkey

pg_resetxlogकिसी भी अच्छा नहीं किया, तो आप मज़ा क्षेत्र में हैं। क्या आपके पास क्रैश से पहले इस डेटाबेस का बैकअप है?
क्रेग रिंगर

@ क्रैगरिंगर हां, मेरा बैक-अप है। मैं वास्तव में इस सवारी का आनंद ले रहा हूं।
सोच विचार

@ThinkingMonkey बहुत बढ़िया! आप अच्छे बैकअप के साथ कुछ चुनिंदा :-) में से एक हैं। ईमानदारी से, यह संभव है कि आपका डीबी मरम्मत योग्य है, लेकिन चूंकि आपकी फाइल सिस्टम भ्रष्टाचार ने महत्वपूर्ण फाइलों को नष्ट कर दिया है, तो आपको शायद किसी ऐसे व्यक्ति की आवश्यकता होगी जो आपके डेटा को प्राप्त करने में कुछ समय बिताने के लिए पीजी के हिम्मत को अच्छी तरह से जानता है। सेवाएं यहां उपलब्ध हैं: postgresql.org/support/professional_support। हो सकता है कि अगर आप pg_multixact/offsets/0000उस पीजी के लिए कुछ डमी सामग्री के साथ आ सकते हैं ...
क्रेग रिंगर

जवाबों:


15

असली जवाब PostgreSQL लॉग इन में होगा /var/lib/pgsql/data/pg_log

हालाँकि, इससे पहले कि आप कोई कार्रवाई करें: यह महत्वपूर्ण है कि आप मरम्मत का प्रयास करने से पहले अपने डेटाबेस की एक फ़ाइल सिस्टम स्तर की प्रतिलिपि ले लें, यदि आपका कोई डेटा आपके लिए मूल्यवान हैHttp://wiki.postgresql.org/wiki/Corruption देखें । आपको संपूर्ण डेटा निर्देशिका को कॉपी करना होगा। फेडोरा पर यह /var/lib/pgsql/dataडिफ़ॉल्ट रूप से है, लेकिन सत्यापित करें कि यह आपके इंस्टॉल के लिए सही है।

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

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

यदि आप अभी भी इसे pg_resetxlogफिर से शुरू नहीं कर सकते हैं, तो रीसेट प्रयास के बाद स्टार्टअप प्रयास का एक अद्यतन लॉग पोस्ट करें। यह संभव है कि आपको Pg को स्टैंड-अलोन मोड में शुरू करना होगा:

sudo -u postgres postgres --single -D /var/lib/pgsql/data -P -f i postgres

यदि वह काम करता है, तो आपको एक backend>संकेत देते हुए, अंतिम "पोस्टग्रेज" को उस DB के नाम से बदलने के बाद दोबारा प्रयास करें , जिससे आप कनेक्ट करना चाहते हैं। आप सक्षम होना चाहिए SELECT, COPYतालिकाओं से डेटा, आदि।

अगर वह काम नहीं करता है, यानी आप एक स्टैंडअलोन बैकेंड शुरू नहीं कर सकते हैं, तो संभवत: यह बैकअप से बहाल करने का समय है - क्योंकि आप उन्हें समझने के लिए पर्याप्त समझदार हैं। यदि कोई अन्य व्यक्ति इसे पढ़ रहा है, तो वह उसी स्थिति में है, यह देखने के लिए किसी अनुभवी PostgreSQL सलाहकार से संपर्क करें कि क्या वे आपके डेटाबेस से डेटा पुनर्प्राप्त कर सकते हैं। उनके समय और विशेषज्ञता के लिए भुगतान करने के लिए तैयार रहें।

आपकी फ़ाइल प्रणाली शायद क्षतिग्रस्त है

PostgreSQL इंस्टॉल को नुकसान की गंभीरता से पता चलता है कि आपकी पूरी फ़ाइल सिस्टम संभवतः क्षतिग्रस्त है। आप संपूर्ण सिस्टम को बैकअप से पुनर्स्थापित करने या इसे पुनर्स्थापित करने पर विचार कर सकते हैं।

मुझे इस फाइल सिस्टम पर भरोसा नहीं होगा, fsckया नहीं fsck

अपने ड्राइव को स्मार्ट-परीक्षण करें

मैं यह भी सलाह देता हूं कि आप स्मार्टमोनटूल से SMARTअपनी हार्ड ड्राइव पर एक चेक चलाएं smartctl; यह मानते हुए कि यह /dev/hdaहोगा smartctl -d ata -a /dev/sda | less। एक असफल स्वास्थ्य परीक्षण के लिए देखें uncorrectable_sectors, एक उच्च पढ़ने की त्रुटि दर, 2 या 3 से अधिक की एक reallocated_sector_count, या एक गैर-शून्य current_pending_sector। smartctl -d ata -t long /dev/sdaअपने एचडीडी पर एक गैर-विनाशकारी आत्म परीक्षण निष्पादित करने के लिए चलाएं ; यह सिस्टम के सामान्य कामकाज को बाधित नहीं करेगा। जब अनुमानित समय smartctl -d ata /dev/sdaफिर से चला गया है और स्व परीक्षण लॉग को देखने के लिए देखें कि क्या यह पारित हो गया है।

अगर कुछ भी सही से कम दिखता है, तो ड्राइव को बदलें।

भविष्य में, smartdड्राइव विफलताओं की प्रारंभिक चेतावनी के माध्यम से इस परीक्षण को स्वचालित करने पर विचार करें ।

(इस पोस्ट की सामग्री को प्रश्न के अपडेट के द्वारा बाधित किया गया था। यदि आप इसी तरह की समस्या का निवारण कर रहे हैं, तो इस उत्तर के इतिहास को देखें)।


मैंने प्रश्न में पोस्टग्रेज का लॉग जोड़ा है। मैंने डिफ़ॉल्ट सेटिंग नहीं बदली थी fsyncइसलिए मैं अनुमान लगा रहा हूं, यह सेट किया गया था on। मैं एचडीडी पर हूं। हां, एचडीडी दुर्घटनाग्रस्त हो गया। मैंने डिस्क स्थान से बाहर नहीं भाग लिया है। कोई मेमोरी त्रुटि / ओवरहीट / केबल / केर्पेनिक के ऊपर ट्रिप नहीं हुई।
सोच

@ThinkingMonkey "HDD क्रैश" किस तरह का है? क्या आपको फ़ाइलों को एक नई ड्राइव पर कॉपी करने के लिए हार्ड ड्राइव पर डेटा रिकवरी करनी थी? क्या आपको fsckफ़ाइल सिस्टम की मरम्मत करनी और चलाना था? विवरण, कृपया। अपनी दुर्घटना की कहानी लिखें।
क्रेग रिंगर

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

@ThinkingMonkey ओके, उत्तर अपडेट किया गया। TL; DR: पूर्ण फ़ाइल सिस्टम स्तर की प्रतिलिपि / var / lib / pgsql बनाएं, फिर चलाएंpg_resetxlog
Craig Ringer

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