یکی از اصلی‌ترین چالش‌هایی که هنگام کار با پایگاه‌های داده فعال مواجه می‌شویم، تهیه «پشتیبان‌های داغ» (Hot Backups) از آن‌ها است. منظور از پشتیبان داغ پشتیبانی است که در آن سرویس پایگاه داده متوقف نمی‌شود یا پایگاه داده به حالت «فقط خواندنی» (Read-Only) در نمی‌آید. توجه داشته باشید که کپی کردن صرفِ فایل‌های پایگاه داده، باعث می‌شود یک رونوشت از پایگاه داده داشته باشیم که دچار ناسازگاری درونی باشد، یعنی قابل استفاده نباشد، یا این که تراکنش‌هایی که در طی فرایند کپی کردن رخ داده‌اند، از دست رفته است. از سوی دیگر متوقف کردن پایگاه داده برای پشتیبان‌گیری‌های زمان‌بندی‌شده، باعث می‌شود که بخش‌هایی از اپلیکیشن که با پایگاه داده ارتباط دارند، از کار بیافتند. Percona XtraBackup یک نرم‌افزار متن-باز است که برای رفع این مشکل استفاده می‌شود و پشتیبان‌های کامل یا افزایشی از سرورهای پایگاه داده MySQL، MariaDB و Percona تهیه می‌کند که به نام پشتیبان داغ نیز نامیده می‌شوند.

برخلاف پشتیبان‌های منطقی که از نرم‌افزارهایی مانند mysqldump استفاده می‌کنند؛ XtraBackup پشتیبان‌های فیزیکی از فایل‌های پایگاه داده تهیه می‌کند، یعنی از فایل‌های داده‌ای کپی می‌گیرد. سپس به لاگ تراکنش‌های پشتیبان‌های فیزیکی مراجعه می‌کند تا هر تراکنش جاری که در طی زمان ایجاد پشتیبان‌ها کامل نشده بود را مجدداً پشتیبان‌گیری کند. در نتیجه پشتیبان‌های منسجمی از پایگاه داده در حال اجرا ایجاد می‌شود. این پشتیبان پایگاه داده که حاصل می‌شود را می‌توان با استفاده از rsync یا یک سیستم پشتیبان‌گیری مانند Bacula در مکان ریموت ذخیره ساخت.

در این راهنما شیوه اجرای یک پشتیبان کامل داغ از پایگاه‌های داده MySQL یا MariaDB با استفاده از Percona XtraBackup روی سرور اوبونتو 14.04 و همچنین CentOS 7 را بررسی می‌کنیم. فرایند بازیابی پایگاه داده از یک پشتیبان نیز مورد بررسی قرار گرفته است.

پیش‌نیازها

در این راهنما می‌بایست اجزای زیر را داشته باشیم:

  • دسترسی Superuser روی یک سیستم اوبونتو 14.04 (یا CentOS 7)
  • یک نسخه در حال اجرا از پایگاه داده MySQL یا MariaDB
  • دسترسی به کاربر مدیر (root) پایگاه داده

ضمناً برای اجرای پشتیبان‌گیری داغ از پایگاه داده، سیستم پایگاه داده باید از موتور ذخیره‌سازی InnoDB استفاده کند. دلیل این مسئله آن است که XtraBackup از لاگ تراکنش‌هایی که InnoDB انجام داده است استفاده می‌کند. اگر پایگاه‌های داده شما از موتور ذخیره‌سازی MyISAM استفاده می‌کنند، می‌توانید همچنان از XtraBackup استفاده کنید؛ اما پایگاه داده در طی انتهای پشتیبان‌گیری برای مدتی کوتاه قفل می‌شود.

بررسی موتور ذخیره‌سازی

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

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

سپس وضعیت جدول‌ها را در خروجی نمایش دهید:

موتور مورد استفاده در هر ردیف از پایگاه داده نمایش می‌یابد:

زمانی که مطمئن شدید می‌توانید از کنسول خارج شوید:

نصب Percona XtraBackup

شیوه نصب XtraBackup روی سرور اوبونتو 14.04 و CentOS 7 تا حدودی متفاوت است. در ادامه هر یک از این موارد را جداگانه ارائه می‌کنیم.

نصب روی اوبونتو 14.04

ساده‌ترین روش نصب Percona XtraBackup استفاده از apt-get است. ابتدا کلید ریپازیتوری Percona را با دستور زیر به سیستم اضافه کنید:

سپس ریپازیتوری آن را به منابع apt خود بیفزایید:

دستور زیر را اجرا کنید تا منابع apt به‌روزرسانی شوند:

در نهایت می‌توانید با اجرای دستور زیر XtraBackup را نصب کنید:

نصب روی CentOS 7

روی CentOS 7 ساده‌ترین روش برای نصب percona-xtrabackup استفاده از yum است، چون ریپازیتوری percona یک RPM برای آن ارائه کرده است:

سپس می‌توانید با اجرای دستور زیر Percona XtraBackup را نصب کنید:

هر گونه اعلان تأییدی که ظاهر می‌شود را بپذیرید تا فرایند نصب تکمیل شود.

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

آماده‌سازی‌های اولیه

پیش از این که برای اولین بار از XtraBackup استفاده کنید، باید سیستم و کاربر MySQL را آماده‌سازی نمایید تا XtraBackup بتواند از آن‌ها استفاده کند. در بخش بعدی این مراحل را توضیح داده‌ایم.

کاربر سیستم

به جز در مواردی که بخواهید از کاربر root سیستم استفاده کنید، باید برخی آماده‌سازی‌های اولیه انجام دهید تا مطمئن شوید که XtraBackup می‌تواند به طرز صحیحی اجرا شود. ما فرض می‌کنیم که شما به عنوان کاربری وارد سیستم شده‌اید که XtraBackup را اجرا خواهد کرد و دسترسی superuser نیز دارید. کاربر سیستم خود را به گروه mysql اضافه کنید:

زمانی که چنین کردید ابتدا یک دایرکتوری ایجاد کنید که برای ذخیره‌سازی پشتیبان‌هایی که XtraBackup ایجاد می‌کند استفاده خواهد شد:

دستور chown تضمین می‌کند که این کاربر می‌تواند در دایرکتوری پشتیبان بخواند و بنویسید.

کاربر MySQL

XtraBackup نیازمند نوعی کاربر MySQL است که هنگام ایجاد پشتیبان‌ها مورد استفاده قرار دهد. اینک یک چنین کاربری ایجاد می‌کنیم. وارد کنسول MySQL شوید و دستور زیر را اجرا کنید:

رمز عبور root MySQL را نیز در ادامه وارد کنید.

در زمانی که اعلان MySQL ظاهر شد، یک کاربر جدید ایجاد کرده و رمز عبوری برای آن تأیید کنید. در این مثال ما از نام کاربری «bkpuser» و رمز عبور «bkppassword» استفاده می‌کنیم. دقت داشته باشید که این موارد را در استفاده عملی خود تغییر دهید:

سپس به کاربر جدید mysql خود دسترسی‌های بارگذاری مجدد، قفل کردن و ایجاد کپی از همه پایگاه‌های داده را می‌دهیم:

این‌ها کمترین دسترسی‌هایی هستند که XtraBackup برای اجرای پشتیبان‌های کامل نیاز دارد. زمانی که کار خود را به پایان بردید، از کنسول MySQL خارج شوید.

اینک آماده هستیم تا پشتیبان کاملی از پایگاه داده خود تهیه کنیم.

اجرای پشتیبان‌گیری کامل داغ

در این بخش مراحلی که برای ایجاد پشتیبان کامل داغ از پایگاه داده MySQL با استفاده از XtraBackup مورد نیاز است را بررسی می‌کنیم. پس از مطمئن شدن از این که مجوزهای (permission) فایل پایگاه داده صحیح هستند؛ از XtraBackup برای ایجاد پشتیبان استفاده می‌کنید و سپس آن را آماده‌سازی می‌کنیم.

به‌روزرسانی مجوزهای Datadir

در سرور اوبونتو 14.04 و همچنین CentOs 7 فایل‌های داده MySQL در مسیر var/lib/mysql/ ذخیره می‌شوند که گاهی اوقات datadir نیز نامیده می‌شود. به طور پیش‌فرض دسترسی به datadir به کاربر mysql محدود شده است. XtraBackup به دسترسی به این دایرکتوری برای ایجاد فایل‌های پشتیبانی نیاز دارد. از این رو چند دستور اجرا زیرا را کنید تا مطمئن شوید که کاربر سیستمی که قبلاً به عنوان بخشی از گروه mysql ایجاد کرده‌اید، مجوزهای لازم را در اختیار دارد:

اوبونتو 14.04

CentOS 7

این دستورها تضمین می‌کنند که همه دایرکتوری‌های موجود در مسیر datadir در دسترس کاربران گروه mysql هستند و باید قبل از اجرای هر گونه پشتیبان‌گیری اجرا شوند.

اگر کاربری را که ایجاد کردید در همان نشست (session) به گروه mysql اضافه کرده باشید، باید مجدداً وارد سیستم شوید تا عضویت‌های گروه کاربران تغییر یابد.

ایجاد پشتیبان

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

بدین ترتیب پشتیبانی از پایگاه داده در مکان تعیین شده /data/backups/new_backup ایجاد خواهد شد:

به طور جایگزین می‌توانید فلگ no-timestamp– را حذف کنید تا XtraBackup یک دایرکتوری پشتیبان بر اساس زمان کنونی مانند زیر ایجاد کند:

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

هر کدام از دو روش فوق را که انتخاب کنید در هر صورت، می‌بایست در آخرین خط خروجی عبارت «innobackupex: completed OK!» نشان داده شود. یک پشتیبان‌گیری موفق باعث می‌شود یک کپی از datadir پایگاه داده ایجاد شود که باید پیش از استفاده، آماده‌سازی شود.

آماده‌سازی پشتیبان

آخرین گام برای ایجاد یک پشتیبان داغ با استفاده از XtraBackup آماده‌سازی آن است. این گام شامل «replaying» لاگ تراکنش‌ها و اعمال تراکنش‌های ارسال نشده روی پشتیبان است. آماده‌سازی پشتیبان باعث می‌شود که داده‌ها مسنجم باقی بمانند و قابل بازیابی باشند.

اگر مثال خود را پی بگیریم، باید پشتیبانی را که در دایرکتوری data/backups/new_backup/ ایجاد کرده‌ایم، آماده‌سازی کنیم. در دستور زیر دایرکتوری خودتان را جایگزین کنید:

در این مورد نیز باید پیام «innobackupex: completed OK!» را در آخرین خط خروجی مشاهده کنید.

پشتیبان پایگاه داده‌ای که ایجاد کردید، آماده استفاده برای بازیابی پایگاه داده است. ضمناً اگر یک سیستم پشتیبان‌گیری از فایل‌ها مانند Bacula داشته باشید، این پشتیبان از پایگاه داده باید به عنوان بخشی از گزینش پشتیبان شما تعیین شود. در بخش بعدی شیوه بازیابی پایگاه داده از فایل‌های پشتیبانی که هم اینک ایجاد کردیم را بررسی می‌کنیم.

اجرای بازیابی پشتیبان

بازیابی کردن یک پایگاه داده با XtraBackup نیازمند این است که پایگاه داده متوقف شود و همچنین datadir نیز خالی باشد. با استفاده از دستور زیر سرویس MySQL را متوقف کنید:

اوبونتو

CentOS 7

سپس محتوای datadir یعنی مسیر var/lib/mysql/ را خالی کنید. در این مثال ما آن را به پوشه temporary انتقال می‌دهیم:
اینک می‌توانید پایگاه داده را از فایل پشتیبان به نام «new_backup» بازیابی کنید:
اگر فرایند بازیابی موفقیت‌آمیز باشد، خط آخر خروجی باید پیام «innobackupex: completed OK!» را نشان دهد.

فایل‌های بازیابی شده در datadir احتمالاً به کاربری تعلق دارند که فرایند بازیابی را اجرا کرده است. مالکیت را به mysql تغییر دهید تا MySQL بتواند فایل‌ها را خوانده و بنویسد:

اکنون می‌توانید سرویس MySQL را آغاز کنید:

اوبونتو 14.04

CentOS 7

سخن پایانی

اینک که توانسته‌اید با بهره‌گیری از Percona XtraBackup پشتیبان‌های داغ از پایگاه داده MySQL خود تهیه کنید، چند نکته وجود دارند که باید در نظر داشته باشید.

پیش از همه توصیه می‌شود که این فرایند را خودکارسازی کنید به طوری که پشتیبان‌ها به صوت خودکار بر اساس یک زمان‌بندی ایجاد شوند. دوم باید کپی‌هایی ریموت از فایل‌های پشتیبان تهیه کنید تا در مواردی که مشکلی برای سرور پیش می‌آید، بتوانید از آن‌ها استفاده کنید. بدین منظور می‌توانید از چیزی مانند rsync یا یک سیستم پشتیبان‌گیری از فایل شبکه مانند Bacula استفاده کنید. در نهایت باید با مباحث چرخش پشتیبان‌ها (حذف پشتیبان‌های قدیمی بر اساس جدول زمان‌بندی) و ایجاد پشتیبان‌های افزایشی (با Percona XtraBackup) جهت صرفه‌جویی در فضای دیسک نیز آشنا باشید.

اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

میثم لطفی (+)

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

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *