स्वचालित DB बैकअप के लिए क्रोनजोब उपसर्ग फ़ाइल को तारीख करने के लिए


12

मैं नवीनतम लिनक्स टकसाल का उपयोग कर रहा हूं। मैं सोच रहा था कि क्या डेटाबेस बैकअप के लिए एक विशेष क्रोनजॉब बनाना संभव है।

मेरी /etc/cronjobफ़ाइल में मेरा निम्नलिखित कोड है:

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh

मेरे /home/users/backup.shपास में:

mysqldump -uroot -p MyDatabase > /home/users/backup_MyDB/full_myDB.sql

इसके बजाय full_myDB.sqlमैं कुछ ऐसा करना चाहूंगा, 2014-04-04_full_myDB.sqlजहां तारीख हमारे पास होने वाली तारीख के आधार पर गतिशील रूप से जोड़ी जाती है।

यदि SQL बैकअप फ़ाइल एक सप्ताह से अधिक पुरानी है, तो मैं क्रोनजॉब को स्वचालित रूप से हटाना चाहूंगा ।

जवाबों:


15

GNU date(लिनक्स मिंट पर डिफ़ॉल्ट) के साथ आप कर सकते हैं:

mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql

1 सप्ताह से अधिक पुरानी फ़ाइलों को हटाने के लिए:

find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +

हालांकि आम तौर पर यह देखने के लिए बुद्धिमान है कि आप हटाने से पहले क्या हटा रहे हैं (कम से कम जब आप स्क्रिप्ट का परीक्षण कर रहे हों) तो बस इसके लिए करें:

find /home/users/backup_MyDB -type f -mtime +7

मैं जवाब तैयार कर रहा था लेकिन आपने मुझे
रमेश

2
@ रमेश, खुशी है कि मैंने इसे बदलने के लिए किसी और को हराया - आमतौर पर मैं पोस्ट करता हूं और किसी के पास पहले से ही एक समान उत्तर है।
ग्रीम

बहुत अच्छा। केवल एक चीज जो मैं अपने उपयोग के लिए बदल रहा हूं वह एक .my.cnf फ़ाइल में db एक्सेस विवरण डाल रहा है।
जोहान डाइक

4

मैंने उपरोक्त जानकारी का उपयोग किया और एक और मामूली अद्यतन प्रदान करना चाहता था जो वास्तव में एक बड़ी टेबल को काट देता है जो अपने बैकअप को धीमा कर रही थी।

उम्मीद है कि यह किसी और की मदद करता है।

उपरोक्त जानकारी का उपयोग करके मैंने निम्नलिखित सामग्री के साथ mysqlbackup.sh नाम की एक मूल शेल स्क्रिप्ट बनाई:

#!/bin/sh
find /data/var/backups/mysql/dumps -type f -mtime +3 -exec rm {} +
mysql -e "truncate table sitename_prod.cache_table"
mysqldump sitename_prod > /data/var/backups/mysql/dumps/$(date +%F)_full_sitename_prod.sql

चलाना सुनिश्चित करें: chmod + x mysqlbackup.sh

मैं भी अपने crontab -e में यह डाल:

# MYSQL Dump and retention for 3 days
30 22 * * * bash /root/bin/mysqldump.sh > /dev/null 2>&1

3

मुझे पता है कि यह एक बड़ा पुराना है, लेकिन मैंने उपरोक्त उत्तरों का उपयोग किया है, और एक फ़ाइल संपीड़न निर्देश जोड़ा है। उम्मीद है कि किसी और को यह उपयोगी लगता है।

1) थोड़ा शोध करने पर 7-ज़िप वहां से सबसे अच्छा कंप्रेसर लगता है। यदि आपका linux distro इसका समर्थन करता है, तो आप apt संस्थापक का उपयोग कर सकते हैं:

sudo apt-get install p7zip-full

वैकल्पिक रूप से, आप tar.gz का उपयोग कर सकते हैं यदि आप इसके साथ अधिक सहज महसूस करते हैं।

2) फिर, आप एक स्क्रिप्ट बनाते हैं, उदाहरण /home/users/backup.sh के लिए सामग्री के साथ:

#!/bin/sh
find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql
7z a /home/users/backup_MyDB/$(date +%F)_full_myDB.7z /home/users/backup_MyDB/*.sql
rm -f /home/users/backup_MyDB/*.sql

यह स्क्रिप्ट 7 दिनों से अधिक की फ़ाइलों को ढूंढेगी और उन्हें हटा देगी, फिर यह sql डंप करेगी, फिर यह निर्देशिका में सभी .sql फ़ाइलों को 7-ज़िप करेगी, फिर यह निर्देशिका में सभी .sql को हटा देगी। BTW, आप वैकल्पिक रूप से डंप से पहले एक mysql कमांड जोड़ सकते हैं, जैसा कि पिछले उत्तर पर नोट किया गया है यदि आपको इसकी आवश्यकता है)

3) हम ऐसा करते हैं chmod +x /home/users/backup.shतो यह निष्पादन योग्य हो सकता है।

३.१) आपको अपनी स्क्रिप्ट का परीक्षण करना चाहिए, यदि यह इच्छानुसार काम करता है

4) हम कार्य के साथ कार्यक्रम करते हैं crontab -e

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh >> /dev/null 2>&1

और बस। यह आपके MySQL डेटाबेस को सप्ताह में प्रत्येक दिन 4:30 बजे (रविवार को छोड़कर) बैकअप देगा, और बैकअप को संपीड़ित करेगा


1

@ ग्रीम के उत्तर में जोड़ने के लिए, यह ध्यान देने योग्य हो सकता है कि आपको कभी-कभी एक क्रॉन जॉब में '%' चरित्र से बचने की आवश्यकता हो सकती है, इसलिए यह इस तरह दिखाई देगा:

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.