در این بخش هدف ما آشنایی با مفاهیم اصلی Backup & Restore در ClickHouse، مرور قابلیتهای بومی (Native) و ابزارهای جامعه (Community Tools)، و همچنین بررسی چالشها و راهکارهای محیطهای Single-node و Cluster است. در نهایت شرکتکنندگان یاد میگیرند که چگونه از دادههای خود نسخه پشتیبان مطمئن تهیه کرده و در مواقع لازم آن را بازیابی کنند.
ClickHouse یک دیتابیس تحلیلی با معماری ستونمحور است که دادهها را در قالب پارتها (MergeTree Parts) ذخیره میکند. این پارتها تغییرناپذیر هستند (Immutable)، به همین دلیل گرفتن Snapshot از آنها سریع و سبک است. اما برای بازیابی از خطا، خرابی سختافزاری یا اشتباهات انسانی، داشتن استراتژی درست بکاپ و ریاستور ضروری است.
از نسخههای جدید ClickHouse، میتوان به صورت مستقیم با دستورات SQL بکاپ گرفت و ریاستور کرد.
-- بکاپ کامل یک جدول
BACKUP TABLE mydb.events
TO Disk('backups', 'events_full.zip');
-- ریاستور همان جدول
RESTORE TABLE mydb.events
FROM Disk('backups', 'events_full.zip');
نکته: مسیر
Disk('backups', ...)باید قبلاً در کانفیگ ClickHouse تعریف شده باشد (مثلاً فولدر محلی یا فضای S3).
BACKUP DATABASE mydb
TO Disk('backups', 'mydb_schema')
SETTINGS structure_only = 1;
بکاپ افزایشی فقط تغییرات نسبت به بکاپ قبلی را ذخیره میکند. این کار باعث صرفهجویی در فضا و زمان میشود.
-- بکاپ کامل اولیه
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 (کاربران/نقشها)، بعد ساختار جداول، بعد دادهها.
برای محیطهای تولیدی (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
system.backups و system.backup_log) برای مانیتورینگ استفاده کنید.