मैं mysql डेटाबेस का बैकअप कैसे ले सकता हूं, लेकिन कम प्राथमिकता पर?


15

मैं एक डेटाबेस का बैकअप लेना चाहता हूं, लेकिन दिन के दौरान जब सर्वर पर लोड होता है। यह महत्वपूर्ण है कि बैकअप एक ही सर्वर पर चल रहे अपाचे और अन्य डेटाबेस को प्रभावित नहीं करता है।

Mysqldump कमांड का उपयोग करना संभव होना चाहिए , लेकिन कम प्राथमिकता पर कमांड चलाएं।

मैं यह कैसे कर सकता हूँ?

अपडेट: ऐसा लगता है जैसे mysqldump के साथ अच्छा प्रयोग करने से काम नहीं चलता क्योंकि mysqldump एक नई प्रक्रिया को जन्म देता है।


क्या आपने mysqlhotcopy को देखा है?

@ एफएसबी mysqlhotcopy कैसे समर्थन करता है जो ओपी चाहता है?
टॉमस

जवाबों:


8

यदि आपके पास एक अतिरिक्त सर्वर है जो आपके सर्वर के राइट लोड के साथ सामना कर सकता है, तो आप उस सर्वर पर प्रतिकृति सेट कर सकते हैं, और फिर दास सर्वर से बैकअप ले सकते हैं। इसका यह भी लाभ है कि आप बैकअप करते समय प्रतिकृति को रोक सकते हैं और डेटाबेस सर्वर को प्रभावित किए बिना एक डेटाबेस में अपने डेटा का लगातार स्नैपशॉट, या सभी डेटाबेस में सभी तालिकाएँ प्राप्त कर सकते हैं। यदि आपके पास संसाधन हैं तो मैं हमेशा MySQL का बैकअप लेने की सलाह देता हूं।

एक अच्छे बोनस के रूप में, अब आपके पास केवल पढ़ने के लिए एक गुलाम है जिसका उपयोग आप लंबे समय तक चलने वाले प्रश्नों के लिए कर सकते हैं।


दुर्भाग्य से यह विकल्प दिखता है कि यह सबसे अधिक काम है, लेकिन मुझे इसका एकमात्र वास्तविक विकल्प लगता है अगर मुझे मुख्य सर्वर पर न्यूनतम प्रभाव चाहिए।
andyuk

2
यदि आप ऑपरेशनों को प्रभावित नहीं करना चाहते हैं तो यह एक उचित रूप से क्विज़्ड बैकअप प्राप्त करने का एकमात्र तरीका है। चूंकि धीमा होने mysqldumpसे या तो एक लंबे लॉक का आयोजन किया जाएगा या तालिकाओं को आउट-ऑफ-सिंक किया जाएगा।
डैन कार्ली

15

एंडी, अब तक मैं अनुमान लगा रहा हूं कि आपके पास समाधान खोजने के लिए बहुत समय है। मैं हाल ही में इस के लिए एक समाधान के साथ आया हूँ जो tsheets पर मेरे लिए बहुत अच्छा काम कर रहा है, और मुझे लगा कि मैं इसे साझा करूँगा।

cstream एक सामान्य-उद्देश्य स्ट्रीम-हैंडलिंग उपकरण है जैसे UNIX dd, आमतौर पर कमांडलाइन-निर्मित पाइप में उपयोग किया जाता है। जो चीज हमारे लिए उपयोगी है, वह यह है कि यह आपको सभी इनपुट के लिए अधिकतम बैंडविड्थ निर्दिष्ट करने की अनुमति देता है। इसका अर्थ है कि आप अपने mysqldump कमांड के डिस्क IO को इस तरह से एक साधारण कमांड के साथ सीमित कर सकते हैं:

mysqldump --single-transaction --quick -u <USER> -p<PASS> <Database> | cstream -t 1000000 > backup.sql

यह मानते हुए कि आप एक डेटाबेस का समर्थन कर रहे हैं, जो सभी InnoDB तालिकाओं का उपयोग करता है, उपरोक्त कमांड सुरक्षित है (अन्य प्रश्नों को प्रभावित नहीं करेगा) और यह डिस्क को सिर्फ एक मेगाबाइट प्रति सेकंड में पढ़ते हुए सीमित करते हुए आपके mysqldump करेगा। जो भी मूल्य आपके पर्यावरण को आपके ग्राहक के अनुभव को प्रभावित किए बिना बैकअप प्रदर्शन करने की अनुमति देगा -t पैरामाटर के साथ बैंडविड्थ को समायोजित करें।


बस परीक्षण किया गया है और मैं एक आकर्षण की तरह काम करता हूं! ब्रैंडन साझा करने के लिए धन्यवाद!
सूक्रोट्रॉनिक

4

FWIW आपको pv ( http://linux.die.net/man/1/pv ) के साथ भी ऐसा करने में सक्षम होना चाहिए

mysqldump --single-transaction --quick -u -p | pv --रेट-लिमिट 1m> डेस्टिनेशन (या | nc or | tar cfj backup.bz2 -)

इसके बारे में अच्छी बात यह है कि प्रगति की निगरानी के लिए विभिन्न विकल्प हैं और -R विकल्प जो आपको पहले से चल रही प्रक्रिया में विकल्प पास करने की अनुमति देता है, जैसे; - ट्रांसफर दर को बदलने के लिए सीमा-सीमा।


1

यदि आप innodb का उपयोग करते हैं तो आप xtrabackup को thethrottle विकल्प के साथ आज़मा सकते हैं ।

आप आयनिस को देख सकते हैं और इसके साथ mysqldump चला सकते हैं।

या हो सकता है कि आप बाइनरी लॉगिंग को mysql में सक्षम करना चाहते हों और प्रति सप्ताह / रात में एक बार फुल डंप चलाते हों, जबकि बिन-लॉग्स को प्रत्येक 1-2hours पर सुरक्षित स्थान पर कॉपी करना। और .. बैकअप-ओनली पर्पस के लिए रीड-ओनली स्लेव ऑप्शन है।


0

यदि आप इसे लिनक्स, या किसी अन्य * निक्स संस्करण पर चला रहे हैं, तो आप इसे निम्न के साथ कर सकते हैं:

अच्छा -n ## mysqldump

यह इसे कम समयबद्धता प्राथमिकता देगा। शेड्यूलिंग प्राथमिकता की सीमा -20 (उच्चतम प्राथमिकता) से 19 (सबसे कम प्राथमिकता) के लिए डिफ़ॉल्ट अच्छा है 10 यदि एन-तर्क गलत है ..


0

cron.d / mysql_dump:

17 22 * * * backup touch /home/backup/all_databases.sql && chmod 600 /home/backup \ 
/all_databases.sql && ionice -n 7 /usr/bin/mysqldump -u root -ppassword --opt --all- \
databases > /home/backup/all_databases.sql && nice -n 20 bzip2 -f \
/home/backupall_databases.sql

I / O प्राथमिकता के लिए आयनिस और सीपीयू प्राथमिकता के लिए अच्छा है।

Vmstat 5 को चलाएं, उस कॉलम की जांच करें जो WA कहता है। उच्च मूल्य का मतलब है कि सीपीयू I / O की प्रतीक्षा कर रहा है। आयनिस का उपयोग करें, यदि इसका सिर्फ सीपीयू लोड हो, तो अच्छा उपयोग करें।

अद्यतन करने के लिए प्रतिक्रिया:

लगता है आप सही हैं। यह mysql को कॉल करता है जो निड नहीं है। मुझे लगता है कि आप इसके लिए renice का उपयोग कर सकते हैं और इसे चलाने के बाद अच्छा मूल्य निर्धारित कर सकते हैं।

मेरे पास हालांकि आपके लिए एक उपयोगी स्क्रिप्ट बनाने के लिए एटीएम को डंप करने के लिए पर्याप्त रूप से बड़ा डेटाबेस नहीं है।

प्रतिकृति, जैसा कि आपके लिंक का सुझाव है, जाने का एक तरीका है। एन्थॉयर होस्ट पर प्रतिकृति, स्टॉप और डंप।


0

अपने MySQL डेटा को LV पर रखें, और एक niced mylvmbackup जॉब का उपयोग करें जो LV का स्नैपशॉट लेता है और MySQL डेटा फ़ाइलों को टार करता है। इस तरह आप तालिकाओं को लॉक नहीं करते हैं, अपने अनुप्रयोगों पर प्रभाव को केवल IO लोड तक कम करते हैं।


0

आप हमेशा पीक आवर्स के दौरान इसे नहीं चलाने की कोशिश कर सकते हैं। आप जो भी प्राथमिकता का उपयोग करते हैं, डंप अभी भी आपके सभी तालिकाओं पर ताला लगाने की आवश्यकता है।


यह सच नहीं है: यदि टेबल InnoDB हैं, तो पढ़ने के लिए उन पर कोई ताला नहीं लगाया गया है।
dr01
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.