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

پشتیبان‌گیری و بازیابی اطلاعات در ClickHouse

در این بخش هدف ما آشنایی با مفاهیم اصلی Backup & Restore در ClickHouse، مرور قابلیت‌های بومی (Native) و ابزارهای جامعه (Community Tools)، و همچنین بررسی چالش‌ها و راهکارهای محیط‌های Single-node و Cluster است. در نهایت شرکت‌کنندگان یاد می‌گیرند که چگونه از داده‌های خود نسخه پشتیبان مطمئن تهیه کرده و در مواقع لازم آن را بازیابی کنند.

۱. چرا بکاپ مهم است؟

ClickHouse یک دیتابیس تحلیلی با معماری ستون‌محور است که داده‌ها را در قالب پارت‌ها (MergeTree Parts) ذخیره می‌کند. این پارت‌ها تغییرناپذیر هستند (Immutable)، به همین دلیل گرفتن Snapshot از آن‌ها سریع و سبک است. اما برای بازیابی از خطا، خرابی سخت‌افزاری یا اشتباهات انسانی، داشتن استراتژی درست بکاپ و ری‌استور ضروری است.


۲. بکاپ و ری‌استور با دستورات داخلی ClickHouse

از نسخه‌های جدید ClickHouse، می‌توان به صورت مستقیم با دستورات SQL بکاپ گرفت و ری‌استور کرد.

۲.۱. بکاپ کامل (Full Backup)
-- بکاپ کامل یک جدول
BACKUP TABLE mydb.events
    TO Disk('backups', 'events_full.zip');

-- ری‌استور همان جدول
RESTORE TABLE mydb.events
    FROM Disk('backups', 'events_full.zip');

نکته: مسیر Disk('backups', ...) باید قبلاً در کانفیگ ClickHouse تعریف شده باشد (مثلاً فولدر محلی یا فضای S3).


۲.۲. بکاپ فقط ساختار (Schema Only)
BACKUP DATABASE mydb
    TO Disk('backups', 'mydb_schema')
    SETTINGS structure_only = 1;

۲.۳. بکاپ افزایشی (Incremental Backup)

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

مثال:
-- بکاپ کامل اولیه
BACKUP TABLE mydb.events
    TO Disk('backups', 'events_base.zip');

-- بکاپ افزایشی (فقط تغییرات بعد از base)
BACKUP TABLE mydb.events
    TO Disk('backups', 'events_inc1.zip')
    SETTINGS base_backup = Disk('backups', 'events_base.zip');

-- ری‌استور از بکاپ افزایشی
RESTORE TABLE mydb.events
    FROM Disk('backups', 'events_inc1.zip');

۲.۴. بکاپ روی کلاستر

اگر چند نود داری:

BACKUP DATABASE mydb ON CLUSTER my_cluster
    TO Disk('backups','cluster_backup.zip');

در زمان ری‌استور باید ترتیب رعایت شود:
اول RBAC (کاربران/نقش‌ها)، بعد ساختار جداول، بعد داده‌ها.


۳. ابزارهای غیررسمی: clickhouse-backup

برای محیط‌های تولیدی (Production) معمولاً از ابزار clickhouse-backup استفاده می‌شود چون امکانات بیشتری دارد.

۳.۱. نصب
curl -s https://raw.githubusercontent.com/Altinity/clickhouse-backup/master/install.sh | bash

۳.۲. کار با ابزار
بکاپ کامل
clickhouse-backup create mybackup
clickhouse-backup upload mybackup    # آپلود به S3/GCS/Azure
ری‌استور
clickhouse-backup restore mybackup
بکاپ افزایشی

ابزار هم مثل دستورات داخلی از Part-Level Deduplication استفاده می‌کند. یعنی اگر پارت جدیدی ساخته نشده باشد، داده تکراری ذخیره نمی‌شود.

clickhouse-backup create --diff-from=last_full_backup mybackup_inc
clickhouse-backup upload mybackup_inc

۳.۳. امکانات اضافی ابزار
  • پشتیبانی از فضای ابری (S3, GCS, Azure Blob)
  • مدیریت Retention (پاک‌سازی بکاپ‌های قدیمی)
  • بکاپ RBAC و Configs
  • زمان‌بندی با Cron یا Kubernetes CronJob

۴. توصیه‌های عملی

  • همیشه بازیابی (Restore) را هم تست کنید، نه فقط بکاپ گرفتن.
  • استراتژی ترکیبی پیشنهاد می‌شود:
    • بکاپ روزانه افزایشی
    • بکاپ هفتگی کامل
  • مقصد بکاپ را روی Object Storage (مثل S3) بگذارید، نه فقط روی دیسک محلی.
  • از جدول‌های سیستمی (system.backups و system.backup_log) برای مانیتورینگ استفاده کنید.
  • در کلاستر، تصمیم بگیرید بکاپ روی کدام Replica انجام شود (معمولاً یکی کافی است).

۵. جمع‌بندی

  • برای تست و محیط‌های کوچک → دستورات داخلی SQL کافی است.
  • برای محیط تولیدی → ابزار clickhouse-backup توصیه می‌شود.
  • بکاپ افزایشی باعث صرفه‌جویی در زمان و فضا می‌شود، اما همیشه باید حداقل یک بکاپ کامل پایه داشته باشید.
  • بدون تست بازیابی، بکاپ ارزش ندارد.
فروشگاه
جستجو
دوره ها

لطفا کلمات کلیدی را وارد کنید