यह गाइड आपको लिनक्स (और अधिकांश *nix ऑपरेटिंग सिस्टम) में ऑटोमेटेड बैकअप बनाने की प्रक्रिया के बारे में चरण-दर-चरण बताएगा।
"समय पर एक टाँका नौ को बचाता है", एक पुरानी कहावत है। कंप्यूटर की दुनिया में हम उस टाँके को बैकअप कहते हैं। एक प्रोडक्शन IT इंफ्रास्ट्रक्चर चलाते समय, यह अनिवार्य है कि हम अपने सर्वर और एप्लिकेशन पर यथासंभव सौ प्रतिशत के करीब अपटाइम प्राप्त करें। जबकि IT इंफ्रास्ट्रक्चर को मजबूत बनाने के कई तरीके हैं, इसे फेल्योर-प्रूफ बनाना असंभव है। इसलिए हम एक प्लान B बनाते हैं।
सर्वर तीन व्यापक परतों से बने होते हैं - हार्डवेयर, ऑपरेटिंग सिस्टम और एप्लिकेशन, और डेटा। हार्डवेयर फेल्योर के मामले में मशीन को नई मशीन से बदलना काफी सरल है। ऑपरेटिंग सिस्टम और एप्लिकेशन इंस्टॉल करना भी अपेक्षाकृत सरल है। वह हिस्सा जिसे बदलना कठिन है, वह है डेटा और कॉन्फ़िगरेशन जो आपके एप्लिकेशन उपयोग करते हैं। फेल्योर के मामले में यह वह हिस्सा है जिसे बदला नहीं जा सकता। इसलिए हम उस डेटा का नियमित आधार पर बैकअप लेते हैं। हम इसका बैकअप इस तरह से लेते हैं कि आपात स्थिति में इसे पुनः प्राप्त करना आसान हो।
मैं आपको एक स्क्रिप्ट लिखने के माध्यम से मार्गदर्शन करूँगा जो आपके लिनक्स सिस्टम पर ऑटोमेटेड दैनिक बैकअप लेती है। इस अभ्यास के लिए मैं एक ऐसे सर्वर का उपयोग करूँगा जो Apache वेब सर्वर, एक MySQL डेटाबेस सर्वर चलाता है, और जिसकी /home पार्टीशन पर एक डायरेक्टरी है जिसमें कुछ डेटा है जिसका बैकअप लेने की आवश्यकता है। हम पिछले दिन के Apache एक्सेस लॉग्स का बैकअप एक अलग बैकअप डायरेक्टरी में भी लेंगे। सबसे पहले, हमें एक डायरेक्टरी बनाने की आवश्यकता है जहाँ हमारे बैकअप रहेंगे। अभ्यास के हिस्से के रूप में मैंने /opt पार्टीशन पर BACKUP नामक एक डायरेक्टरी बनाई है। हम बैकअप को इस डायरेक्टरी में व्यवस्थित करेंगे ताकि प्रत्येक दिन का बैकअप इस तरह बनी डायरेक्टरी में रहे - /opt/BACKUP/YEAR/MONTH/DATE/। इसलिए 11 अगस्त 2008 को बैकअप /opt/BACKUP/2008/08/11/ में जाएँगे। आइए ये डायरेक्टरी बनाएँ। निम्नलिखित कमांड सेट को root उपयोगकर्ता के रूप में चलाएँ।
# mkdir -p /opt/backup/DATA/2008
# cd /opt/backup/DATA/2008
# mkdir 01 02 03 04 05 06 07 08 09 10 11 12
# cd /opt/backup/DATA/
# cp -r 2008 2009
# cd /opt/backup/
# cp -r DATA LOG
इस अंतिम कमांड को जारी करने से पहले नीचे नोट देखें।
# chown -R calvin.calvin /opt/backup
अब हमारे पास बैकअप डायरेक्टरी के दो सेट हैं - एक डेटा के लिए और दूसरा लॉग फाइलों के लिए। बैकअप डायरेक्टरी बन जाने के बाद हम स्क्रिप्ट लिखना शुरू करने के लिए तैयार हैं। नोट: मैं इस लेख में पूरे समय उपयोगकर्ता calvin का उपयोग कर रहा हूँ। कृपया calvin को अपने यूजरनेम से बदलें।
बैकअप स्क्रिप्ट
#####################################################
# CODE BEGINS HERE
#####################################################
#!/bin/bash
# SERVER DATA BACKUP V1.0
#########################
# BACKUP CONFIG
#########################
# महीना, तारीख, और दिन कॉन्फ़िगर करें
YEAR=`date +"%Y"` # 2008
MONTH=`date +"%m"`# 11
DAY=`date +"%d"` # 14
YESTERDAY=`date --date="yesterday" +%Y-%m-%d` # 2008-11-13
YESTERDAY_DATE=`date --date=yesterday +%d` # 13
YESTERDAY_MONTH=`date --date=yesterday +%m` # 11
YESTERDAY_YEAR=`date --date=yesterday +%Y` # 2008
TODAY=`date +%Y-%m-%d` # 2008-11-14
TODAY_DATE=`date +%d` # 14
# बैकअप करने के लिए डायरेक्टरी
DATA_BACKUP_PARENT_DIR=/opt/backup/DATA/ # <-- इसे अपने डेटा बैकअप डिर में बदलें
LOG_BACKUP_PARENT_DIR=/opt/backup/LOG/ # <-- इसे अपने लॉग बैकअप डिर में बदलें
# Apache Document Root डायरेक्टरी
APACHE_DOCROOT=/var/www/html/
# MySQL डेटाबेस कॉन्फ़िगरेशन
DB_IP="localhost" # <-- इसे अपने डेटाबेस सर्वर के IP में बदलें
DB_USER="calvin" # <-- इसे अपने डेटाबेस यूजरनेम में बदलें
DB_PASS="calvin_password" # <-- इसे अपने डेटाबेस पासवर्ड में बदलें
DB_NAME="clientlist" # <-- इसे अपने डेटाबेस नाम में बदलें
# Apache लॉग डिर
APACHE_LOG_DIR="/var/log/httpd/" # <-- इसे अपने लॉग के पथ में बदलें
# एप्लिकेशन फाइलों की डिर
APP_FILES="/home/calvin/application_files/" # <-- इसे डेटा डायरेक्टरी के पथ में बदलें
# कॉन्फ़िगरेशन डिर
CONFIG_DIR="/etc/" # <-- इसे डेटा डायरेक्टरी के पथ में बदलें
# मेल रिपोर्ट पता
EMAIL_ID="you@youremailid.com" # <-- इसे अपनी ईमेल आईडी में बदलें
#####################################################
# DATA BACKUP
#####################################################
# बैकअप डायरेक्टरी बनाएँ और उसमें जाएँ
cd $DATA_BACKUP_PARENT_DIR/$YEAR/$MONTH
mkdir $DAY
cd $DAY
# डेटाबेस बैकअप
mysqldump -h ${DB_IP} -u ${DB_USER} -p${DB_PASS} ${DB_NAME} > ${DB_NAME}.db
tar -zcvf ${DB_NAME}.tar.gz ${DB_NAME}.db
rm -f ${DB_NAME}.db
# /etc बैकअप
tar -zcf etc.tar.gz /etc
# एप्लिकेशन बैकअप
tar -zcf Apache_Doc_Root.tar.gz ${APACHE_DOCROOT}
tar -zcf App_Files.tar.gz ${APP_FILES}
#####################################################
# LOG BACKUP
#####################################################
# बैकअप डायरेक्टरी बनाएँ और उसमें जाएँ
cd $LOG_BACKUP_PARENT_DIR/$YESTERDAY_YEAR/$YESTERDAY_MONTH
mkdir $YESTERDAY_DATE
cd $YESTERDAY_DATE
# HTTPD लॉग बैकअप
for i in ${APACHE_LOG_DIR}/access_log.${YESTERDAY}*; do cp $i .; done
for i in access_log.${YESTERDAY}*; do gzip $i; done
#####################################################
# मेल नोटिफिकेशन भेजें
#####################################################
# मेल नोटिफाई
du -shc $DATA_BACKUP_PARENT_DIR/$YEAR/$MONTH/$DAY/* | mail -s "Backup for ${HOSTNAME}::DATA done :)" ${EMAIL_ID}
du -shc $LOG_BACKUP_PARENT_DIR/$YESTERDAY_YEAR/$YESTERDAY_MONTH/$YESTERDAY_DATE/* | mail -s "Backup for ${HOSTNAME}::LOG done :)" ${EMAIL_ID}
#####################################################
# CODE ENDS HERE
#####################################################
इस स्क्रिप्ट को /home/calvin/scripts/backup.sh जैसे डायरेक्टरी में सेव करें। फ़ाइल को एक्जीक्यूटेबल परमिशन दें:
# chmod +x /home/calvin/scripts/backup.sh
अब आप जाने के लिए तैयार हैं। कमांड लाइन से स्क्रिप्ट चलाएँ:
# /home/calvin/scripts/backup.sh
आप इस स्क्रिप्ट को वैकल्पिक रूप से एक क्रॉन जॉब के रूप में जोड़ सकते हैं ताकि यह आपकी पसंद के समय पर दैनिक आधार पर एक्जीक्यूट हो। यदि आप इस स्क्रिप्ट को रोजाना सुबह 4 बजे चलाना चाहते हैं तो निम्नलिखित करें:
# crontab -e
खुलने वाली फ़ाइल में एक नई लाइन बनाएँ और निम्नलिखित जोड़ें:
0 4 * * * /home/calvin/scripts/backup.sh > /dev/null
बस हो गया। आपका सर्वर अब हर दिन सुबह 4 बजे आपके डेटा, डेटाबेस, कॉन्फ़िगरेशन फाइलों, एप्लिकेशन फाइलों, और लॉग फाइलों का बैकअप /opt/backup में लेगा - पूरी तरह से ऑटोमेटेड लिनक्स बैकअप! एक बेहतरीन अगला कदम उन्हें एन्क्रिप्ट करना होगा :)
आधुनिक सुधार
- rsync या restic/borg जैसे आधुनिक बैकअप टूल का उपयोग करें जो डिडुप्लिकेशन, एन्क्रिप्शन, और क्लाउड स्टोरेज सपोर्ट प्रदान करते हैं।
- सिस्टमड टाइमर्स (systemd timers) क्रॉन की तुलना में अधिक मजबूत शेड्यूलिंग प्रदान करते हैं।
- डेटाबेस बैकअप के लिए
mysqldumpके बजायmariabackup(MariaDB) याxtrabackup(MySQL/Percona) का उपयोग करें ताकि हॉट बैकअप संभव हो। - बैकअप को ऑफ-साइट (जैसे S3, Backblaze B2, या किसी अन्य सर्वर पर) कॉपी करने पर विचार करें।