रोलिंग समान फ़ाइलों के भंडारण के लिए भिन्न है?


18

काम पर हम अपने mysql डेटाबेस के एक रात के डंप करते हैं। दिन-प्रतिदिन, मैं समझूंगा कि 90-95% के करीब डेटा डुप्लिकेट है, जैसे-जैसे समय बढ़ता जा रहा है। (इस बिंदु पर बिल्ली शायद कुछ 99% हैं)

ये डंप जहां एक लाइन एक एकल mysql INSERT स्टेटमेंट है, इसलिए केवल अंतर पूरी लाइनें हैं, और जिस क्रम में वे फ़ाइल में हैं, उसी क्रम में हैं। यदि मैं उन्हें क्रमबद्ध करता, तो फ़ाइल से फ़ाइल में वास्तविक अंतर बहुत छोटा होता।

मैं देख रहा हूं, और मुझे डंप पर आउटपुट को सॉर्ट करने का कोई तरीका नहीं मिला है। मैं इसे sortकमांड के माध्यम से पाइप कर सकता हूं , हालांकि। फिर समान लाइनों के लंबे, लंबे ब्लॉक होंगे।

इसलिए मैं केवल डिफरेंशियल स्टोर करने का तरीका जानने की कोशिश कर रहा हूं। मैं एक मास्टर डंप के साथ शुरू कर सकता हूं, और प्रत्येक रात उस के खिलाफ अलग हो सकता हूं। लेकिन हर रात डिफरेंस बड़ा होगा। या, मैं अलग-अलग रोल कर सकता था, जो व्यक्तिगत रूप से बहुत छोटा होगा, लेकिन ऐसा लगता है कि इसे गणना करने में अधिक समय और अधिक समय लगेगा, अगर मुझे हर रात पूरी श्रृंखला के एक मास्टर अंतर को एक साथ रखना होगा।

क्या यह संभव है? किस उपकरण के साथ?


संपादित करें मैं नहीं पूछ रहा कि mysql बैकअप कैसे करें। पल के लिए mysql भूल जाओ। यह एक लाल हेरिंग है। मैं जानना चाहता हूं कि रोलिंग की एक श्रृंखला फाइलों की एक श्रृंखला से कैसे भिन्न होती है। प्रत्येक रात हमें एक फ़ाइल मिलती है (जो कि mysqldump फ़ाइल होती है ) जो कि इससे पहले की 99% समान है। हां, हम उन सभी को गज़ब करते हैं। लेकिन यह बेमानी है कि पहली बार में यह सब अतिरेक है। मुझे वास्तव में रात से पहले के मतभेदों की आवश्यकता है ... जो कि रात से पहले केवल 1% अलग है ... और इसी तरह। तो मैं क्या कर रहा हूँ के बाद कैसे diffs की एक श्रृंखला बनाने के लिए है तो मैं केवल दुकान है कि हर रात 1% की जरूरत है।

जवाबों:


14

दो बैकअप टूल जो बाइनरी डिफरेंसेस को स्टोर कर सकते हैं वे हैं rdiff- बैकअप और डुप्लिकेट । दोनों पर आधारित हैं librsync, लेकिन इसके बाद भी वे काफी अलग व्यवहार करते हैं। Rdiff-backup नवीनतम कॉपी और रिवर्स डिफरेंशियल स्टोर करता है, जबकि डुप्लिकेटिटी पारंपरिक इंक्रीमेंटल डिफरेंशियल स्टोर करता है। दो उपकरण भी परिधीय सुविधाओं का एक अलग सेट प्रदान करते हैं।


1
IIUC, rdiff-backup अधिक आकर्षक है, क्योंकि यह एक को सामान्य रूप से बैकअप ब्राउज़ करने की अनुमति देता है, जबकि दोहराव में केवल एक पुरानी कॉपी होती है।
tshepang

मुझे पता है कि प्रश्न + प्रश्न बहुत पुराना है, लेकिन क्या आप कमांड का एक उदाहरण दिखा सकते हैं कि इसका उपयोग कैसे करें? उदाहरण के लिए backup201901.tar.gz, backup201902.tar.gz, ..., backup201912.tar.gz, backup202001.tar.gz। यह भविष्य के संदर्भ के लिए उपयोगी होगा।
बसज

पिछली बार जब मैंने rdiff-backup का अनुसरण किया था, तो मुख्य देवता आगे बढ़ गए थे, और परियोजना में किसी तरह का ठहराव था, पता नहीं कि क्या बदला गया था। यह नेटवर्क पर अविश्वसनीय रूप से धीमा था, अगर यह मायने रखता है।
छिपकली

13

हाल ही में मैं डेटाबेस डेटाबेस को git में संग्रहीत करने की कोशिश कर रहा हूं। यदि आपका डेटाबेस डंप वास्तव में बड़ा है, लेकिन यह अव्यावहारिक हो सकता है, लेकिन यह मेरे लिए छोटे डेटाबेस (वर्डप्रेस साइटों और पसंद) के लिए काम किया है।

मेरी बैकअप स्क्रिप्ट मोटे तौर पर है:

cd /where/I/keep/backups && \
mysqldump > backup.sql && \
git commit -q -m "db dump `date '+%F-%T'`" backup.sql

यह केवल स्टोर अलग है?
user394

2
हाँ। यह बहुत सुविधाजनक है! आप फ़ाइल को किसी भी समय से "चेक आउट" कर सकते हैं, और git अपने आप ही आपको पूरी फ़ाइल देने के लिए डिफरेंसेस को संयोजित कर देगा क्योंकि यह उस समय अस्तित्व में था।
sep332

1
यह ब्लॉग पोस्ट (मेरा नहीं) अधिक विवरण में जाता है: viget.com/extend/backup-your-database-in-git टिप्पणी पेशेवरों और विपक्ष और चेतावनी में अधिक मिलता है। मैं यह भी जोड़ूंगा कि यदि आप git का उपयोग करते हैं, तो आपको वापस संस्करण बनाने में सक्षम होने से अधिक मिलता है। आप डंप को भी टैग कर सकते हैं, या अलग-अलग शाखाएं (देव / ठेस) कर सकते हैं। जिस तरह से मैं इसे देखता हूं वह git है (या अपना पसंदीदा आधुनिक संस्करण नियंत्रण प्रणाली सम्मिलित करें) अपने स्वयं के अंतर / gzip 'समाधान' को रोल करने से बेहतर काम करता है। इस लेख के बारे में एक चेतावनी: जब तक आप उन्हें सार्वजनिक नहीं करना चाहते (या एक निजी रेपो के लिए भुगतान कर रहे हैं) तब तक अपने डंप को धक्का न दें।
सराबोर

1
Git केवल स्टोर भिन्न नहीं करता है । वास्तव में, मुख्य रूप से यह प्रत्येक संशोधन के पूर्ण स्नैपशॉट को संग्रहीत करता है, लेकिन विभिन्न अनुकूलन के साथ। देखें इस उत्कृष्ट जवाब और उसके प्रश्न
tremby

3

आप ऐसा कुछ कर सकते हैं ( a.sqlअपने साप्ताहिक बैकअप के साथ)।

mysqldump > b.sql
diff a.sql b.sql > a1.diff
scp a1.diff backupserver:~/backup/

आपकी विस्तृत फाइलें सप्ताह के अंत तक बड़ी हो जाएंगी।

मेरा सुझाव हालांकि यह सिर्फ gzip है ( gzip -9अधिकतम संपीड़न के लिए उपयोग करें )। हम इस समय ऐसा करते हैं और यह 59MB gz-file का उपयोग करता है जबकि मूल 639MB है।


हम पहले से ही उन्हें gzipping कर रहे हैं :)
user394

1

डेटाबेस डंप के आकार और वास्तविक बनावट की समानता के आधार पर, कई संभावित दृष्टिकोणों का पालन किया जा सकता है:

  1. एक डुप्लिकेटिंग बैकअप प्रोग्राम लागू करें जो ओएम अनुरोधों के रूप में रोलिंग चेकसम का उपयोग करता है, जैसे कि असंबद्ध डंप पर restic ( https://restic.net/ ) या borgbackup ( https://borgbackup.readthedocs.io/ )। दोनों सिस्टम FUSE के माध्यम से एक निश्चित बैकअप संस्करण को आगे बढ़ाने की अनुमति देते हैं और हमेशा के लिए वृद्धिशील तरीके से काम करते हैं।
  2. डेटाबेस से घटाव डेटाबेस संरचना, NCBI के लोग अपने बड़े जेनेटिक्स डेटा बेस के लिए कैसे करते हैं, इसके समान है। वह यह है: आप डेटाबेस स्कीमा बनाने के लिए SQL स्क्रिप्ट बनाएंगे (जैसे ftp://ftp.ncbi.nlm.nih.gov/snp/organisms/human_9606_b151_GRC38p7/database/organism_schema/ ) और अलग से तालिकाओं की सामग्री को स्टोर करें। सम्मिलित बयानों के बिना क्लीयरटेक्स या संपीड़ित द्विआधारी प्रारूप (जैसे कि ftp में किया गया है। http://ftp.ncbi.nlm.nih.gov/snp/organisms/human_9606_b151_GRCh38h7/database/organism_data/) जैसे टैब या अल्पविराम द्वारा अलग किए गए मान। बेशक, एक अलग आयात दिनचर्या की आवश्यकता होती है जो डेटा को वापस डेटा बेस में आयात करने के लिए समय में आवेषण स्टेटमेंट बनाती है, यानी बैकअप से पुनर्स्थापित करना। यदि आपका DBMS एक सीएसवी फ़ाइल आयातक प्रदान करता है, तो अतिरिक्त स्क्रिप्ट की आवश्यकता को छोड़ा जा सकता है। इतनी सिकुड़ी हुई टेक्स्ट फाइलें फिर से ऊपर दिए गए या अन्य नियमित बैकअप प्रोग्राम जैसे rdiff- बैकअप में फीड की जा सकती हैं।
  3. एक ऐसा समाधान चुनें, जहां संरचना और सामग्री को arff फ़ाइलों की तरह एक प्रारूप का उपयोग करके युग्मित किया जाता है, जैसे WEKA उपयोग कर रहा है ( https://www.cs.waikato.ac.nz/ml/weka/arff.html ): संरचना और डेटा प्रकार स्तंभों को फ़ाइल हेडर में घोषित किया जाएगा, और वास्तविक सामग्री को एक बार फिर सीएसवी जैसे फॉर्म में @DATA स्टेटमेंट द्वारा अलग किया जाएगा। आजकल ETL उपकरण बहुत सारे डेटा बेस कनेक्टर के अलावा एक arff रीडर प्रदान करते हैं। फाइलें खुद को फिर से नियमित बैकअप कार्यक्रमों में खिलाया जा सकता है

यह उत्तर इस सवाल का जवाब देता है "डेटाबेस डंप के बैकअप कैसे करें", लेकिन अधिक सामान्य प्रश्न नहीं "अत्यधिक समान बैकअप के बैकअप कैसे रोल करें", जो मैंने पूछा है
user394

ईमानदारी से मुझे संदेह है कि आप वास्तव में क्या हासिल करना चाहते हैं वह है समर्पण, जिसका उल्लेख 1 दृष्टिकोण में किया गया है। हो सकता है कि आप restic.net/blog/2015-09-12/restic-foundation1-cdc पर एक नज़र डालना चाहेंगे, जहां यह वर्णित है, और शायद तब आप उन्हें एक कोशिश देना चाहेंगे?
jf1

यह टिप्पणी, विस्तार से बताई गई, आपके वर्तमान की तुलना में बहुत अधिक प्रासंगिक जवाब देगी।
user394

-3

(मैंने उत्पादन में ऐसा नहीं किया है।)

प्रति दिन या सप्ताह में एक बार पूरा बैकअप लें। बैकअप रिले प्रति घंटे या दिन में एक बार लॉग इन करता है।


रिले लॉग क्या है?
user394
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.