پشتیبان گیری از بانکهای اطلاعاتی MySQL(1329 مجموع کلمات موجود در متن) (4103 بار مطالعه شده است)  پشتیبان
گیری از بانکهای اطلاعاتی 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
|