ثلاثة مواقف تتكرّر باستمرار:
- تجهيز بنية للاختبار (staging) أو التكامل المستمر (CI) — تريد بنية جداول فارغة كي تعمل الاختبارات على أعمدة وفهارس وقيود حقيقية، لكنك بالتأكيد لا تريد نقل غيغابايتات من صفوف الإنتاج إلى بيئة مؤقتة.
- بيانات بذرية (seed) فقط — البنية موجودة أصلًا في قاعدة البيانات الهدف، وكل ما تحتاجه هو صفوف INSERT لملئها، دون عبارات CREATE التي ستتعارض مع الموجود.
- التخلّص من الضجيج — الـ dump منتفخ بجداول
logsأوsessionsأوaudit_trailأوcacheبعشرات ملايين الصفوف التي لا تريد استيرادها أبدًا.
لماذا لا يكفي 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 صغير ومرتّب — ثم ينهار على ملف حقيقي:
- عبارات INSERT متعددة الأسطر. يمكن لعبارة
INSERT INTO … VALUESواحدة أن تمتدّ آلاف الأسطر. يطابقgrepالسطر الأول ويترك بقية القيم يتيمة، فينتج ملفًا معطوبًا. - عبارات الإدراج الموسَّعة. يجمع mysqldump صفوفًا كثيرة في عبارة عملاقة واحدة. لا تستطيع المرشّحات الموجّهة بالأسطر معرفة أين تنتهي هذه العبارة.
- التعليقات والكتل. تتداخل الكتل الشرطية
/*! … */وعباراتLOCK TABLESوتعليقات--مع البيانات، فيُبقي المرشّح الساذج إما فضلات وإما يقطع شيئًا يحتاجه الاستيراد. - وضع البيانات فقط أسوأ. يتخلّص
grep '^INSERT'الصِّرف من عباراتSETوLOCKالتي تعتمد عليها الصفوف، وأي عبارة INSERT لا تبدأ تمامًا عند العمود صفر تختفي بصمت.
ينتهي بك الأمر إلى تصحيح أخطاء مرشّحك بدلًا من الحصول على بنيتك.
البنية فقط أو البيانات فقط باستخدام DumpCleaner
يفهم DumpCleaner عبارات SQL بدلًا من مطابقة الأسطر، فيفصل البنية عن البيانات بموثوقية — على ملفات بأي حجم:
- اسحب ملف
.sqlإلى DumpCleaner (MySQL أو MariaDB أو PostgreSQL). فهو يحلّل الملف بالبثّ، فيُحمَّل dump بحجم عدة غيغابايت باستهلاك ذاكرة ثابت. - بدِّل أنواع العبارات التي تريدها: CREATE TABLE، CREATE INDEX، INSERT INTO، ALTER، DROP، LOCK، SET. ألغِ تحديد INSERT INTO فتحصل على البنية فقط؛ وألغِ تحديد CREATE TABLE / CREATE INDEX فتحصل على البيانات فقط.
- أو اختر إعدادًا مسبقًا — البنية فقط أو البيانات فقط — لضبط كل المفاتيح بخطوة واحدة، ثم نقِّح لكل جدول إن أردت.
- صدِّر. تحصل على ملف بنية رشيق للاختبار أو 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