الانتقال إلى المحتوى الرئيسي
النسخ الاحتياطي باللقطات هو وضع نسخ احتياطي خفيف لمحركات الجداول السحابية الأصلية. فبدلًا من نسخ البيانات، يكتب عُقد قفل لكل جزء في ClickHouse Keeper. وتمنع هذه الأقفال الخادم من حذف الأجزاء المشار إليها في تخزين الكائنات طوال فترة الاحتفاظ باللقطة. ثم يسجّل النسخ الاحتياطي مراجع تخزين الكائنات بدلًا من نسخ أي بيانات فعليًا، مما يجعل إنشاء اللقطات سريعًا بغض النظر عن حجم الجدول. تنطبق الآلية الخفيفة على جداول SharedMergeTree وSharedSet وSharedJoin. أما جميع أنواع المحركات الأخرى — مثل Log أو Memory — فيعود النسخ الاحتياطي تلقائيًا إلى نسخ احتياطي قياسي قائم على النسخ.

إنشاء لقطة

يستخدم النسخ الاحتياطي باللقطة الأمر القياسي BACKUP مع experimental_lightweight_snapshot = true. ويُعدّ الإعداد id مطلوبًا — إذ يحدد اسم اللقطة ويُستخدم للإشارة إليها في أوامر unlock والأوبزرفابيليتي:
يعرض الأمر القيمتين id وstatus، ويمكن استخدام id لتتبّع العملية في system.backups. أنشئ نسخة احتياطية لجدول واحد على S3:
خذ نسخة احتياطية لقاعدة بيانات كاملة:
أنشئ نسخة احتياطية من جميع الجداول مع استثناء جدول واحد:
يمكن استخدام الأوامر نفسها مع Azure Blob Storage:

الاستعادة إلى الخدمة نفسها

نظرًا لأن اللقطة تحتفظ بمراجع إلى ملفات تخزين الكائنات بدلًا من نسخ البيانات نفسها، فإن الاستعادة إلى خدمة ClickHouse جديدة أو أخرى تتطلب الوصول إلى تخزين الكائنات الأصلي. لذلك، لا تتوفر الاستعادة بين الخدمات عبر SQL — فهي متاحة فقط من خلال واجهة المستخدم. وعبر SQL، يمكنك استعادة لقطة إلى الخدمة نفسها من حاوية نسخ احتياطي خارجية باستخدام snapshot_from_current_service = 1. يقرأ هذا الكائنات مباشرةً عبر قرص الوجهة بدلًا من المرور عبر قارئ لقطات بعيد:
تستعيد عبارة AS البيانات إلى جدول باسم جديد، مع إبقاء الجدول الأصلي دون تغيير. وللاستبدال بالجدول الأصلي، احذفه أولًا:

فكّ قفل لقطة

تحتفظ كل لقطة بأقفال في ClickHouse Keeper تمنع حذف ملفات تخزين الكائنات المشار إليها تلقائيًا ضمن عملية تنظيف المهملات. بعد اكتمال الاستعادة — أو عندما لا تعود هناك حاجة إلى اللقطة — فكّ قفلها لتحرير تلك الأقفال. يوجد شكلان: فكّ قفل على مستوى النظام يزيل جميع أقفال اللقطة دفعةً واحدة، وفكّ قفل لكل جدول يزيل القفل عن جدول واحد مع الإبقاء على بقية اللقطة كما هي. فكّ القفل على مستوى النظام — يزيل جميع أقفال اللقطة:
إلغاء قفل جدول محدد — يزيل القفل لجدول واحد فقط:
يكون بند FROM اختياريًا إذا كانت وجهة اللقطة محفوظة في Keeper وقت الإنشاء (كما يظهر في العمود info ضمن system.snapshot_locks):
بعد إلغاء القفل، يختفي الصف المقابل من system.snapshot_locks، كما تُزال الأجزاء التي لم تعد لقطات أخرى تشير إليها من system.snapshot_parts.

الأوبزرفابيليتي

system.backups

تظهر جميع عمليات اللقطات في system.backups إلى جانب عمليات النسخ الاحتياطي والاستعادة العادية. استعلم منه باستخدام id الذي عيّنته (أو معرّف UUID الذي أعاده الأمر):

system.snapshot_locks

يعرض system.snapshot_locks اللقطات المعتمدة والمسجَّلة حاليًا في Keeper. عند اعتماد لقطة، تُنشأ عقدة في Keeper عند /clickhouse/snapshot/committed/{snapshot_id}. قبل حذف أي جزء بيانات، يتحقق الخادم مما إذا كانت لقطة معتمدة تحتفظ بقفل على ذلك الجزء. وإذا كان الأمر كذلك، يُتخطى الحذف. ويستمر القفل إلى أن تُلغي قفل اللقطة صراحةً.
يمثّل كل صف لقطة مُعتمدة واحدة. إذا رأيت أقفالًا للقطات لم تعد لها وجهة نسخ احتياطي صالحة، فشغّل SYSTEM UNLOCK SNAPSHOT لإزالتها. للتحقق مما إذا كان قفل لقطة محددة موجودًا:

system.snapshot_parts

يعرض system.snapshot_parts أجزاء البيانات المرتبطة حاليًا بقفل لقطة واحد على الأقل. ولكل جزء بيانات مقفَل، توجد عقدة Keeper عند /clickhouse/snapshot/{table_uuid}/{part_name} تتضمن حجمه المضغوط وغير المضغوط. ويقرأ هذا الجدول تلك العقد ليوضح الأجزاء المحمية حاليًا من الحذف.
الأجزاء التي تكون فيها snapshots_size > 1 تكون مُشارًا إليها من عدة لقطات، ولن تُزال من تخزين الكائنات حتى يُرفع القفل عن جميع اللقطات التي تحتفظ بها. للتحقق من إجمالي التخزين المُثبّت:
للعثور على الأجزاء التي تقفلها لقطة، لكنها حُذفت بالفعل أو لم تعد نشطة على الخادم — أي البيانات المُحتفَظ بها في تخزين الكائنات بسبب أقفال اللقطات وحدها:
يفيد هذا في فهم العبء التخزيني الإضافي الناتج عن الاحتفاظ بالنسخ اللحظية بعد تغيّر البيانات الأصلية أو حذفها.

إعدادات الخادم

تتحكم معلمات تهيئة الخادم التالية في سلوك اللقطات. وتُضبط في ملف تهيئة الخادم، وليس في SQL.
آخر تعديل في ٢٩ يونيو ٢٠٢٦