2009-08-03 8 views
7

मेरे पास एक स्क्रिप्ट है जो mysql के लिए दैनिक घूर्णन बैकअप का उत्पादन करेगी, लेकिन मुझे पोस्टग्रेज़ के लिए कुछ भी नहीं मिल रहा है। मैंने यह भी पाया है कि इसमें ऑनलाइन बैकअप क्षमता है, जो काम में आनी चाहिए क्योंकि यह एक उत्पादन स्थल है।क्या कोई पोस्टग्रेस डेटाबेस का बैक अप लेने के लिए एक अच्छा तरीका जानता है?

क्या किसी को किसी प्रोग्राम/स्क्रिप्ट के बारे में पता है जो मेरी मदद करेगा, या यहां तक ​​कि ऐसा करने का एक तरीका भी है?

धन्यवाद।

उत्तर

18

एक फ्लैट एसक्यूएल डंप उत्पन्न करने के लिए usepg_dump का एक तरीका है, जिसे आप gzip या जो कुछ भी कर सकते हैं। यह निश्चित रूप से सबसे आसान विकल्प है, क्योंकि परिणामों को डेटाबेस को फिर से लोड करने के लिए psql में वापस पाइप किया जा सकता है, और चूंकि यह सादे पाठ के रूप में भी निर्यात कर सकता है, यदि आवश्यक हो तो पुनर्स्थापित करने से पहले आप डेटा को देख या संपादित कर सकते हैं।

अगली विधि अस्थायी रूप से अपने डेटाबेस को बंद करने के लिए है (या अपने फाइल सिस्टम परमाणु स्नैपशॉट, सिद्धांत रूप में काम कर सकते हैं कि समर्थन करता है) और backup अपने PostgreSQL data निर्देशिका।

This पोस्टग्रेएसक्यूएल साइट से पृष्ठ यह भी बताता है कि ऑनलाइन बैकअप और पॉइंट-इन-टाइम रिकवरी कैसे करें, जो निश्चित रूप से कॉन्फ़िगर करना सबसे कठिन है, लेकिन इष्टतम विधि भी है। विचार यह है कि आप कुछ विशेष एसक्यूएल (pg_start_backup और pg_stop_backup) चलाकर बेस बैकअप (जो आप हर दिन, कुछ दिन या सप्ताह कर सकते हैं) कर सकते हैं और अपनी डेटाबेस निर्देशिका की एक (फाइल सिस्टम-स्तर) प्रतिलिपि बना सकते हैं। डेटाबेस इस समय के दौरान ऑफ़लाइन नहीं जाता है, और सबकुछ अभी भी सामान्य के रूप में काम करता है। तब से, डेटाबेस किसी भी बदलाव के एक लिखें आगे लॉग (वाल) उत्पन्न करता है, जिसे तब भी धक्का दिया जा सकता है (स्वचालित रूप से, डेटाबेस द्वारा) जहां भी आप चाहते हैं। पुनर्स्थापित करने के लिए, आप बेस बैकअप लेते हैं, इसे किसी अन्य डेटाबेस इंस्टेंस में लोड करते हैं, फिर बस सभी WAL फ़ाइलों को फिर से चलाएं। इस तरह आप सभी लॉग को दोबारा नहीं चलाकर पॉइंट-इन-टाइम वसूली भी कर सकते हैं।

+0

परमाणु स्नैपशॉट का उपयोग सिर्फ "सिद्धांत रूप में काम कर सकते हैं" यह नहीं है कि बैकअप

pg_restore -v -d newdb_name db_dump_file.dump 

पढ़ें पुनर्स्थापित करने के लिए। यह पूरी तरह से ठीक काम करता है। लेकिन उन्हें * सभी * फाइल सिस्टमों पर परमाणु होने की आवश्यकता है जो PostgreSQL के पास pg_xlog निर्देशिका सहित डेटा है। –

+0

मैं आमतौर पर अपने बैकअप करने के लिए pg_dump का उपयोग करता हूं, लेकिन मैं एक पूर्ण समाधान की तलाश में था जो घुमावदार बैकअप बनाने के लिए pg_dump का उपयोग करता था, जैसे http://sourceforge.net/projects/automysqlbackup/। यदि स्क्रिप्ट ऑनलाइन बैकअप का उपयोग करती है तो यह बेहतर होगा, लेकिन मुझे लगता है कि इसे स्वयं करना मुश्किल नहीं होगा और इसे लॉन्चपैड या कहीं पर रखना मुश्किल नहीं होगा। आपके उत्तर के लिए धन्यवाद। –

+1

सार्वजनिक कुंजी/पासवर्ड एन्क्रिप्शन, रोटेशन, और एस 3 पर अपलोड के साथ pg_dump बैकअप करने के स्वचालित तरीके से सुरक्षित जांचें: http://github.com/astrails/safe –

1

आप phpPgAdmin या pgAdmin III का उपयोग करके अपने PostgreSQL डेटाबेस को भी डंप कर सकते हैं।

2

आम तौर पर बैकअप करने का तरीका pg_dump का उपयोग करना है।

आपको "mysql की तरह पोस्टग्रेस्क्ल निर्देशिका से फ़ाइलें कॉपी नहीं करना चाहिए" - क्योंकि संभावना है कि आप उनका उपयोग करने में सक्षम नहीं होंगे (ये फ़ाइलें आर्किटेक्चर, ऑपरेटिंग सिस्टम और संकलन-विकल्प निर्भर हैं)।

जब तक pg_dump प्रमाणित अपर्याप्त होने के लिए - यह वही है जो आपको उपयोग करना चाहिए। आप स्थिति में होंगे कि pg_dump का उपयोग नहीं किया जा सकता है - आपको खुद से पूछना चाहिए: इसका उपयोग क्यों नहीं किया जा सकता है, और आप इसे फिर से उपयोग करने के लिए क्या कर सकते हैं :)

जब आप pg_dump का उपयोग करते हैं तो आप सादे SQL फ़ाइल डंप चुन सकते हैं (-एफ पी), या कस्टम प्रारूप (-एफ सी)। एसक्यूएल डंप को संशोधित/बदलने के लिए आसान है, लेकिन कस्टम प्रारूप अधिक शक्तिशाली है, और (8.4 से) तेजी से लोड करने के लिए, क्योंकि आप इसे अनुक्रमिक रूप से कई समांतर श्रमिकों में लोड कर सकते हैं।

3

दोनों MySQL और Postrgres के स्वचालित बैकअप के लिए बाहर की जाँच astrails-safe on github (या बस "gem install astrails-safe --source=http://gems.github.com")। बैकअप पोस्टग्रेज़ में MySQL और pg_dump बैकअप के लिए mysqldump का उपयोग करता है। यह भी जानता है कि टैर के साथ सादे फाइलों को बैकअप कैसे लें और जीएनयूपीजी के साथ सबकुछ एन्क्रिप्ट करें और S3 पर अपलोड करें, या SFTP के साथ कोई यूनिक्स सर्वर।

2

चूंकि आपने डेटाबेस निर्दिष्ट किया है, pg_dumpall आपके लिए कहीं अधिक उपयोगी होगा। यह सभी डेटाबेस और उपयोगकर्ताओं को केवल एक ही के बजाय एक एसक्यूएल फ़ाइल में डंप करता है।

1

मैं सिर्फ इस छोटे से साफ उपयोगिता पर ठोकर खाई है:

http://code.google.com/p/pg-rman/

प्रलेखन यह होनहार लग रहा है से, लेकिन मैं अभी तक यह कोशिश करनी होगी।

0

यह crontab द्वारा बैकअप PostgreSQL के लिए उपयोग कर सकते हैं मैं बैकअप मेरे पुराने डेटाबेस के लिए करते हैं और बहाल होगा क्या है

अपने डेटाबेस का बैक अप लेने के लिए

pg_dump --format=c olddb_name > db_dump_file.dump 

के बारे में अधिक pg_dump और pg_restore

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

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