2015-04-15 13 views
14

से डेटाबेस pg_dump पोस्टग्रेज़ डेटाबेस मैं अपने DMZ में रिमोट सर्वर पर एक SQL डेटाबेस pg_dump करने की कोशिश कर रहा हूं। 2 समस्याएं हैं।रिमोट सर्वर

1) रिमोट सर्वर पर बहुत सी जगह नहीं छोड़ी गई है, इसलिए स्थानीय कमांड स्थानीय स्तर पर बैकअप डेटाबेस pg_dump -C database > sqldatabase.sql.bak अंतरिक्ष समस्याओं के कारण काम नहीं करेगा।

2) मैं भी pg_dump आदेश के अन्य संस्करण का उपयोग कर स्थानीय सर्वर से दूरस्थ सर्वर से डेटाबेस डंप करने के लिए नहीं चल सकते:

pg_dump -C -h remotehost -U remoteuser db_name | psql localhost -U localuser db_name 

के रूप में सर्वर हमारे DMZ में है और पोर्ट 5432 अवरुद्ध है। जो मैं देख रहा हूं वह यह है कि यदि डेटाबेस को pg_dump करना संभव है और इसे दूरस्थ रूप से फ़ाइल (एसएसएच या कुछ अन्य रूप) को दूरस्थ सर्वर पर फ़ाइल के रूप में सहेजना संभव है। मैं जो कोशिश कर रहा था वह था: pg_dump -C testdb | ssh [email protected] | > /home/admin/testdb.sql.bak

क्या कोई जानता है कि मैं जो हासिल करने की कोशिश कर रहा हूं वह संभव है?

+0

[अपरीक्षित] (1) एक netcat श्रोता ** अपने स्थानीय मशीन पर ** (एक portnumber कि उपयोग में नहीं है या अवरुद्ध उपयोग करते हुए) को सेट करें, जैसे 'netcat -l -p 1234> चोरी और '। (2) ** रिमोट मशीन ** से **, करें: 'pg_dump ... | netcat your.local.ip 1234' – wildplasser

उत्तर

31

आप अपने रिमोट सर्वर से एसएसएच के साथ कनेक्ट कर सकते हैं, pg_dump कॉल को कनेक्ट करने के साथ करें और आउटपुट को स्थानीय मशीन के stdout पर भेजें।

ssh [email protected]_machine "pg_dump -U dbuser -h localhost -C --column-inserts" \ 
>> backup_file_on_your_local_machine.sql 

संपादित करें: एक टाइपो तय करें।

+0

यह मेरे नेटकैट हैक से बहुत आसान है। – wildplasser

+0

आपकी समस्या को हल करने के लिए आपको बहुत बहुत धन्यवाद, क्या नौकरी मैं खो रहा था \ 0 सभी –

2

एक संभावित समाधान - एसएसएच के माध्यम से पाइप का उल्लेख किया गया है।

आप अपने डीबी सर्वर को सार्वजनिक इनसेट पते पर भी सुन सकते हैं, अपनी बैकअप मशीन के लिए pg_hba.conf पर होस्टस्ल एंट्री जोड़ें, शायद सुरक्षा के लिए क्लाइंट प्रमाणपत्र कॉन्फ़िगर करें, और फिर क्लाइंट/बैकअप पर डंप चलाएं मशीन pg_dump -h dbserver.example.com ...

यह अप्रयुक्त बैकअप के लिए आसान है।

कनेक्शन (एसएसएलएमओडी) की कॉन्फ़िगरेशन के लिए the supported environment variables भी देखें।

+0

पूरे आदेश को दिखाने में मददगार होगा, क्योंकि मैं समझ नहीं पा रहा हूं कि आप इस तरह लक्ष्य मशीन को कैसे पुनर्स्थापित कर सकते हैं (बेशक आप पहले डंप कर सकते हैं और फिर पुनर्स्थापित कर सकते हैं लेकिन यह प्रश्न में फिट नहीं है) –

+0

क्षमा करें मेरे पास कोई साधारण कमांड उदाहरण नहीं है, मेरा सेटअप एसएसएच (एसएसपी पाइप विकल्प के लिए) और सर्विस नामों के साथ psql के लिए विन्यास फाइलों के साथ काफी विकसित हुआ है कनेक्ट करने के लिए। आदेश समस्या है? आपको बस होस्ट नाम को होस्ट लाइन में जोड़ना होगा। मुझे लगता है कि समस्या/कार्य सर्वर पर टीएलएस का सेटअप है! एक बार ऐसा करने के बाद, यह केवल सादे कमांड लाइन psql और pg_dump है जो मेजबाननाम से स्थानीयहोस्ट से अलग है। –

0

आप इस तरह अपने स्थानीय मशीन में एक फाइल करने के लिए तालिका का हिस्सा डंप करने के लिए कोशिश कर सकते हैं (अपने स्थानीय मशीन psql स्थापित किया है मान):

psql -h ${db_host} -p 5432 -U ${db_user} -d ${db_name} \ 
-c "\copy (SELECT * FROM my_table LIMIT 10000) to 'some_local_file.csv' csv;" 

और तुम बाद में एक और डाटाबेस में निर्यात की गई CSV आयात कर सकते हैं इस तरह:

COPY my_table FROM '/path/to/some_local_file.csv' WITH (FORMAT csv); 
संबंधित मुद्दे