http://technotux.com/html/index.php?module=htmlpages&func=display&pid=58
Welcome to TECHNOTUX      
   ورود/ایجاد حساب کاربری پنجشنبه، ۱۴ آذر ۱۳۸۷   
   منوی اصلی
· خانه
   تازه واردان و تازه‌کارها
· تازه واردان و تازه‌کارها بخوانند
· قوانین انجمن‌ها
   درباره ما
· هدف ما چیست؟
   تهیه توزیع‌های لینوکس
· فروشگاه لینوکس شاپ
· فروشگاه Sito.ir
   امکانات
· ارسال خبر
· آمارها
· اخبار
· مقالات آموزشی
· انجمنها (سوال کنید!)
· جستجو در سایت
· جستجو در انجمن‌ها
· لیست برگزیده
· کانال IRC
   جستجو
Google
   اخبار لینوکس از Slashdot
   مرورگر مقالات سایت

   آیا میدانید؟

برای نمایش درختواره پروسه‌های درحال اجرا بر روی کامپیوترتان از دستور pstree استفاده نمایید. مانند:

$ pstree -hlp

-- نکته‌های خط فرمان
   کاربران حاضر
مدیر
هیچیک از مدیران حاضر نیست
مدیر خبر
هیچ مدیر کمکی حاضر
مدیر انجمن
هیچ مدیر کمکی حاضر
اعضا:
جدیدترین:جدید امروز:0
جدیدترین:جدید دیروز:2
جدیدترین:مجموع:7186
جدیدترین:جدیدترین:
newbie.openworld
اعضا:حاضر
اعضا:اعضا:0
مهمان‌ها:مهمان‌ها:69
مجموع:مجموع:69
کاربران حاضر
هیچ کاربر حاضری وجود ندارد
   ورود کاربران




 


 برای ورود مشکل دارید؟
 ثبت نام کاربران جدید
   سایت‌های پیشنهادی
· آموزش فارسی GTK
· آموزش پایتون
· پرسیسم CMS
· گنو/دانلود
· مستندات فارسی برای nix*
· گروه کاربران لینوکس تهران
· پارسیکس گنو/لینوکس
· طرح ملی نرم‌افزارهای متن‌باز
· نشریه الکترونیک لینوکس
· گنو ایران.ارگ
· واژه‌نامه xFarDic
   آخرین بسته‌ها
   RSSهای تکنوتاکس

اخبار و اعلامیه‌ها


آخرین پست‌های انجمن‌ها

پشتیبان گیری از بانک‌های اطلاعاتی MySQL

(1329 مجموع کلمات موجود در متن)
(4138 بار مطالعه شده است)  نسخه چاپی

پشتیبان گیری از بانک‌های اطلاعاتی MySQL


امروزه با همه گیر شدن سایت‌های پویا، بسیاری از سرویس‌دهنده‌های وب که این نرم‌افزارهای کاربردی وب را اجرا می‌کنند، دارای تعداد زیادی بانک اطلاعاتی هستند که همانند فایل‌های دیگر نیاز است تا بصورت مرتب از آنها نسخه‌های پشتیبان تهیه شود. گاهی اهمیت نسخه‌های پشتیبان از بانک‌های اطلاعاتی از نسخه‌های پشتیبان فایل سیستم بیشتر است. دلیل آن هم روشن است، بسیاری از اطلاعات مهم در بانک‌های اطلاعاتی ذخیره می‌شوند نه در فایل سیستم!


در مقاله حاضر اسکریپتی را ایجاد خواهیم کرد که عمل پشتیبان گیری را بطور خودکار بر روی یک سرویس‌دهنده ثالث در ساعات خاصی از روز انجام دهد. اتصال به سرویس‌دهنده ثالث می‌تواند بصورت اشتراک‌های nfs و یا از طریق ssh صورت پذیرد.


در قدم نخست باید موارد ابتدایی و لازم برای انجام پشتیبان گیری را فراهم کرد. نخست باید بر روی سرویس‌دهنده بانک اطلاعاتی MySQL کاربری را ایجاد کرد که دارای حداقل دسترسی برای خواندن و ذخیره اطلاعات باشد. برای این منظور دستورات زیر را وارد می‌کنیم:

mainserver# mysql -u root -p

mysql> grant select,lock tables on *.* to bkuser@localhost identified by 'bkpass';

بجای bkuser و bkpass می‌توانید نام کاربر و کلمه عبور مورد نظر خودتان را استفاده نمایید.


در صورتی که بخواهید تا فایل‌های نسخه‌های پشتیبان از طریق ssh در سرویس‌دهنده مقصد کپی شوند، باید چند کار اضافه‌تر نیز انجام دهید. بدلیل اینکه ارتباط باید بصورت خودکار و بدون دخالت کاربر صورت گیرد، باید عملیاتی را انجام داد تا باعث شود تا سرویس‌دهنده اصلی بتواند بدون نیاز به کلمه عبور به سرویس‌دهنده مقصد متصل گردد. برای این کار از روش ارسال کلید عمومی ssh سرویس‌دهنده مقصد بر روی سرویس‌دهنده اصلی استفاده می‌شود. برای ایجاد کلیک عمومی ssh بر روی سرویس‌دهنده مقصد، دستور زیر را وارد نمایید:

backupserver$ ssh-keygen -t dsa -f $HOME/.ssh/id_dsa -P ''

backupserver$ chmod -R 700 .ssh/

سپس فایل id_dsa.pub موجود در شاخه ssh. را در شاخه root/.ssh/ سرویس‌دهنده اصلی با نام authorized_keys2 کپی نمایید:

backupserver$ scp .ssh/id_dsa.pub root@mainserver:/root/.ssh/authorized_keys2

بسته به شماره نسخه سرویس‌دهنده ssh ای که بر روی سرویس‌دهنده اصلی در حال اجراست، ممکن است نیاز داشته باشید تا نام فایل authorized_keys2 به authorized_keys تغییر داده شود. برای این منظور می‌توانید یک لینک از آن به فایل authorized_keys ایجاد کنید:

mainserver# ln -s /root/.ssh/authorized_keys2 /root/.ssh/authorized_keys

نکته مهمی که باید رعایت کنید این است که کلید عمومی یک کاربر غیر از کاربر ریشه را بر روی سرویس اصلی قرار دهید تا در صورتی که احتمالا سرویس‌دهنده اصلی شکسته شود، امکان دسترسی کامل نفوذگر بر روی سرویس‌دهنده پشتیبان فراهم نگردد. برای مثال می‌توانید یک کاربر با نام backup بر روی سرویس دهنده مقصد ایجاد کنید. پس از کپی کلید بر روی سرویس‌دهنده اصلی، مجوز آنرا برای امنیت بیشتر بر روی 600 تنظیم کنید:

mainserver# chmod 600 /root/.ssh/authorized_keys*

در مرحله بعدی شاخه‌ای را که فایل‌های پشتیبان در آن ذخیره خواهد شد را بر روی سرویس‌دهنده مقصد ایجاد می‌کنیم:

backupserver$ mkdir /home/backup/bkstore/

اکنون تمامی مقدمات برای بکارگیری اسکریپت پشتیبان گیری از بانک اطلاعاتی انجام شده است. اسکریپت مورد استفاده ما دارای ساختاری به شکل زیر است:


#!/bin/sh

DATESTAMP="`date +%Y-%m-%d`"

echo -n "Processing Auto DB Backup..."

echo


cd /var/lib/mysql/

for x in *

do

if [ $x = "my.cnf" ]; then

echo $x

echo "invalid DB..."

else

echo $x

echo "valid DB..."

mysqldump -u bkuser -pbkpass $x > /root/dbs/tmp/$x.$DATESTAMP.sql

fi

done

cd /root/dbs/

rm `find tmp/ -size 0`

echo "Compressing DB Backups..."

tar -czf dbs.$DATESTAMP.tar.gz tmp/*

rm tmp/*.sql

echo "Copying DBs..."

scp dbs.$DATESTAMP.tar.gz backup@backupserver:/home/backup/bkstore/

cd


همانطور که مشاهده می‌کنید، نحوه عمل این اسکریپت بسیار ساده است. اسکریپت وارد شاخه var/lib/myslq/ که در آنجا بانک‌های اطلاعاتی ذخیره می‌شود شده و با استفاده از یک حلقه ساده for و دستور mysqldump شروع به پشتیبان گیری از بانک‌های اطلاعاتی می‌کند. در نهایت نیز تمامی فایل‌ها را بصورت فشرده در آورده و با استفاده از دستور scp بر روی سرویس‌دهنده مقصد کپی می‌کند. در صورتی که سرویس‌دهنده مقصد با استفاده از اشتراک nfs به سرویس‌دهنده اصلی متصل بود، تنها به یک دستور cp اکتفا می‌کردیم و نیازی به بکارگیری کلیدهای عمومی ssh وجود نداشت ولی امنیت در هنگام انتقال اطلاعات در حالت دوم یعنی بکارگیری ssh بیشتر است.


اسکریپت بالا را با نامی مانند mysqlbk در مسیر root/ ذخیره کرده و مجوز اجرا به آن می‌دهیم:

mainserver# chmod +x mysqlbk

برای اینکه عملیات پشتیبان گیری بصورت خودکار و در ساعت خاصی از روز انجام گیرد، می‌توانیم از cron استفاده کنیم. دستور زیرا را تایپ کرده:

mainserver# crontab -e

سپس خط زیر را وارد می‌کنیم:

0 3 * * * /root/mysqlbk

از این پس هر روز در ساعت ۳ صبح عملیات پشتیبان گیری و کپی بر روی سرویس‌دهنده مقصد بصورت خودکار انجام خواهد شد.

برای افزایش ضریب اطمینان می‌توان اسکریپت خودکاری را بر روی سرویس‌دهنده مقصد تعبیه کرد که فایل‌های پشتیبان را به محل امن دیگری انتقال دهد.


با ایجاد تغییرات کوچکی در اسکریپت فوق می‌توان از آن برای پشتیبان گیری دایرکتوری‌های خانگی کاربران نیز استفاده کرد.



آلن باغومیان alan@technotux.org



Linux is a registered trade mark of Linus Torvalds.

تمامی مطالب و مقالات این سایت تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد می‌باشد. یک نسخه از این مجوز را اینجا می‌توانید برای خود دریافت نمایید.

Email Us : webmaster AT technotux DOT org