it-swarm.asia

هل من الممكن إنشاء / استعادة لقطات قاعدة البيانات بسرعة باستخدام PostgreSQL؟

بادئ ذي بدء ، أنا مطور ، وليس DBA أو مسؤول النظام ؛ أرجوك كن لطيف :)

أنا أعمل على سير عمل تطبيق حيث سيؤدي إجراء مستخدم واحد إلى إحداث تغييرات معقدة في قاعدة البيانات - إنشاء مئات السجلات في بعض الجداول ، وتحديث مئات السجلات في أخرى ، وما إلى ذلك. الكل في الكل ، حوالي 12 جدولًا (من ~ 100 تقريبًا) ) لمست هذا الإجراء. نظرًا للتعقيد ، من الصعب جدًا بالنسبة لي إعادة جميع التغييرات يدويًا قبل أن أتمكن من إجراء اختبار آخر. خلال معظم وقت التطوير ، يمكنني ببساطة إدراج عبارة "ROLLBACK" بالقرب من نهاية سير العمل ، ولكن عندما أقترب من تنفيذ التغييرات ، أحتاج إلى اختبار الشيء الحقيقي.

لدي نسخة محلية من قاعدة بيانات الإنتاج للعمل معها. في حالتي ، يكون التفريغ والاستعادة بين الاختبارات أسرع من كتابة برنامج نصي للتراجع عن جميع التغييرات. إنه أسرع ، لكنه لا يزال يبطئني كثيرًا (تستغرق عملية الاستعادة حوالي 20 دقيقة على جهاز الكمبيوتر المحمول المتقادم). هل هناك أي طريقة يمكنني حفظ لقطة للحالة الحالية لقاعدة البيانات ، ثم استعادتها بسرعة؟

مكفول أن أكون المستخدم الوحيد على النظام ، ولدي وصول الجذر. تفريغ قاعدة البيانات ~ 100MB عند tar'ed و gzip'ed. إصدار PostgreSQL هو 8.3.

شكرا مقدما على أي أفكار مفيدة.

54
Zilk

يمكنك استخدام لقطات على مستوى نظام الملفات ، ولكن هذا غالبًا ما يكون مرهقًا جدًا ، ويحتاج إلى أنظمة ملفات خاصة ، ولا يتوفر دائمًا ، خاصة على أجهزة الكمبيوتر المحمولة القديمة. ؛-)

ماذا عن إنشاء الحالة الأساسية الخاصة بك كقاعدة بيانات ، ثم إنشاء قاعدة بيانات جديدة منها للتشغيل التجريبي الخاص بك ، باستخدام CREATE DATABASE ... TEMPLATE وظائف. بعد الاختبار ، يمكنك التخلص من قاعدة البيانات هذه. ثم قيد السرعة الخاص بك هو في الأساس مجرد وقت cp -R دليل قاعدة البيانات. هذا بنفس السرعة التي ستحصل عليها بدون السحر في نظام الملفات.

36
Peter Eisentraut

استخدم ممتاز ، إنها مثل git لـ قواعد بيانات:

يتيح لك Stellar استعادة قاعدة البيانات بسرعة عندما تكون على سبيل المثال كتابة عمليات ترحيل قاعدة البيانات أو تبديل الفروع أو العبث باستخدام SQL. يتم دعم PostgreSQL و MySQL (جزئيًا).

12
David Portabella

إذا كانت قاعدة البيانات الخاصة بك تعمل في Virtualbox ، فيمكنك بسهولة حفظ اللقطات واستعادة اللقطات لكل من حالة قاعدة البيانات ونظام التشغيل نفسه في بضع ثوانٍ (أو 1-2 دقيقة إذا كان لديك بالفعل الكثير من البيانات في قاعدة البيانات أو نظام التشغيل أو ذاكرة صغيرة جدًا مخصصة للجهاز الظاهري) مجانًا.

في/في معظم الحالات الخاصة بك ، سيكون من الأفضل تثبيت لينكس خفيف الوزن (من خادم Windows) لتشغيل الجهاز الظاهري حيث يتم استضافة قاعدة البيانات مع الأخذ في الاعتبار أن لديك القليل من الموارد المتاحة على جهاز الكمبيوتر المحمول الخاص بك.


في موقع الإنتاج ، أستخدم نسخًا احتياطيًا من اللقطات MediaTemple لتحقيق نفس النتيجة (ولكنها تبلغ 20 دولارًا لكل فتحة نسخ احتياطي ومحددة لخدمة الاستضافة على الويب ، لذلك قد لا تناسبك).

5
wildpeaks

ربما لا تكون الإجابة التي تأملها ، ولكن هل فكرت في مستوى أقل من اللقطة - LVM على سبيل المثال؟

3
Jack says try topanswers.xyz

وجدت هذا السؤال عند محاولة فعل الشيء نفسه وانتهى به الأمر باستخدام git على دليل بيانات postgresql. إن تجاهل التغييرات أمر سهل مثل:

git reset --hard
2
user92843

على الرغم من أنني يجب أن أقول أن Stellar و git reset --hard هو حل مثير للاهتمام ، إلا أنني سأواجه مشكلة في قواعد البيانات والاختبارات الأكبر ، وأنا أستخدم حلول Virtualbox إلخ. كيف ، في أي وقت مضى ، في الاختبارات الأكبر ، تصبح هذه أكثر "إشكالية" بعض الشيء عند استخدام حلول المعدن الخ.

وبالتالي ، يجب أن أذكر ZFS كنظام ملفات لأخذه في الاعتبار في المستقبل للأسباب التالية التي ذكرهاPeter Eisentraut أيضًا:

  1. لقطات - خاصة عند إجراء النسخ المتماثل من Prod إلى QA/DR ، يمكنك استخدام نفس "نظام الملفات" للاختبارات:
#On a replication node, rather stop, snap, restore for a "consistent" backup ;)
su -l -c "/usr/bin/m2ee stop" acw_qa
pg_ctlcluster ${=QA} stop --force
zfs destroy -R $SNAPSHOT
pg_ctlcluster ${=REPLICATION} stop --force
zfs snapshot $SNAPSHOT
pg_ctlcluster ${=REPLICATION} start

zfs destroy $CLONE
zfs clone -o mountpoint=$CLONEDIR $SNAPSHOT $CLONE
rm $CLONEDIR/$CLUSTER/recovery.conf
pg_ctlcluster ${=QA} start
su -l -c "/usr/bin/m2ee start" acw_qa
  1. لإجراء اختبار ، قبل إجراء الاختبار مباشرةً ، توقف postgresql على النحو الوارد أعلاه ، zfs snapshot $SNAPSHOT قم بتشغيل postgresql ، ثم التراجع ، وإيقاف postgresql ، وفقط zfs rollback $SNAPSHOT

  2. الضغط - يحصل Postgresql على ضغط نموذجي 3: 1 في قواعد بياناتي ، لذا يمكنك إجراء المزيد من الاختبارات ؛)

0
Hvisage

هناك خيار آخر يمكن تجربته هو حفظ نسخة من دليل بيانات postgresql ، ثم إعادة كتابة الدليل الحالي بالنسخة عندما تريد استعادته. سيتطلب مساحة أكبر في القرص ، ولكن بالتأكيد سيكون أسرع من الاستعادة من نسخة احتياطية. لست متأكدًا مما إذا كان هذا سيكون أسرع من طريقة القالب ، لذلك ، سيكون من الأفضل إجراء بعض الاختبارات أولاً.

0
Haroldo_OK