পোস্টগ্র্রেএসকিউএল দিয়ে ডেটাবেস স্ন্যাপশটগুলি দ্রুত তৈরি / পুনরুদ্ধার করা সম্ভব?


52

প্রথমত, আমি একজন বিকাশকারী, ডিবিএ বা সিসাদমিন নয়; ভদ্র হোন :)

আমি একটি অ্যাপ্লিকেশন ওয়ার্কফ্লোতে কাজ করছি যেখানে একক ব্যবহারকারীর ক্রিয়া ডেটাবেজে জটিল পরিবর্তন ঘটাবে - কিছু টেবিলে কয়েকশ রেকর্ড তৈরি করবে, অন্যগুলিতে কয়েকশ রেকর্ড আপডেট করবে, ইত্যাদি সব মিলিয়ে, প্রায় 12 টি সারণী (100 ডলারের বাইরে) ) এই ক্রিয়া দ্বারা স্পর্শ করা হয়। জটিলতার কারণে, অন্য পরীক্ষা চালানোর আগে ম্যানুয়ালি সমস্ত পরিবর্তনগুলি আমার কাছে ফিরিয়ে নেওয়া আমার পক্ষে খুব কঠিন। আমার বেশিরভাগ বিকাশের সময়, আমি কেবল কার্যপ্রবাহের সমাপ্তির কাছাকাছি সময়ে একটি "রোলব্যাক" বিবৃতি সন্নিবেশ করতে পারি, কিন্তু যখন আমি আমার পরিবর্তনগুলি ঘটাতে কাছে যাই তখন আমার আসল জিনিসটি পরীক্ষা করা দরকার।

আমার সাথে কাজ করার জন্য প্রোডাকশন ডাটাবেসের স্থানীয় কপি রয়েছে। আমার ক্ষেত্রে, পরীক্ষার মধ্যে ডাম্পিং এবং পুনরুদ্ধার করা সমস্ত পরিবর্তনগুলি পূর্বাবস্থায় ফেলার জন্য স্ক্রিপ্ট লেখার চেয়ে দ্রুত। এটি দ্রুততর, তবে এটি এখনও আমাকে অনেকটা কমিয়ে দিচ্ছে (পুনরুদ্ধারটি আমার বার্ধক্যজনিত ল্যাপটপে প্রায় 20 মিনিট সময় নেয়)। আমি কি ডাটাবেসের বর্তমান অবস্থার একটি স্ন্যাপশট সংরক্ষণ করতে এবং তারপরে দ্রুত পুনরুদ্ধার করার কোনও উপায় নেই?

আমি সিস্টেমে একমাত্র ব্যবহারকারী হওয়ার নিশ্চয়তা পেয়েছি এবং আমার কাছে রুট অ্যাক্সেস রয়েছে। ডেটাবেস ডাম্প যখন ট্যারিড এবং জিজিপ করা হয় তখন 100MB ডলার হয়। PostgreSQL সংস্করণটি 8.3।

কোন সহায়ক ধারণা জন্য অগ্রিম ধন্যবাদ।


আপনি বলছেন যে আপনার কাছে ডাটাবেস ডাম্প আছে, তা কি যথেষ্ট নয়? আপনার সিস্টেমে পরীক্ষা করুন, যদি কিছু ভুল হয়ে যায় তবে ডিবিটিকে তার মূল অবস্থায় ফিরে পেতে এবং বিকাশ চালিয়ে যেতে ডাম্পটি ব্যবহার করুন।
ড্রকলোসোসোস

1
আপনি কি কেবলমাত্র টেবিলগুলি পরিবর্তন করেছেন যা পরিবর্তিত হয়েছে?
জ্যাক ডগলাস

1
@ জ্যাক ডগলাস: আমি ডাম্প থেকে সম্পূর্ণ ডিবি পুনরুদ্ধার করছি। প্রশ্নের মধ্যে থাকা সারণীগুলি ডেটার প্রায় 2/3 অংশ তৈরি করে এবং আমাকে এখনও সঠিক পুনরুদ্ধার আদেশ এবং বিদেশী কী বাধা সম্পর্কে চিন্তা করতে হবে।
জিল্ক

1
@ ড্রকোলোসাস: হ্যাঁ, ডাম্পগুলি পূর্বের অবস্থা পুনরুদ্ধার করার জন্য যথেষ্ট তবে এগুলি তৈরি এবং প্রয়োগ করা খুব ধীর।
জিল্ক

উত্তর:


35

আপনি ফাইল-সিস্টেমের স্তরের স্ন্যাপশটগুলি ব্যবহার করতে পারেন, তবে এটি প্রায়শই জটিল। ;-)

আপনি কীভাবে আপনার বেস স্টেটটি ডেটাবেস হিসাবে তৈরি করেন এবং তারপরে CREATE DATABASE ... TEMPLATEকার্যকারিতাটি ব্যবহার করে আপনার পরীক্ষার জন্য এটি থেকে একটি নতুন ডাটাবেস তৈরি করেন । পরীক্ষার পরে, আপনি সেই ডাটাবেসটি ফেলে দেন। তারপরে আপনার গতির সীমাবদ্ধতা মূলত cp -Rডাটাবেস ডিরেক্টরিতে কেবল সময় । এটি তত দ্রুত আপনি ফাইল সিস্টেম স্ন্যাপশট যাদু ছাড়াই পেতে চলেছেন।


এটা খুব ভাল ধারণা। আমি ডেটাবেস টেম্পলেটগুলি মোটেই ভাবিনি। ধন্যবাদ!
জিল্ক

1
এটি একটি দুর্দান্ত সমাধান, ড্রপ-রিস্টোরের চেয়ে 5x দ্রুত তবে এর একটি খারাপ দিক রয়েছে: এটি করার আগে আপনার বর্তমান সংযোগগুলি ফেলে দেওয়া দরকার অন্যথায় এটি চলতে ব্যর্থ হবে।
sorin

আপডেট: এটি উত্পাদনে কাজ করবে না কারণ উত্স ডাটাবেসের সাথে এর সংযোগ থাকবে। আমাদের আর একটি সমাধান দরকার।
সোরিন

11

স্টেলার ব্যবহার করুন , এটি ডাটাবেসের জন্য গিটের মতো :

স্টেলার আপনাকে যখন ডাটাবেস মাইগ্রেশন লিখতে, শাখা স্যুইচ করতে বা এসকিউএল এর সাথে জগাখিচুড়ি করতে হয় তখন আপনাকে দ্রুত ডাটাবেস পুনরুদ্ধার করতে দেয়। পোস্টগ্রিজ এসকিউএল এবং মাইএসকিউএল (আংশিক) সমর্থিত।



লিকুইবেস স্টেলারের মতো এটি সমর্থন করে না, যেখানে আপনি ডাটাবেস (যেমন ইউনিট পরীক্ষায়) নিয়ে কাজ করতে পারেন এবং পূর্ববর্তী কিছু ট্যাগ হওয়া অবস্থায় বা সময়টিতে রোলব্যাক করতে হতে পারে।
আন্দ্রেয়াস ডায়েরিচ

স্টেলারটি দুর্দান্ত ধারণা বলে মনে হচ্ছে তবে আমার পক্ষে কাজ করছে না
অরল্যান্ডো

5

আপনার ডাটাবেসের মধ্যে চালায় তাহলে Virtualbox , আপনি সহজেই স্ন্যাপশট সংরক্ষণ করুন এবং উভয় ডাটাবেসের রাষ্ট্র এবং কয়েক সেকেন্ডের (অথবা 1-2 মিনিটের মধ্যে ওএস নিজেই স্ন্যাপশট পুনঃস্থাপন যদি সত্যিই থাকতে পারে অনেক ডাটাবেসের মধ্যে তথ্য বা OS বা খুব সামান্য স্মৃতি ভার্চুয়াল মেশিনে বরাদ্দ) নিখরচায়।

আপনার / বেশিরভাগ ক্ষেত্রে, ভার্চুয়াল মেশিনটি চালানোর জন্য হালকা ওয়েট লিনাক্স (উইন্ডোজ সার্ভারের চেয়ে বেশি) ইনস্টল করা ভাল হবে যেখানে আপনার ল্যাপটপে আপনার কাছে খুব কম রিসোর্স রয়েছে বলে উল্লেখ করা হয়েছে।


প্রোডাকশন সাইটে, আমি একই ফলটি অর্জন করতে মিডিয়াটেম্পলের স্ন্যাপশট ব্যাকআপগুলি ব্যবহার করি (তবে এটি ব্যাকআপ স্লট প্রতি 20 ডলার এবং সেই ওয়েবহোস্টিং পরিষেবাদির ক্ষেত্রে নির্দিষ্ট, যাতে এটি আপনার উপযুক্ত নাও হতে পারে)।


আহ কিছু নয়, আমি আপনার মন্তব্যটি দেখতে পাইনি যাতে আপনি ভার্চুয়ালবক্স সম্পর্কে ইতিমধ্যে জানেন know
ওয়াইল্ডপিক্স

3

সম্ভবত আপনি যে উত্তরটির জন্য প্রত্যাশা করছেন তা নয়, তবে আপনি কি কিছু নিম্ন স্তরের স্ন্যাপশ্যাটিং বিবেচনা করেছেন - উদাহরণস্বরূপ LVM?


হ্যাঁ, এটা মনে আসেনি। দুর্ভাগ্যক্রমে, ফাইল সিস্টেম স্ন্যাপশটগুলি বর্তমানে আমি ব্যবহার করছি এমন এফএস দ্বারা সমর্থিত নয় (ext3)। আরেকটি বিকল্প হ'ল পরীক্ষার রানগুলির জন্য ভার্চুয়ালবক্সের মতো একটি ভিএম সেট আপ করা।
জিল্ক

2

একই কাজ করার চেষ্টা করার সময় এই প্রশ্নটি খুঁজে পেয়েছে এবং পোস্টগ্র্যাসকিএল ডেটা ডিরেক্টরিতে গিট ব্যবহার করে শেষ হয়েছে। পরিবর্তনগুলি ত্যাগ করা যেমনটি সহজ:

git reset --hard

6
এটি বড় ডেটাবেসের জন্য কোনও উপকারে আসে না। এছাড়াও, বিভিন্ন আকারের বাইনারি ফাইলগুলির সাথে নির্যাতনকারী গিট কেন?
রোল্যান্ডোমাইএসকিউএলডিবিএ

0

তবুও আরেকটি বিকল্প যা পরীক্ষা করা যেতে পারে তা হ'ল পোস্টগ্র্যাসকিএল ডেটা ডিরেক্টরিটির একটি অনুলিপি সংরক্ষণ করা, তারপরে যখন আপনি এটি পুনরুদ্ধার করতে চান তখন কেবল উপস্থিত ডিরেক্টরিটি অনুলিপি সহ নতুন করে লিখুন। এটির জন্য ডিস্কে আরও স্থানের প্রয়োজন হবে তবে ব্যাকআপ থেকে পুনরুদ্ধার করার চেয়ে অবশ্যই দ্রুততর হবে। আমি নিশ্চিত নই যে এটি টেম্পলেট পদ্ধতির চেয়ে দ্রুততর হবে কিনা, তবে প্রথমে কিছু পরীক্ষা করা ভাল ধারণা হবে।


0

যদিও আমাকে বলার আছে Stellarএবং git reset --hardএটি একটি আকর্ষণীয় সমাধান, তবে আমার বড় ডেটাবেসগুলি এবং পরীক্ষাগুলি নিয়ে একটি সমস্যা হবে এবং আমি Virtualboxইত্যাদি সমাধানগুলি ব্যবহার করব , বড় পরীক্ষায় কখন কী হবে, যখন আপনি কিছুটা আরও "সমস্যাযুক্ত" হয়ে উঠবেন খালি ধাতু ইত্যাদি সমাধান ব্যবহার করছে।

এভাবে ZFSপিটার আইজেন্ট্রাউটও উল্লেখ করেছেন যে নিম্নলিখিত কারণে ভবিষ্যতে এইগুলি বিবেচনা করার জন্য একটি ফাইল সিস্টেম হিসাবে উল্লেখ করতে হবে:

  1. স্ন্যাপশটস - বিশেষত যখন আপনি প্রোড থেকে কিউএ / ডিআর প্রতিলিপি করেন, আপনি পরীক্ষার জন্য একই "ফাইল সিস্টেম" ব্যবহার করতে পারেন:
#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. একটি পরীক্ষা করার জন্য, পরীক্ষার ঠিক আগে উপরে পোস্টগ্র্যাসকিএল থামার জন্য, zfs snapshot $SNAPSHOTপোস্টগ্র্যাসকিএল শুরু করুন, তারপরে রোলব্যাক করতে, পোস্টগ্র্যাস্কিল বন্ধ করুন এবং ঠিকzfs rollback $SNAPSHOT

  2. সংক্ষিপ্তকরণ - পোস্টগ্র্যাস্কেল আমার ডাটাবেসে একটি সাধারণ 3: 1 সংক্ষেপণ পায়, যাতে আপনি আরও অনেক পরীক্ষা করতে পারেন;)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.