जीवन के हर पहलू के वर्तमान तकनीकी विकास ने डेटा को सोने और चांदी की तुलना में अधिक कीमती बना दिया है। यदि आप डेटा प्राप्त कर सकते हैं, विकसित कर सकते हैं और उसकी रक्षा कर सकते हैं, तो आप डेटा गॉड होने से एक कदम दूर हैं। फिर भी, ई-कॉमर्स, ईंधन, परिवहन और खाद्य परिदृश्य जैसे जीवन पहलुओं को नियंत्रित करने वाली बड़ी कंपनियां एक अपरिहार्य पतन से खुद को बचाने के लिए डेटा सुरक्षा पर भरोसा करती हैं।
अभी, डेटा खोना आपके जीवन बीमा को खोने जैसा है। तो आप जिस डेटाबेस प्रबंधन प्रणाली का उपयोग कर रहे हैं उसका बैकअप ओरिएंटेशन होना चाहिए। यदि आप एक MySQL व्यवस्थापक या बढ़ते डेटा से निपटने वाले उपयोगकर्ता हैं, तो आपको बार-बार बैकअप स्वचालन योजना से अधिक लागू करने पर विचार करना चाहिए। कारण? आप अंततः डेटा हैक के शिकार हो सकते हैं या दुर्घटनावश अपना डेटा भी बदल सकते हैं।
ऐसी परिस्थितियों से डेटा उल्लंघनों को माफ किया जा सकता है, खासकर जब आपके पास डेटाबेस बैकअप योजना नहीं है। यदि आप एक निवेशित MySQL उपयोगकर्ता या व्यवस्थापक हैं, तो यह आलेख आपकी डेटाबेस बैकअप चिंताओं को ठीक करने के लिए यहां है। हम दो उद्देश्यों को पूरा करेंगे। सबसे पहले, आप "mysqldump" के माध्यम से निर्यात डेटाबेस के कार्यान्वयन को समझेंगे। फिर, अंत में, हम इस बारे में बात करेंगे कि कैसे "क्रोंटैब" का उपयोग स्वचालन के माध्यम से इस पूरी प्रक्रिया को आसान बना सकता है।
डेटा बैकअप निर्देशिका तैयार करें
चूंकि लिनक्स एक MySQL डेटा बैकअप गंतव्य के लिए उपयोगकर्ता की सिफारिश नहीं करता है, यह आप पर निर्भर है कि आप एक उपयुक्त बैकअप स्थान चुनें। उदाहरण के लिए, इस ट्यूटोरियल गाइड में, हम "/var/www_my_backups/" में एक बैकअप डायरेक्टरी के तहत काम करेंगे। हम केवल MySQL डेटा बैकअप तंत्र को समझने के लिए इस दृष्टिकोण पर विचार कर रहे हैं। आदर्श रूप से, यह अनुशंसा की जाती है कि सभी महत्वपूर्ण डेटा बैकअप ऑफसाइड सर्वर पर हों।
आप निम्न के समान टर्मिनल कमांड के माध्यम से अपनी स्थानीय मशीन पर अपनी पसंदीदा बैकअप निर्देशिका बना सकते हैं:
$ sudo mkdir /var/www_my_backups/
सुनिश्चित करें कि आप जिस Linux-संचालित बैकअप मशीन का उपयोग कर रहे हैं, उसने आपको रूट एक्सेस या sudo विशेषाधिकार प्रदान किए हैं। यदि आपके पास बनाई गई बैकअप निर्देशिका तक स्वामी की पहुंच नहीं है, तो आपको mysqldump परीक्षण चलाते समय अनुमति त्रुटियों का सामना करना पड़ेगा। यदि आपके पास बनाए गए बैकअप फ़ोल्डर पर स्वामित्व विशेषाधिकार हैं, तो निम्न कमांड को वर्तमान में सक्रिय सिस्टम उपयोगकर्ता और विवरण सूचीबद्ध करना चाहिए।
$ sudo chown $(whoami):$(whoami) /var/www_my_backups/
mysqldump क्लाइंट उपयोगिता
यह MySQL टूल तार्किक बैकअप करता है। इसके परिणामस्वरूप कई SQL स्टेटमेंट सेट होते हैं, जो निष्पादित होने पर मूल डेटाबेस तालिका डेटा और ऑब्जेक्ट परिभाषाओं को फिर से बनाते हैं। इसके अलावा, एक या कई MySQL डेटाबेस डंप का बैकअप लिया जाता है या द्वितीयक SQL डेटाबेस सर्वर पर स्थानांतरित किया जाता है।
एक मानक mysqldump कमांड को निम्न कमांड सिंटैक्स द्वारा दर्शाया जाता है।
$ mysqldump -u [mysql_username] -p[mysql_password] [mysql_database_name] > /path/to/[mysql_dump_file_name].sql
- -u [mysql_username]: MySQL डेटाबेस के एक विशेषाधिकार प्राप्त उपयोगकर्ता का प्रतिनिधित्व करता है। यह उपयोगकर्ता डेटाबेस डंप संचालन को निष्पादित करने में सक्षम होना चाहिए।
- -p[mysql_password]: MySQL डेटाबेस के उपयोगकर्ता पासवर्ड का प्रतिनिधित्व करता है। “-p” और “[mysql_password]” के बीच स्पेस न जोड़ें।
- [mysql_dump_file_name]: आपके MySQL डेटाबेस के नाम का प्रतिनिधित्व करता है।
- >: आउटपुट डंप के गंतव्य की ओर इशारा करता है
- /पथ/से/[mysql_dump_file_name].sql: संबंधित डंप फ़ाइल के पथ स्थान को इंगित करता है। आप चाहें तो इस डंप फ़ाइल [mysql_dump_file_name] को एक कस्टम नाम दे सकते हैं।
इससे पहले कि हम इस ट्यूटोरियल गाइड के साथ आगे बढ़ें, "-p [mysql_password]" के बारे में कुछ ध्यान देने योग्य बात है। हालांकि यह आलेख मार्गदर्शिका कई MySQL डंप उदाहरणों के साथ इसके उपयोग को जोड़ने पर ध्यान केंद्रित करेगी, आपको अपने वास्तविक MySQL बैकअप डंप को संभालते समय सीधे इसका उपयोग करने से बचना चाहिए, विशेष रूप से एक साझा नेटवर्क में।
एक चल रहे डंप को "ps ax" जैसे द्वि-आयामी कमांड से हाईजैक किया जा सकता है, जिससे संबंधित डेटाबेस उपयोगकर्ता नाम और पासवर्ड का पता चलता है। हालाँकि, अपने MySQL डेटाबेस पासवर्ड को स्टोर करने के लिए "~/.my.cnf" स्थान का उपयोग करने से कहा गया डंप कमांड में "-p [mysql_password]" का उपयोग अनावश्यक हो जाता है। यदि यह डंप कमांड क्रॉन जॉब के माध्यम से निष्पादित हो रहा है, तो कमांड विकल्प "-डिफॉल्ट्स-अतिरिक्त-फ़ाइल =/पथ/से/.my.cnf" डेटाबेस पासवर्ड के स्थान पर mysqldump कमांड को इंगित करना चाहिए।
कुछ MySQL डेटाबेस बैकअप उदाहरण
आइए हम कई उपयोगकर्ता परिदृश्यों पर विचार करें जहां हम MySQL डेटाबेस डेटा का बैकअप लेने के लिए mysqldump कमांड का उपयोग कर सकते हैं।
सभी डेटाबेस का बैकअप लेना
आपके mysqldump कमांड में कमांड विकल्प "-ऑल-डेटाबेस" का उपयोग करना आपके लिनक्स सिस्टम पर सभी MySQL डेटाबेस डंप का ख्याल रखेगा। उदाहरण के लिए, निम्न आदेश दर्शाता है कि आपके सभी MySQL डेटाबेस को पहले से मौजूद "/var/www_my_backups/" फ़ाइल में कैसे डंप किया जाए। इस Linux सिस्टम का उपयोगकर्ता रूट होना चाहिए या उसके पास sudo विशेषाधिकार होना चाहिए।
हमारे मामले में, और आपकी समझ के लिए, हमने अपनी डंप फ़ाइल को "all-databases.sql" नाम दिया है, लेकिन आप अपनी पसंद के किसी अन्य नाम का उपयोग कर सकते हैं। चूंकि हम सभी डेटाबेस के साथ काम कर रहे हैं, इसलिए रूट MySQL अकाउंट यूजर होना जरूरी है।
$ mysqldump -u root -p[mysql_password] --all-databases > /var/www_my_backups/all-databases.sql
एक डेटाबेस का बैकअप लेना
यदि आपके लिए केवल एक MySQL डेटाबेस महत्वपूर्ण है, तो mysqldump कमांड के साथ इसका बैकअप बनाने के लिए "[mysql_database]" कमांड विकल्प को वास्तविक नाम से बदलने की आवश्यकता है। डंप फ़ाइल नाम इस डेटाबेस का नाम "[mysql_database].sql" ले सकता है ताकि बाद में इसे ट्रेस करना और पुनर्स्थापित करना आसान हो जाए। यदि आप चाहें तो आप किसी अन्य कस्टम डंप फ़ाइल नाम के साथ भी जा सकते हैं।
यह उदाहरण कमांड रूट उपयोगकर्ता का उपयोग करके कार्यान्वित किया जाता है, लेकिन लक्षित डेटाबेस तक पहुंच वाला कोई अन्य उपयोगकर्ता एक व्यवहार्य विकल्प है।
$ mysqldump -u root -p[mysql_password] [mysql_database_name] > /var/www_my_backups/[mysql_database_name].sql
एकाधिक डेटाबेस का बैकअप लेना
हो सकता है कि आपके पास विशिष्ट MySQL डेटाबेस चयन हो जिसका आप बैकअप लेना चाहते हैं। इस मामले में, "[mysql_database_name]" कमांड विकल्प एक से अधिक बार दिखाई देगा, और प्रत्येक मामला उस डेटाबेस के नाम से जुड़ा होता है जिसे आप बैकअप करना चाहते हैं। इन डेटाबेस के नामों को mysqldump कमांड पर रखना याद रखें। डंप फ़ाइल "[mysql_database_name].sql" को भी एक अद्वितीय नाम से जोड़ा जाना चाहिए जिसे आप याद रखेंगे।
$ mysqldump -u root -p[mysql_password] [mysql_database_1_name] [mysql_database_2_name] > /var/www_my_backups/[mysql_databases_1_2_names].sql
एक टेबल का बैकअप लेना
जब आपका बैकअप रूटीन केवल एक विशिष्ट डेटाबेस तालिका के बाद होता है, तो इसका बैकअप बनाने में डेटाबेस नाम और डेटाबेस तालिका का नाम दोनों होना चाहिए, जो mysqldump कमांड के कमांड विकल्प के रूप में होता है। आप अपनी डंप फ़ाइल को लक्षित डेटाबेस तालिका के समान नाम दे सकते हैं, उदा। [mysql_database_table_name].sql.
$ mysqldump -u root -p[mysql_password] [mysql_database_name] [mysql_database_table_name] > /var/www_my_backups/[mysql_databases_table_name].sql
एकाधिक तालिकाओं का बैकअप लेना
जब आप कई विशिष्ट MySQL डेटाबेस तालिकाओं का बैकअप लेना चाहते हैं, तो आपके सभी चयनित डेटाबेस तालिका नामों का उल्लेख इन तालिकाओं को होस्ट करने वाले डेटाबेस नाम के बाद आना चाहिए। लक्षित डंप फ़ाइल [mysql_database_tables_1_2_names].sql
जैसा नाम ले सकती है$ mysqldump -u root -p[mysql_password] [mysql_database_name] [mysql_database_table_1_name] [mysql_database_table_2_name] > /var/www_my_backups/[mysql_databases_tables_1_2_names].sql
दूरस्थ डेटाबेस का बैकअप लेना
यह उदाहरण कार्यान्वयन भी सीधा है। MySQL डेटाबेस डंप कमांड को रिमोट मशीन के होस्टनाम या संबंधित आईपी पते के बाद "-h" कमांड विकल्प को शामिल करना होगा। अन्य सभी सामान्य डेटाबेस बैकअप कमांड सिंटैक्स का पालन करना चाहिए।
$ mysqldump -h [remote_computer_ip_or_hostname] -u root -p[mysql_password] [mysql_database_name] > /var/www_my_backups/[remote_mysql_database_name].sql
आप पहले से चर्चा किए गए अन्य डेटाबेस बैकअप मामलों से निपटने के लिए इस mysqldump कमांड को समायोजित कर सकते हैं, उदाहरण के लिए, कई डेटाबेस या तालिकाओं के साथ MySQL बैकअप।
संपीड़न से जुड़े डेटाबेस का बैकअप लेना
यदि आप अपने डेटा बैकअप को कंप्रेशन के साथ जोड़ना चाहते हैं, तो “| gzip -c>” mysqldump कमांड विकल्प का उपयोग gzip आउटपुट को पाइप करने के लिए किया जा सकता है।
$ mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz
यदि आपका MySQL डेटाबेस बहुत बड़ा है और आप संपीड़न प्रगति का ट्रैक रखना चाहते हैं, तो हमेशा वर्बोज़ विकल्प को लागू करने पर विचार करें जैसा कि निम्नलिखित उदाहरण में दिखाया गया है।
$ mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c --verbose > /var/www_my_backups/[mysql_database_name].sql.gz
MySQL डेटाबेस को पुनर्स्थापित करना
एक बार जब आप अपने MySQL डेटाबेस बैकअप के साथ कर लेते हैं, तो आगे क्या करें? आप उस डेटा को कैसे एक्सेस करते हैं जिसे आपने इतनी सावधानी से सुरक्षित किया है? अपने डेटा को पुनर्स्थापित करने के लिए निम्न MySQL पुनर्स्थापना सिंटैक्स का पालन करना आवश्यक है।
$ mysql -u [mysql_username] -p[mysql_password] [mysql_database_name] < /path/to/[mysql_database_name].sql
जैसा कि आपने नोट नहीं किया होगा, इस डेटाबेस बहाली कमांड और डेटाबेस बैकअप कमांड के बीच एकमात्र अंतर यह है कि हम "mysqldump" विकल्प के बजाय "mysql" विकल्प और ">" विकल्प के बजाय "<" विकल्प का उपयोग करते हैं।
MySQL बैकअप को स्वचालित करना
लिनक्स ऑपरेटिंग सिस्टम कई उपयोगी सेवाओं से लैस है जो डेटाबेस व्यवस्थापक के लिए अमूल्य हैं जैसे कि MySQL RDBMS के तहत। इन सेवाओं में से एक क्रॉन सेवा है। यह स्वचालित आदेशों को शेड्यूल करने में प्रभावी है। ये आदेश, एक बार बनाए जाने के बाद, क्रोंटैब क्रॉन टेबल को आवंटित किए जाते हैं। आप निम्न आदेश के माध्यम से crontab तक पहुँच सकते हैं।
$ sudo crontab -e
यदि संकेत दिया जाए, तो हो सकता है कि यह आदेश नैनो पाठ संपादक का चयन करने के लिए अपने निष्पादन को किसी पाठ संपादक से संबद्ध करना चाहे।
"/tmp/crontab.LVY6A9/crontab" नाम की एक फाइल खुलेगी। इस crontab फ़ाइल के निचले भाग में, एक लागू MySQL डंप कमांड के साथ एक व्यवहार्य क्रॉन शेड्यूल इनपुट करें। नीचे दिया गया उदाहरण दैनिक डेटाबेस बैकअप के लिए gzip संपीड़न के उपयोग को लागू करता है। कभी-कभी आपके पास बैकअप के लिए निर्धारित बड़ी .sql फ़ाइलें हो सकती हैं। gzip का उपयोग बैकअप संग्रहण से पहले ऐसी फ़ाइलों को उचित आकार में कम कर देता है। यह बैकअप मेमोरी मैनेजमेंट में मदद करता है।
00 03 * * * mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz
कमांड विकल्प "00 03 ***" की व्याख्या निम्नलिखित तरीके से की जा सकती है। हर 24 घंटे में 3 बजे के बाद, mysqldump कमांड को डेटाबेस का बैकअप लेने के लिए निष्पादित किया जाता है। डेटाबेस बैकअप फ़ाइल जो वर्तमान में इस बैकअप प्रक्रिया के प्रारंभ होने से पहले मौजूद थी, को अधिलेखित कर दिया गया है। आपके मामले में, आपको अपने डेटाबेस बैकअप ऑटोमेशन को crontab के माध्यम से कार्रवाई में देखने के लिए 24 घंटे के बाद प्रतीक्षा करने की आवश्यकता नहीं है।
आप crontab फ़ाइल पर "00 03 ***" विकल्प को "02 00 ***" की तरह संपादित कर सकते हैं, और केवल दो मिनट में, बैकअप प्रक्रिया को स्वयं-प्रारंभ करना चाहिए। वैकल्पिक रूप से, यदि आपका समय 22:30 है, तो "34 22 ***" के साथ फ़ाइल को संपादित करने से डेटाबेस बैकअप प्रक्रिया 22:34 पर आरंभ हो जाएगी। इस कमांड को निष्पादन योग्य बनाने के लिए इसे बंद करने से पहले इस क्रॉस्टैब फ़ाइल को सहेजना (Ctrl + X) याद रखें।
आपके द्वारा निर्धारित मिनटों के बाद, क्रॉन जॉब को निष्पादित किया जाना चाहिए था। फिर, अपने टर्मिनल पर बनाए गए बैकअप फ़ोल्डर को सूचीबद्ध करें, और बनाई गई .sql.gz बैकअप फ़ाइल मौजूद होनी चाहिए।
$ ls -l /var/www_my_backups/
परिणामी आउटपुट निम्न के जैसा होना चाहिए:
-rw-r--r-- 1 root root 36M Jul 29 22:24 [mysql_database_name].sql.gz
यदि आपको .sql.gz MySQL बैकअप फ़ाइल को खोजने में समस्या हो रही है, तो अपने crontab समय या संपूर्ण कमांड को प्रूफरीड करें। सिंटैक्स त्रुटि हो सकती है, या कुछ गुम हो सकता है। वैकल्पिक रूप से, सिस्टम क्रॉन लॉग इंगित कर सकता है कि समस्या कहाँ है।
$ sudo grep CRON /var/log/syslog
एक बार जब आप पुष्टि कर लें कि सब कुछ सही ढंग से काम कर रहा है, तो क्रॉस्टैब प्रविष्टि को अपने पसंदीदा डेटाबेस शेड्यूल पर रीसेट करना याद रखें।
My.cnf का उपयोग करके MySQL डेटाबेस पासवर्ड को स्टोर करना
हमने पहले ही mysqldump कमांड पर "-p [mysql_password]" विकल्प की कमियों का उल्लेख किया है, खासकर एक साझा नेटवर्क के तहत। हमें "~/.my.cnf" फ़ाइल में पासवर्ड संग्रहण को कार्यान्वित करने के तरीके पर चर्चा करने की आवश्यकता है। अपने डेटाबेस बैकअप को स्वचालित करने के लिए क्रोन का उपयोग करने वाले उपयोगकर्ताओं को "-डिफॉल्ट्स-अतिरिक्त-फ़ाइल =/पथ/से/.my.cnf" कमांड विकल्प के कार्यान्वयन को समझने की आवश्यकता होगी।
my.cnf फ़ाइल का संपादन
आपके Linux सिस्टम की होम निर्देशिका में यह छिपी हुई फ़ाइल है। इसका सीधा सिस्टम पथ "/home/your_username/.my.cnf" है। इस फ़ाइल को खोलने के लिए नैनो टेक्स्ट एडिटर का उपयोग करें। "~" विकल्प होम डायरेक्टरी की ओर इशारा करता है।
$ sudo nano ~/.my.cnf
अपने MySQL डेटाबेस पासवर्ड को सफलतापूर्वक स्टोर करने के लिए इस ओपन फाइल को निम्नलिखित सिंटैक्स के अनुसार संपादित करें। भाग "Your_DB_PASS" एकमात्र प्रविष्टि है जिसे आपको अपने वास्तविक डेटाबेस पासवर्ड के साथ बदलने की आवश्यकता है। फ़ाइल के नीचे ये जानकारी विवरण दर्ज करें और उन्हें सहेजें।
[mysqldump]
password=YOUR_DB_PASS
इस फाइल को सेव करने के लिए Ctrl+X का प्रयोग करें। इस "my.cnf" फ़ाइल को भी कुछ अनुमति सेटिंग्स की आवश्यकता है। निम्न आदेश लागू करें:
$ sudo chmod 600 ~/.my.cnf
अब समय आ गया है कि हमारे नए mysqldump कमांड को "-p[mysql_password]" कमांड विकल्प के साथ फिर से बनाया जाए।
$ mysqldump -u root [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz
जैसा कि आप देख सकते हैं, हमने कुछ भी नहीं जोड़ा। ऐसा लगता है कि केवल एक चीज जिसे हमने हटा दिया है वह है "-p [mysql_password]" कमांड विकल्प।
क्रॉस्टैब और -डिफॉल्ट्स-एक्सट्र्स-फाइल
उन उपयोगकर्ताओं के लिए जो डेटाबेस बैकअप को स्वचालित करना पसंद करते हैं, आपको "~/.my.cnf" फ़ाइल में "-डिफॉल्ट्स-अतिरिक्त-फ़ाइल" कमांड विकल्प के माध्यम से डेटाबेस पासवर्ड लाने की आवश्यकता होगी। यह दृष्टिकोण mysqldump कमांड के लिए चीजों को आसान बनाता है जब इसे डेटाबेस उपयोगकर्ता और पासवर्ड प्रामाणिकता को संदर्भित करने की आवश्यकता होती है। आपको my.cnf फ़ाइल के पथ के बारे में विशिष्ट होना चाहिए और केवल "~" प्रतीक का उपयोग नहीं करना चाहिए। क्रोंटैब फ़ाइल के अंदर निम्नलिखित कार्यान्वयन पर विचार करें:
30 22 * * * mysqldump --defaults-extra-file=/home/system_username/.my.cnf -u root [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz
इस उदाहरण में, crontab MySQL डेटाबेस का बैक-अप gzip कम्प्रेशन बनाने के लिए हर दिन 22:30 बजे निष्पादित करता है।
अंतिम नोट
इस लेख ने "/var/www_my_backups" बैकअप निर्देशिका के बारे में स्थानीय डेटाबेस बैकअप तंत्र को देखा। चूंकि अब आप समझ गए हैं कि बैकअप प्रक्रिया कैसे होती है, आपको उच्च स्तर पर जाना चाहिए और ऑफसाइट बैकअप के बारे में सोचना शुरू करना चाहिए। हालांकि, एक अधिक व्यावहारिक दृष्टिकोण SFTP एक्सेस कॉन्फ़िगरेशन के माध्यम से है जो इस "/var/www_my_backups" बैकअप निर्देशिका की ओर इशारा करता है।
इस तरह के कॉन्फ़िगरेशन के साथ, रात और दैनिक बीमा भंडारण के लिए इन स्थानीय रूप से संग्रहीत डेटाबेस फ़ाइलों की एक प्रति प्राप्त करने के लिए रिमोट सर्वर के माध्यम से एक एसएफटीपी क्रॉन जॉब बनाना संभव है।
जैसा कि हम इस भयानक लेख मार्गदर्शिका को समाप्त करते हैं, अब आप MySQL डेटाबेस बैकअप परिदृश्यों, डेटाबेस बैकअप बहाली और डेटाबेस बैकअप स्वचालन के एक गर्वित स्वामी हैं। अब आपको विश्वास की छलांग लगानी चाहिए और अपने MySQL डेटाबेस बैकअप ऑटोमेशन को शेड्यूल करने और संभालने के लिए क्रॉन जॉब्स का उपयोग करने में विश्वास होना चाहिए। ऑटोमेशन शेड्यूल दैनिक होना जरूरी नहीं है क्योंकि वे साप्ताहिक और मासिक भी हो सकते हैं।