تصدير البنية (Schema) فقط من ملف SQL dump

لديك ملف dump كامل على القرص، لكنك تريد البنية فقط — CREATE TABLE والفهارس والمفاتيح الخارجية — دون جداول السجلّات ذات الـ 89 مليون صف. أو العكس: البيانات فقط، دون عبارات CREATE. إليك سبب عجز رايات الـ dump المعتادة عن مساعدة ملف موجود، وكيفية فصل البنية عن البيانات بنقرة واحدة.

ثلاثة مواقف تتكرّر باستمرار:

لماذا لا يكفي mysqldump --no-data

النصيحة الكلاسيكية هي mysqldump --no-data (البنية فقط) أو mysqldump --no-create-info (البيانات فقط). كلاهما راية تصدير: تغيّر ما يحتويه dump جديد من قاعدة بيانات قيد التشغيل. ولا تفعل شيئًا لملف dump تملكه أصلًا على القرص كملف .sql.

عمليًا يصل الملف غالبًا من شخص آخر، أو من مهمة نسخ احتياطي، أو من خادم لم يعد لديك وصول حيّ إليه. لا يمكنك إعادة تشغيل mysqldump على قاعدة بيانات غير قابلة للوصول — فبيانات الاعتماد ذهبت، أو أُوقِف الخادم، أو الملف ببساطة كل ما سُلِّم إليك. عند تلك النقطة تصبح الرايات عديمة الفائدة، ويتبقّى لك تحرير الملف نفسه.

الطريقة اليدوية

الخطوة البديهية هي إزالة الأسطر بـgrep أو sed. للاحتفاظ بالبنية وإسقاط البيانات:

# الاحتفاظ بكل شيء عدا صفوف INSERT
grep -v '^INSERT INTO' dump.sql > schema.sql

# أو الاحتفاظ بصفوف INSERT فقط لملف بيانات فقط
grep '^INSERT INTO' dump.sql > data.sql

يبدو هذا جيدًا على ملف dump صغير ومرتّب — ثم ينهار على ملف حقيقي:

ينتهي بك الأمر إلى تصحيح أخطاء مرشّحك بدلًا من الحصول على بنيتك.

البنية فقط أو البيانات فقط باستخدام DumpCleaner

يفهم DumpCleaner عبارات SQL بدلًا من مطابقة الأسطر، فيفصل البنية عن البيانات بموثوقية — على ملفات بأي حجم:

  1. اسحب ملف .sql إلى DumpCleaner (MySQL أو MariaDB أو PostgreSQL). فهو يحلّل الملف بالبثّ، فيُحمَّل dump بحجم عدة غيغابايت باستهلاك ذاكرة ثابت.
  2. بدِّل أنواع العبارات التي تريدها: CREATE TABLE، CREATE INDEX، INSERT INTO، ALTER، DROP، LOCK، SET. ألغِ تحديد INSERT INTO فتحصل على البنية فقط؛ وألغِ تحديد CREATE TABLE / CREATE INDEX فتحصل على البيانات فقط.
  3. أو اختر إعدادًا مسبقًا — البنية فقط أو البيانات فقط — لضبط كل المفاتيح بخطوة واحدة، ثم نقِّح لكل جدول إن أردت.
  4. صدِّر. تحصل على ملف بنية رشيق للاختبار أو CI، أو ملف dump نظيف للبيانات فقط للتعبئة البذرية.

ولأن المرشّح يراعي العبارات، يُحتفَظ بعبارة INSERT موسَّعة متعددة الأسطر أو تُسقَط ككل — دون أن تُقطع في المنتصف أبدًا.

القوة الحقيقية هي أن التصفية تعمل لكل نوع عبارة ولكل جدول، ويتكامل الأمران. يمكنك الاحتفاظ ببنية كل جدول مع تضمين بيانات INSERT للجداول الثلاثة التي تحتاجها فعلًا فقط — تاركًا جدول logs ذا الـ 89 مليون صف قوقعةً فارغة. وهذا شيء لا تستطيع أي راية --no-data التعبير عنه.

افصل البنية عن البيانات في ثوانٍ

يصفّي DumpCleaner ملف dump موجودًا حسب نوع العبارة وحسب الجدول — البنية فقط، أو البيانات فقط، أو أي مزيج — بالبثّ، وباستهلاك ذاكرة ثابت. تطبيق أصلي لنظامي macOS وiPadOS، بشراء لمرة واحدة.

التنزيل من App Store

الأسئلة الشائعة

هل يمكنني تصدير البيانات دون البنية؟

نعم. عطِّل CREATE TABLE وCREATE INDEX (أو اختر إعداد البيانات فقط) واحتفظ بـ INSERT INTO. يُصدِّر DumpCleaner الصفوف فقط، جاهزة للتحميل في بنية موجودة أصلًا.

هل يحافظ تصدير البنية فقط على الفهارس والمفاتيح الخارجية؟

نعم. يحتفظ وضع البنية فقط بـ CREATE TABLE وCREATE INDEX وALTER TABLE وتعريفات المفاتيح الخارجية — كل ما يعرّف قاعدة البيانات. تُزال صفوف بيانات INSERT فقط.

هل يمكنني المزج — البنية لكل الجداول والبيانات لبعضها؟

نعم. التصفية لكل نوع عبارة ولكل جدول، ويتكامل الأمران. احتفظ ببنية كل جدول مع تضمين بيانات INSERT للجداول القليلة التي تحتاجها فعلًا فقط.

هل يعمل هذا مع PostgreSQL؟

نعم. يقرأ DumpCleaner ملفات dump من MySQL وMariaDB وPostgreSQL ويكتشف التنسيق تلقائيًا، فتعمل تصديرات البنية فقط والبيانات فقط بالطريقة نفسها لملفات pg_dump.

بنية دون بيانات — أو بيانات دون بنية

اسحب، وبدِّل أنواع العبارات، وصدِّر. يقسّم DumpCleaner أي ملف dump إلى الجزء الذي تحتاجه بالضبط.

التنزيل من App Store