बैकअप प्रयोजनों के लिए अस्थाई SSH टनल


11

मैं एक दूरस्थ सर्वर पर कई MySQL स्कीमा की सामग्री को स्वचालित रूप से वापस करने के लिए एक शेल स्क्रिप्ट (वर्तमान में bash का उपयोग करके) लिखना चाहूंगा। रिमोट सर्वर केवल एसएसएच एक्सेस की अनुमति देने के लिए बंद है इसलिए मुझे mysqldumpविभिन्न स्कीमाओं के खिलाफ चलने से पहले एसएसएच सुरंग बनाना होगा ।

मैं किसी भी मुद्दे के बिना एक सुरंग बना सकता हूं, हालांकि मैं चाहूंगा कि डेटाबेस डंप पूरा होने के बाद इसे स्वचालित रूप से बंद कर सकूं।

वर्तमान में मेरी स्क्रिप्ट यह कर रही है:

/usr/bin/ssh -T -f -L 4444:127.0.0.1:3306 -l remoteuser 208.77.188.166 sleep 600

/usr/bin/mysqldump --compress -h 127.0.0.1 -P 4444 -u user -ppassword db1 | gzip > /root/backups/snapshot/db1.sql.gz

/usr/bin/mysqldump --compress -h 127.0.0.1 -P 4444 -u user -ppassword db2 | gzip > /root/backups/snapshot/db2.sql.gz

/usr/bin/mysqldump --compress -h 127.0.0.1 -P 4444 -u user -ppassword db3 | gzip > /root/backups/snapshot/db3.sql.gz

जहां कनेक्शन को 600 सेकंड के लिए खुला रखा जाता है, जाहिर है, लेकिन यदि पहले डंप में से एक को इससे अधिक समय लगता है तो अन्य डंप पूरा होने से पहले कनेक्शन बंद हो जाता है। मैं प्रत्येक स्कीमा बैकअप के लिए अलग-अलग फ़ाइलों को बनाए रखना चाहूंगा (इसलिए --databasesअभी के लिए mysqldump से बचना होगा )।

कोई सुझाव?

जवाबों:


29

आपको उस सभी सुरंगों से परेशान होने की आवश्यकता नहीं है :-)।

बस SSH कनेक्शन का उपयोग करके mysqldump को अपना डेटा स्ट्रीम करने दें:

ssh usr@host mysqldump -u dbuser -ppasswd my-database-name >dumpfile

1
मुद्दे को दरकिनार करने के लिए +1। इसके लिए यह आवश्यक है कि mysqldump दूरस्थ होस्ट पर उपलब्ध हो, और मेरा मानना ​​है कि पासवर्ड को दूरस्थ सर्वर प्रक्रिया सूची में दिखाया गया है, लेकिन यह मानते हुए कि उन चीजों में कोई समस्या नहीं है, जो एक बेहतर समाधान की तरह लगता है।
मार्क

3
दूरस्थ सर्वर प्रक्रिया सूची में पासवर्ड के बारे में "मार्क जुला 6 '09 पर 16:34" टिप्पणी के जवाब में (मुझे टिप्पणी जोड़ने के लिए पर्याप्त प्रतिष्ठा नहीं है): आप घर में उपयोगकर्ताओं में एक .my.cnf फ़ाइल बना सकते हैं। दूरस्थ सर्वर पर निर्देशिका और वहां पासवर्ड निर्दिष्ट करें: [क्लाइंट] पासवर्ड = "गुप्त" तो बस mysqldump का उपयोग करें (यहां डेटा ट्रांसफ़र को गति देने के लिए संपीड़न के साथ):$ ssh user@host "mysqldump foobar | gzip -9" | gzip -d > foobar.sql
थॉमस शस्टर

5

-N विकल्प, -f विकल्प और नींद 600 जोड़ें, इससे पृष्ठभूमि में चलने के बिना सुरंग खुल जाएगी। फिर आप कमांड के साथ & चला सकते हैं, PID प्राप्त कर सकते हैं, फिर जॉब्स के पूरा होने के बाद ssh प्रक्रिया को मार सकते हैं।

/usr/bin/ssh -T -L 4444:127.0.0.1:3306 -l remoteuser 208.77.188.166 &
PID=$!
do_stuff
kill $PID

(मैंने इसे बैश के साथ परीक्षण किया है - आपको एक अलग शेल के लिए चीजों को बदलने की आवश्यकता हो सकती है)


4

Sleske के सुझाव पर थोड़ा बदलाव, आप स्थानांतरण से पहले सेक करने के लिए gzip के माध्यम से mysqldump आउटपुट को पाइप कर सकते हैं:

ssh SSH-USER@SERVER mysqldump -u DB-USER -pDB-PASSWORD DB-NAME | gzip -c > DB-NAME.sql.gz

मुझे संदेह है कि स्थानांतरण के बाद तक यह आदेश संपीड़ित नहीं होता है, तो आपको "mysql ..." gzip को उद्धृत करने की आवश्यकता हो सकती है। इसलिए पाइप का दूरस्थ रूप से मूल्यांकन किया जाता है
The Mighty Chris

3

जैसा कि साल्स्के ने कहा, इस विशेष मामले में क्यों परेशान हो? हालांकि सामान्य मामले में एक ssh सुरंग को नियंत्रित करने के लिए एक समाधान है: एक नामित पाइप का उपयोग करें। पहले पाइप को इस तरह बनाएं:

ssh -l remoteuser 208.77.188.166 mkfifo /tmp/PIPO

तब आप सुरंग बनाने के लिए अपने पाइप में लिखते हैं (पाइप को अवरुद्ध):

/usr/bin/ssh -T -f -L 4444:127.0.0.1:3306 -l remoteuser 208.77.188.166 "echo T > /tmp/PIPO"

जब आप सुरंग को बंद करना चाहते हैं, तो बस पाइप को पढ़ें:

ssh -l remoteuser 208.77.188.166 cat /tmp/PIPO

Et voilà!


2

यह मैं इसे कैसे लिखूंगा,

scp backup-db.sh remoteuser@208.77.188.166:/root/backups/
ssh remoteuser@208.77.188.166 exec /root/backups/backup-db.sh

स्क्रिप्ट कहाँ है,

#!/bin/sh
# backup-db.sh
DUMPARGS=--compress -h 127.0.0.1 -P 4444 -u user -ppassword
BACKUP_PATH=/root/backups/snapshot

/usr/bin/mysqldump $DUMPARGS db1 | bzip2 > $BACKUP_PATH/db1.sql.bz2
/usr/bin/mysqldump $DUMPARGS db2 | bzip2 > $BACKUP_PATH/db2.sql.bz2
/usr/bin/mysqldump $DUMPARGS db3 | bzip2 > $BACKUP_PATH/db3.sql.bz2

अंत में, scpआर्क को एक और कमांड के साथ एड किया जा सकता है ।
हां, मैंने पाइप या सुरंग नहीं बनाई।

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