এই গাইড আপনাকে ধাপে ধাপে লিনাক্স (এবং অধিকাংশ *nix অপারেটিং সিস্টেম)-এ স্বয়ংক্রিয় ব্যাকআপ তৈরি করা শিখাবে।
প্রাচীন একটি উক্তি: "সময়মতো একটি টাঁকা নয়টা টাঁকা বাঁচায়"। কম্পিউটার জগতে সেই টাঁকাটিই হলো ব্যাকআপ। প্রোডাকশন আইটি ইনফ্রাস্ট্রাকচার চালানোর সময় সার্ভার ও অ্যাপ্লিকেশনের আপটাইম যতটা সম্ভব ১০০% এর কাছাকাছি রাখতে হয়। ইনফ্রাস্ট্রাকচার সুদৃঢ़ করার অনেক উপায় রয়েছে, কিন্তু এটি সম্পূর্ণ ফেইল-প্রুফ করা অসম্ভব। তাই আমাদের প্ল্যান বি লাগে।
সার্ভারের মূলত তিনটি লেয়ার রয়েছে: হার্ডওয়্যার, অপারেটিং সিস্টেম ও অ্যাপ্লিকেশন, এবং ডেটা। হার্ডওয়্যার ফেইল হলে মেশিন পরিবর্তন করা সহজ। ওএস ও অ্যাপ্লিকেশন রিইনস্টল করাও সহজ। কিন্তু আপনার অ্যাপ্লিকেশন যা ব্যবহার করে সে ডেটা ও কনফিগারেশন রিপ্লেস করা যাবে না। ফেইল হলে এই অংশটিই অনন্য। তাই এই ডেটা নিয়মিত ব্যাকআপ নিতে হয় যাতে জরুরি অবস্থায় সহজে রিট্রিয়ভ করা যায়।
এখানে আমি আপনাকে লিনাক্স সিস্টেমে স্বয়ংক্রিয় দৈনিক ব্যাকআপ নেওয়ার স্ক্রিপ্ট লিখতে গাইড করব। এই অনুশীলনের জন্য আমি একটি সার্ভার ব্যবহার করব যেটি আপাচি ওয়েব সার্ভার, MySQL ডেটাবেস সার্ভার চালায়, এবং /home পার্টিশনে কিছু ডেটা রয়েছে যেগুলো ব্যাকআপ নিতে হবে। আমরা গত দিনের আপাচি এক্সেস লগও আলাদা ব্যাকআপ ডিরেক্টরিতে রাখব। প্রথমে ব্যাকআপ রাখার ডিরেক্টরি তৈরি করি। আমি /opt পার্টিশনে BACKUP নামে একটি ডিরেক্টরি তৈরি করেছি। ব্যাকআপগুলো এইভাবে সংগঠিত করব যাতে প্রতিদিনের ব্যাকআপ থাকে: /opt/BACKUP/YEAR/MONTH/DATE/। যেমন ১১ আগস্ট ২০০৮-এর ব্যাকআপ যাবে /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 ইউজার ব্যবহার করছি। অনুগ্রহ করে আপনার নিজের ইউজারনেম দিয়ে প্রতিস্থাপন করুন।
ব্যাকআপ স্ক্রিপ্ট
#!/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_DOCROOT=/var/www/html/
# MySQL ডেটাবেস কনফিগ
DB_IP="localhost" # <-- আপনার ডেটাবেস সার্ভারের IP দিন
DB_USER="calvin" # <-- আপনার ডেটাবেস ইউজারনেম দিন
DB_PASS="calvin_password" # <-- আপনার ডেটাবেস পাসওয়ার্ড দিন
DB_NAME="clientlist" # <-- আপনার ডেটাবেস নাম দিন
# আপাচি লগ ডিরেক্টরি
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}
এই স্ক্রিপ্টটি /home/calvin/scripts/backup.sh এ সেভ করুন। এক্সিকিউটেবল পারমিশন দিন:
# chmod +x /home/calvin/scripts/backup.sh
এখন কমান্ড লাইন থেকে স্ক্রিপ্ট চালান:
# /home/calvin/scripts/backup.sh
আপনি চাইলে এটি ক্রন জব হিসেবে যোগ করে দিন যাতে প্রতিদিন নির্দিষ্ট সময়ে স্বয়ংক্রিয়ভাবে চলে। প্রতিদিন সকাল ৪টাতে চালাতে চাইলে:
# crontab -e
খুলা ফাইলে নতুন লাইন যোগ করুন:
0 4 * * * /home/calvin/scripts/backup.sh > /dev/null
হয়ে গেলো! আপনার সার্ভার এখন প্রতিদিন সকাল ৪টাতে ডেটা, ডেটাবেস, কনফিগারেশন ফাইল, অ্যাপ্লিকেশন ফাইল, এবং লগ ফাইল /opt/backup-এ স্বয়ংক্রিয়ভাবে ব্যাকআপ নেবে। এক্সট্রা সিকিউরিটির জন্য এনক্রিপশন যোগ করা একটি ভালো পরবর্তী ধাপ হতে পারে! 😊