انتقل إلى محتوى الدرس

Point in Time Binlog Recovery الاستعادة الزمنية بالسجل الثنائي

تعلّم النسخ الاحتياطي واستعادة قواعد البيانات عبر أداة mysqldump والخيار --single-transaction والاستعادة الزمنية (PITR) في MySQL 8.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

ماذا لو أُخذت النسخة الاحتياطية اليومية الساعة 03:00 فجراً، وفي الساعة 14:30 ظهراً نفّذ أحدهم أمر حذف خاطئ؟ إن الاكتفاء باستعادة نسخة الفجر سيعني ضياع مبيعات 11 ساعة ونصف! وهنا تبرز أهمية الاستعادة إلى نقطة زمنية محددة (Point-in-Time Recovery — PITR) بالجمع بين النسخة الاحتياطية والسجل الثنائي (Binary Log):

  • 1. تسجيل موقع السجل الثنائي لحظة النسخ: تمرير الخيار --source-data=2 لأداة mysqldump يسجل كتعليق داخل ملف النسخة اسم ملف السجل الثنائي ورقم الموقع الدقيق (Position) لحظة أخذ اللقطة.
  • 2. استعادة النسخة الأساسية (03:00 فجراً): نستعيد ملف mysqldump أولاً لإرجاع قاعدة البيانات إلى حالة الساعة الثالثة فجراً.
  • 3. إعادة تطبيق السجل الثنائي حتى الثانية التي سبقت الخطأ: نستخدم أداة mysqlbinlog مع تحديد نقطة البداية وتحديد وقت التوقف --stop-datetime="2026-11-01 14:29:59" (قبل الحذف بثانية واحدة) لتمرير جميع العمليات السليمة إلى الخادم.
  • SHOW BINARY LOGS;: يعرض قائمة ملفات السجل الثنائي المتاحة في الخادم.
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| binlog.000042    |   104856 |              |                  |
+------------------+----------+--------------+------------------+
SQL
SHOW VARIABLES LIKE 'log_bin';
SHOW BINARY LOGS;

-- 1. Take nightly dump with binlog coordinates recorded as comment:
-- mysqldump -u root -p --single-transaction --source-data=2 shop_db > shop_base.sql
-- 2. Replay binlog events up to 14:29:59 (before accidental DELETE at 14:30:00):
-- mysqlbinlog --start-position=157 --stop-datetime="2026-11-01 14:29:59" binlog.000042 | mysql -u root -p shop_db