یک سناریوی backup و restore در mariadb

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

برای اجرای این سناریو، فرض بر این است که شما از قبل موارد زیر را نصب و پیکربندی کرده‌اید:

  • یک کلاستر MariaDB (نسخه 10.11.13) شامل یک سرور اصلی (Primary) و سرورهای Replica روی سیستم‌عامل Ubuntu 24.04.
  • یک سرور مجزا (مثلاً با نام testrestore) با نصب بودن سرویس MariaDB جهت تست فرآیند بازیابی (Restore).

ابزار mariabackup یکی از بهترین روش‌ها برای تهیه بکاپ‌های فیزیکی (Physical Backups) بدون نیاز به توقف دیتابیس است. در این سناریو، ابتدا یک بکاپ کامل و سپس دو بکاپ افزایشی می‌گیریم و در نهایت آن‌ها را روی یک سرور دیگر بازگردانی می‌کنیم.

بخش اول: ایجاد داده‌های تستی و تهیه بکاپ‌ها (روی سرور اصلی)

۱. ساخت پوشه‌های بکاپ

ابتدا دایرکتوری‌های مورد نیاز برای ذخیره بکاپ‌ها را ایجاد می‌کنیم:

mkdir -p /backup/{full,incr1,incr2}

۲. ایجاد دیتابیس و تهیه بکاپ کامل (Full Backup)

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

CREATE DATABASE company;
USE company;
CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50));
INSERT INTO employees (name) VALUES ('Ali');

سپس از کل دیتابیس یک بکاپ کامل در پوشه full می‌گیریم:

mariabackup --backup --target-dir=/backup/full -u root -p

۳. درج رکورد جدید و تهیه بکاپ افزایشی اول (Incremental 1)

رکورد دوم را به جدول اضافه می‌کنیم:

INSERT INTO employees (name) VALUES ('Reza');

حالا بکاپ افزایشی اول را بر پایه بکاپ کامل (Full) می‌گیریم:

mariabackup --backup --target-dir=/backup/incr1 --incremental-basedir=/backup/full -u root -p

۴. درج رکورد سوم و تهیه بکاپ افزایشی دوم (Incremental 2)

رکورد سوم را ثبت می‌کنیم:

INSERT INTO employees (name) VALUES ('Sara');

بکاپ افزایشی دوم را بر پایه بکاپ افزایشی اول (incr1) می‌گیریم:

mariabackup --backup --target-dir=/backup/incr2 --incremental-basedir=/backup/incr1 -u root -p

پس از این مراحل، پوشه /backup را از طریق ابزارهایی مانند scp به سرور مجزای بازیابی (testrestore) منتقل کنید.


بخش دوم: آماده‌سازی (Prepare) و بازگردانی (Restore) بکاپ‌ها (روی سرور testrestore)

نکته بسیار مهم در بکاپ‌های افزایشی MariaDB این است که نمیتوانید آن‌ها را مستقیماً بازگردانی کنید. ابتدا باید تمام بکاپ‌های افزایشی روی بکاپ کامل ادغام (Merge) شوند.

۱. توقف سرویس و پاکسازی داده‌های فعلی

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

systemctl stop mariadb
rm -rf /var/lib/mysql/*

۲. آماده‌سازی (Prepare) و ادغام بکاپ‌ها

بسیار مهم است که مالکیت فایل‌های کپی‌شده را به کاربر mysql تغییر دهید تا سرویس بتواند آن‌ها را بخواند:

chown -R mysql:mysql /var/lib/mysql

مرحله الف: ابتدا بکاپ کامل (Full) را آماده می‌کنیم تا لاگ‌های تراکنش روی آن اعمال شوند:

mariabackup --prepare --target-dir=/backup/full

مرحله ب: بکاپ افزایشی اول را روی بکاپ کامل ادغام می‌کنیم:

mariabackup --prepare --target-dir=/backup/full --incremental-dir=/backup/incr1

مرحله ج: بکاپ افزایشی دوم را نیز روی بکاپ کامل (که حالا شامل داده‌های incr1 است) ادغام می‌کنیم:

mariabackup --prepare --target-dir=/backup/full --incremental-dir=/backup/incr2

اکنون دایرکتوری /backup/full حاوی تمام داده‌های یکپارچه از هر سه مرحله بکاپ است.

۳. بازگردانی (Copy-Back) و تنظیم دسترسی‌ها

داده‌های آماده‌شده را به مسیر اصلی دیتابیس (Data Directory) منتقل می‌کنیم:

mariabackup --copy-back --target-dir=/backup/full

۴. استارت سرویس و بررسی صحت داده‌ها

سرویس MariaDB را روشن کنید:

systemctl start mariadb

وارد دیتابیس شده و اطلاعات را بررسی کنید:

USE company;
SELECT * FROM employees;

در صورت انجام صحیح مراحل، باید هر سه رکورد (Ali, Reza, Sara) را در خروجی مشاهده کنید که نشان‌دهنده موفقیت کامل فرآیند Restore در حالت Full + Incremental است.