PostgreSQL 9.1 हॉट बैकअप त्रुटि: डेटाबेस सिस्टम शुरू हो रहा है


16

मैं थोड़ी देर के लिए Postgres 9.1 के लिए एक हॉट बैकअप पर काम कर रहा हूं और एक सुसंगत मुद्दे में चला गया हूं। पुनरारंभ करने के बाद दास सर्वर पर pgstartup लॉग फ़ाइल और pg_log निर्देशिका के तहत दैनिक लॉग फ़ाइल कोई त्रुटि के साथ पढ़ता है। हालाँकि, जब मैं psql कमांड का उपयोग करके डेटाबेस में प्रवेश करने का प्रयास करता हूं, तो मुझे त्रुटि मिलती है:

FATAL: डेटाबेस सिस्टम शुरू हो रहा है।

पुनर्प्राप्ति .conf फ़ाइल भी Recovery.done की ओर नहीं मुड़ती है। मैंने इस त्रुटि पर बड़े पैमाने पर शोध किया है और लगातार एक ही प्रतिक्रिया पा रहा हूं: इससे पहले कि मैंने पोस्टग्रेज को फिर से शुरू करने की कोशिश की, डेटाबेस को साफ-साफ बंद नहीं किया गया। मेरे द्वारा पोस्टग्रेज को फिर से शुरू करने का एकमात्र तरीका service postgresql-9.1 restartया /etc/init.d/postgresql-9.1 restartकमांड्स है। यह त्रुटि प्राप्त करने के बाद, मैं सभी प्रक्रियाओं को मारता हूं और फिर से डेटाबेस को पुनरारंभ करने का प्रयास करता हूं और फिर भी वही त्रुटि प्राप्त करता हूं। मुझे इस बात का नुकसान है कि यहां से कहां जाना है और इस मुद्दे को कैसे ठीक करना है। नीचे सटीक प्रक्रिया है जो मैंने हॉट बैकअप को पूरा करने के लिए की है।

मास्टर सर्वर विन्यास:

pg_hba.conf, ने रेखा जोड़ी:

होस्ट प्रतिकृति IPAddressOfSlaveServer ट्रस्ट पोस्टग्रैट्स करती है

postgresql.conf:

wal_level = hot_standby
max_wal_senders = 5
सुन_दादरी = '*'
port = 5432
max_wal_senders = 5
wal_keep_seolution = 32

गुलाम सर्वर विन्यास:

postgresql.conf:

hot_standby = on

recovery.conf:

स्टैंडबाय_मोड = पर
Primary_conninfo = host = IPAddressOfMasterServer
port = 5432
उपयोगकर्ता = पोस्टग्रेट्स
पुनर्स्थापना_काँड = 'cp /var/lib/pgsql/9.1/data/pg_xlog/%f "% p"'

दोनों सर्वरों को कॉन्फ़िगर करने के बाद

मैं मास्टर सर्वर पर उपयोगकर्ता को पोस्टग्रेज करता हूं और कमांड चलाता हूं:

psql -c "pg_start_backup ('लेबल', सही) का चयन करें;";
rsync -a -v -e ssh /var/lib/pgsql/9.1/data दास: /var/lib/pgsql/9.1/data \
        --exclude postmaster.pid
pgsql -c "pg_stop_backup ();" चुनें;

गुलाम सर्वर के साथ डेटाबेस सिंक करने के बाद

मैं दास सर्वर को पुनरारंभ करता हूं और स्टार्ट अप विफल नहीं होता है। Pgstartup.log पढ़ता है:

सफलता। अब आप डेटाबेस सर्वर का उपयोग शुरू कर सकते हैं:

    /usr/pgsql-9.1/bin/postgres -D /var/lib/pgsql/9.1/data
या
    /usr/pgsql/9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l logfile प्रारंभ

वर्तमान दिन लॉग फ़ाइल, postgresql-Thu.log, पढ़ता है:

लॉग: शट डाउन करना
लॉग: डेटाबेस सिस्टम बंद है
लॉग: 2012-4-10 में पुनर्प्राप्ति में डेटाबेस सिस्टम बंद हो गया था
लॉग: स्टैंडबाय मोड में प्रवेश करना
लॉग: संग्रह से लॉग फ़ाइल "logFileName" को पुनर्स्थापित किया
लॉग: लगातार रिकवरी स्टेट 0 / BF0000B0 पर पहुंचा
लॉग: redo 0 / BF000020 से शुरू होता है
लॉग: संग्रह से लॉग फ़ाइल "logFileName" को पुनर्स्थापित किया
लॉग करें: लॉग फ़ाइल 0, सेगमेंट 192, ऑफ़सेट 0 में अप्रत्याशित पगड्रे 0/85000000
लॉग करें: लॉग फ़ाइल 0, सेगमेंट 192, ऑफ़सेट 0 में अप्रत्याशित पगड्रे 0/85000000
लॉग: स्ट्रीमिंग प्रतिकृति सफलतापूर्वक प्राथमिक से जुड़ी

मैंने अप्रत्याशित पगडंड पर शोध किया और पोस्ट आर्काइव्स से, यह मेरी समझ है कि यह काफी सामान्य है और एंड-ऑफ-वाल का पता लगाने के लिए अपेक्षित तरीकों में से एक है।

किसी भी सलाह की काफी सराहना की जाएगी।

जवाबों:


11

संदेश "डेटाबेस सिस्टम शुरू हो रहा है।" कोई त्रुटि नहीं दिखाता है। FATAL स्तर पर इसका कारण यह है कि यह हमेशा लॉग में बना रहेगा, इसकी सेटिंग की परवाह किए बिना log_min_messages:

http://www.postgresql.org/docs/9.1/interactive/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-WHEN

Rsync के बाद, क्या आपने वास्तव में वही दिखाया जो आप दिखाते हैं? "

pgsql -c "pg_stop_backup ();" चुनें;

चूँकि, अब तक मुझे पता है, कोई pgsqlनिष्पादन योग्य नहीं , जो बैकअप को अधूरा छोड़ देगा, और दास कभी भी पुनर्प्राप्ति मोड से बाहर नहीं आएगा। दूसरी ओर, हो सकता है कि आप वास्तव में चले psql, क्योंकि अन्यथा मैं यह नहीं देखता कि गुलाम ने इस तरह के सफलता के संदेश कैसे लॉग किए होंगे:

लॉग: लगातार रिकवरी स्टेट 0 / BF0000B0 पर पहुंचा

तथा:

लॉग: स्ट्रीमिंग प्रतिकृति सफलतापूर्वक प्राथमिक से जुड़ी

क्या आपने इस बिंदु पर गुलाम से जुड़ने की कोशिश की? क्या हुआ?

"सफलता। अब आप शुरू कर सकते हैं ..." आपके द्वारा उल्लिखित संदेश से उत्पन्न होता है initdb, जिसे दास की स्थापना के भाग के रूप में नहीं चलाया जाना चाहिए; इसलिए मुझे लगता है कि आप वहाँ कुछ के बारे में भ्रमित हो सकते हैं। मैं इन जाहिरा तौर पर परस्पर विरोधी बयानों से भी चिंतित हूँ:

पोस्टग्रेज को फिर से शुरू करने का एकमात्र तरीका सेवा पोस्टग्रैक्स्ल-9.1 रीस्टार्ट या /etc/init.d/postgresql-9.1 रीस्टार्ट कमांड है। यह त्रुटि प्राप्त करने के बाद, मैं सभी प्रक्रियाओं को मारता हूं और फिर से डेटाबेस को पुनः आरंभ करने का प्रयास करता हूं ...

क्या आपने सेवा स्क्रिप्ट के माध्यम से सेवा को रोकने की कोशिश की? क्या हुआ? यदि आप अधिक जानकारी के साथ लाइनों को उपसर्ग करते हैं, तो यह लॉग को समझने में मदद कर सकता है। हम प्रयोग करते हैं:

log_line_prefix = '[%m] %p %q<%u %d %r> '

recovery.confस्क्रिप्ट अजीब लग रहा है। क्या आप मास्टर की pg_xlog निर्देशिका, दास की सक्रिय pg_xlog निर्देशिका, या संग्रह निर्देशिका से प्रतिलिपि बना रहे हैं?


8

इसके साथ मेरे कुछ मुद्दे भी थे, सिवाय इसके कि मैं 9.3 पर था, 9.1 नहीं। वैसे भी, सुधार काफी तुच्छ था:

postgresql.confफ़ाइल दास को स्वामी से कॉपी किया जा रहा था, और मैं इसे दास पर असंशोधित छोड़ने गया था। मैंने सोचा था कि आपको एक recovery.confफ़ाइल जोड़ना होगा और सब कुछ काम करेगा (अच्छी तरह से यह किया था, लेकिन मैं प्रतिकृति दास सर्वर में लॉग इन नहीं कर सकता था, लेकिन, इसे दोहराया जा रहा था)।

मैंने दास की postgresql.confफ़ाइल संपादित की और:

  • टिप्पणी की archive_mode=on
  • archiveकमांड बाहर टिप्पणी की ; तथा
  • टिप्पणी की गई hot_standby=on

उसने ऐसा किया: मैं डेटाबेस को केवल रीड क्वेरी स्वीकार करने के लिए तैयार रीड सर्वर के रूप में प्राप्त करने में सक्षम था।

एक स्क्रिप्ट है pg_basebackup, जो दास के लिए बूटस्ट्रैप निर्देशिका बनाएगी। यह डेटाबेस में डेटा निर्देशिका है। आपको postgresql.confफ़ाइल को संशोधित करने से पहले इसे दास के रूप में उपयोग किया जा सकता है, पोस्ट pg_basebackupस्क्रिप्ट के लिए कुछ सरल ।


1
जब आप "hot_standby पर टिप्पणी करते हैं" = "I presume you mean" पर "# -comment-mark को हटाते हैं" इससे पहले, वास्तव में hot_standby को सक्षम करें ":) अगर hot_standby में नहीं है, तो db हमेशा डिज़ाइन द्वारा" स्टार्ट अप "होगा (यह गर्म है स्टैंडबाय, फेल-ओवर के लिए तैयार, लेकिन क्वेरी नहीं)। ध्यान दें, यदि आपने मास्टर पर wal_level = hot_standby के बिना आधार-बैकअप डंप बनाया है और फिर hot_stanby को गुलाम पर बदल दिया है, तो आपको उठने और दौड़ने के लिए हॉट-डस्टबी पर दास db को फिर से डंप करना होगा। अन्यथा आपको कुछ घातक त्रुटियां मिलेंगी।
फ्रेडरिक स्ट्रक-शोइंग

hot_standby = on की आवश्यकता है, यह वहां होना चाहिए
अभिलाष मिश्रा

7

दिलचस्प बात यह है कि मैंने पॉल द्वारा किए गए विपरीत तरीके से इसे हल किया।

मैंने कहा:

hot_standby = on

या, बल्कि, #hot_standby = offऊपर बदल गया है। (यह 9.5 का उपयोग कर रहा था)


1

मुझे यह लॉग में मिला है:

MSK FATAL:  the database system is starting up

सर्वर की अनंत शुरुआत को ठीक करने के लिए: स्टॉप सर्विस (यदि मौजूद है), मार प्रक्रिया 'पोस्टग्रेज' (आमतौर पर यह मौजूद है)। इसे कंसोल में चलाएं:

pg_resetxlog.exe -D ../Data -f

यह दृश्य इसलिए प्रकट होता है क्योंकि xLog निर्देशिका में एक डेटा होता है, जिसे सेवा बंद करने से पहले नहीं लिखा जाना चाहिए। और फिर सर्विस स्टार्टअप पर वह उस डेटा को ठीक करने की कोशिश करता है। कभी-कभी यह स्टार्टअप को फ्रीज कर देता है और कभी समाप्त नहीं होता है .. इस कमांड को इस अनफिक्स डेटा को क्लीन करें, जो कि केवल निश्चित डेटा के साथ शुरू करने के लिए सेवा को लागू करता है। हो सकता है कि अनफिक्स किए गए डेटा का कुछ हिस्सा खो जाए, लेकिन डेटाबेस सर्वर सामान्य रूप से चलेगा और इसे ऐप्स द्वारा एक्सेस किया जा सकता है।

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