- 1 1. परिचय
- 2 2. त्वरित पुनरावलोकन: मूल mysqldump उपयोग
- 3 3. --where विकल्प का उपयोग करके शर्तीय डंप
- 4 4. पुनर्स्थापना के समय मुख्य बिंदु
- 5 5. ट्रबलशूटिंग / सामान्य प्रश्न
- 5.1 सामान्य त्रुटियां और समाधान
- 5.1.1 1. अपर्याप्त विशेषाधिकार (एक्सेस डिनाइड)
- 5.1.2 2. WHERE फ़िल्टर लागू नहीं होता और सब कुछ डंप हो जाता है
- 5.1.3 3. डंप का आकार असामान्य रूप से बड़ा / प्रोसेसिंग धीमी है
- 5.1.4 4. गड़बड़ टेक्स्ट (कैरेक्टर एन्कोडिंग समस्याएं)
- 5.1.5 5. डुप्लिकेट एंट्री (प्राइमरी की डुप्लिकेशन) के कारण इम्पोर्ट नहीं हो पा रहा है
- 5.2 प्रदर्शन और ऑपरेशनल सावधानियां
- 5.3 Frequently asked questions (FAQ)
- 5.3.1 Q1. Can WHERE conditions be used across multiple tables?
- 5.3.2 Q2. Is it OK to use LIKE in WHERE conditions?
- 5.3.3 Q3. Can I dump schema but filter data with WHERE?
- 5.3.4 Q4. I get a foreign key error when restoring a conditional dump
- 5.3.5 Q5. What’s the best approach when large data takes too long?
- 5.1 सामान्य त्रुटियां और समाधान
- 6 6. Summary
1. परिचय
बैकअप संचालन के दौरान “केवल आवश्यक डेटा” निकालने की आवश्यकता
MySQL चलाते समय, नियमित बैकअप आवश्यक होते हैं। हालांकि, स्थिति के अनुसार, कई मामलों में “आपको सभी डेटा को डंप करने की आवश्यकता नहीं है।” उदाहरण के लिए:
- एक बड़े टेबल से केवल विशिष्ट अवधि के डेटा निकालें
- केवल ऐसे रिकॉर्ड डंप करें जहाँ स्थिति का मान विशिष्ट हो
- पुराने डेटा को बाहर रखें और केवल वर्तमान में उपयोग किए जा रहे रिकॉर्ड को माइग्रेट करें
- केवल आवश्यक डेटा को एक टेस्ट वातावरण में ले जाएँ
इन परिदृश्यों में, --where विकल्प mysqldump का अत्यंत उपयोगी है।
mysqldump का WHERE शर्तों से संबंध
आमतौर पर, mysqldump को “प्रत्येक टेबल की सभी पंक्तियों का बैकअप” करने के तंत्र के रूप में उपयोग किया जाता है। हालांकि, --where के साथ, आप शर्तें SQL WHERE क्लॉज़ की तरह निर्दिष्ट कर सकते हैं और एक डंप फ़ाइल बना सकते हैं जिसमें केवल आवश्यक रिकॉर्ड हों।
created_at >= '2024-01-01'जैसी तिथि शर्तेंstatus = 'active'जैसी स्थिति शर्तेंid BETWEEN 100 AND 200जैसी रेंज फ़िल्टर- AND / OR का उपयोग करके कई शर्तों को मिलाकर निकालना
इस प्रकार, mysqldump केवल एक बैकअप टूल नहीं है—इसे लचीला डेटा निष्कर्षण टूल के रूप में भी उपयोग किया जा सकता है।
शर्तीय डंप के लाभ
--where का उपयोग करके, आप निम्नलिखित लाभ प्राप्त कर सकते हैं:
- बैकअप समय में कमी क्योंकि केवल आवश्यक रिकॉर्ड निकाले जाते हैं, कार्यभार हल्का रहता है।
- छोटी डंप फ़ाइल आकार विशेष रूप से बड़े टेबल वाले वातावरण में प्रभावी।
- अधिक कुशल डेटा माइग्रेशन आप केवल आवश्यक डेटा को टेस्ट या स्टेजिंग वातावरण में लोड कर सकते हैं।
- आर्काइविंग के लिए आदर्श “पुराने डेटा को अलग से आर्काइव के रूप में सहेजें” जैसी लचीली डिज़ाइन को सक्षम बनाता है।
इस लेख में आप क्या सीखेंगे
यह लेख एक व्यापक व्याख्या प्रदान करता है—mysqldump मूल बातें से लेकर WHERE‑फ़िल्टर वाले डंप लिखना, व्यावहारिक नमूने, संचालन संबंधी सावधानियां, और समस्या निवारण तक।
- mysqldump की मूल सिंटैक्स
- WHERE‑फ़िल्टर वाले डंप के व्यावहारिक उदाहरण
- तिथियों और स्थिति मानों का उपयोग करके विशिष्ट शर्त पैटर्न
- बड़े टेबल पर प्रदर्शन के बारे में कैसे सोचें
- सामान्य त्रुटियां और उन्हें कैसे ठीक करें
- वास्तविक संचालन से जुड़ी सर्वोत्तम प्रथाएँ
इसे शुरुआती‑मित्र बनाये रखने के लिए, हम नमूना कमांड्स और उनका उपयोग कब करना है, को सावधानीपूर्वक समझाते हैं।
2. त्वरित पुनरावलोकन: मूल mysqldump उपयोग
mysqldump MySQL का आधिकारिक बैकअप टूल है। इसकी मुख्य विशेषता यह है कि यह डेटा और टेबल संरचनाओं को एक टेक्स्ट‑आधारित SQL फ़ाइल के रूप में सहेज सकता है। WHERE शर्तों का उपयोग करने से पहले, चलिए उन मूल बातों को देखते हैं जो आपको जाननी चाहिए।
मूल सिंटैक्स और मुख्य विकल्प
मूल mysqldump सिंटैक्स बहुत सरल है:
mysqldump -u username -p database_name > dump.sql
जब आप कमांड चलाते हैं, तो आपको पासवर्ड दर्ज करने के लिए कहा जाएगा।
इस रूप में, डेटाबेस की सभी टेबल्स डंप हो जाती हैं।
सामान्यतः उपयोग किए जाने वाले मुख्य विकल्प
mysqldump में कई विकल्प होते हैं, लेकिन निम्नलिखित विशेष रूप से सामान्य हैं:
--single-transactionलॉक किए बिना InnoDB टेबल्स का बैकअप लेता है। लाइव सिस्टम पर भी सुरक्षित।--quickपंक्तियों को एक-एक करके प्रोसेस करता है जबकि मेमोरी उपयोग कम रखता है। बड़े टेबल्स के लिए प्रभावी।--default-character-set=utf8mb4डंप फ़ाइल के कैरेक्टर सेट को निर्दिष्ट करके गड़बड़ टेक्स्ट से बचाता है।--no-dataकेवल टेबल संरचनाओं को डंप करता है (डेटा नहीं)।--tablesटेबल नाम निर्दिष्ट करके केवल आवश्यक टेबल्स को डंप करता है।
इनको मिलाकर, आप अपनी स्थिति के लिए एक अनुकूल बैकअप बना सकते हैं।
केवल विशिष्ट टेबल्स को डंप कैसे करें
mysqldump के साथ, आप डेटाबेस नाम के बाद टेबल नाम सूचीबद्ध करके केवल उन टेबल्स को बैकअप ले सकते हैं।
mysqldump -u root -p mydb users orders > selected_tables.sql
इस उदाहरण में, केवल users और orders डंप किए गए हैं।
जब आप कई टेबल्स चाहते हैं लेकिन पूरे डेटाबेस की आवश्यकता नहीं है, तो यह बहुत उपयोगी है।
एक साथ कई डेटाबेस को डंप कैसे करें
यदि आप एक साथ कई डेटाबेस का बैकअप लेना चाहते हैं, तो --databases या --all-databases का उपयोग करें।
- एकाधिक निर्दिष्ट डेटाबेस डंप करें
mysqldump -u root -p --databases db1 db2 db3 > multi_db.sql - सर्वर पर सभी डेटाबेस डंप करें
mysqldump -u root -p --all-databases > all.sql
क्योंकि WHERE-फ़िल्टर वाले डंप मूलतः प्रति तालिका उपयोग किए जाते हैं, इसलिए पहले “तालिका-स्तरीय डंप” की अवधारणा को समझना महत्वपूर्ण है।
mysqldump के साथ बुनियादी बैकअप-से-रिस्टोर प्रवाह
mysqldump का उपयोग करके बुनियादी बैकअप प्रवाह इस प्रकार है:
- mysqldump के साथ एक डंप फ़ाइल उत्पन्न करें
- वैकल्पिक रूप से इसे gzip आदि से संपीड़ित करें
- इसे एक सुरक्षित स्थान पर संग्रहीत करें (दूसरा सर्वर, बाहरी स्टोरेज, आदि)
- mysql कमांड से आयात करके पुनर्स्थापित करें
पुनर्स्थापना इस प्रकार की जाती है:
mysql -u root -p mydb < dump.sql
क्योंकि mysqldump प्लेन-टेक्स्ट SQL उत्पन्न करता है, इसे संभालना आसान है और यह किसी विशिष्ट वातावरण से बंधा नहीं है।
3. --where विकल्प का उपयोग करके शर्तीय डंप
mysqldump में सबसे शक्तिशाली विकल्पों में से एक --where है।
आप शर्तें उसी तरह निर्दिष्ट कर सकते हैं जैसे आप MySQL SELECT WHERE क्लॉज़ में करते हैं, और केवल आवश्यक पंक्तियों को डंप कर सकते हैं।
--where क्या कर सकता है?
एक सामान्य mysqldump पूरी तालिका का बैकअप लेता है।
लेकिन --where के साथ, आप “एक्सट्रैक्शन-शैली बैकअप” कर सकते हैं जैसे:
- नया डेटा केवल निकालें
- केवल उन पंक्तियों को डंप करें जहाँ स्थिति सक्रिय है
- केवल एक विशिष्ट उपयोगकर्ता का डेटा बैकअप करें
- एक निश्चित ID रेंज के भीतर केवल पंक्तियों को निकालें
- एकाधिक शर्तों को संयोजित करें (AND/OR)
इसी कारण mysqldump को केवल बैकअप टूल के रूप में नहीं, बल्कि एक
“एक्सट्रैक्शन फ़िल्टर के साथ डेटा माइग्रेशन टूल” के रूप में भी उपयोग किया जा सकता है।
बुनियादी सिंटैक्स
--where का बुनियादी रूप इस प्रकार है:
mysqldump -u root -p mydb mytable --where="condition_expression" > filtered.sql
शर्त अभिव्यक्ति को मानक SQL WHERE क्लॉज़ की तरह लिखा जा सकता है।
सामान्य शर्त उदाहरण
1. ID द्वारा फ़िल्टर
mysqldump -u root -p mydb users --where="id > 1000" > users_over_1000.sql
2. तिथि द्वारा फ़िल्टर (created_at 2024 या बाद का है)
mysqldump -u root -p mydb logs --where="created_at >= '2024-01-01'" > logs_2024.sql
3. स्थिति द्वारा फ़िल्टर (केवल सक्रिय)
mysqldump -u root -p mydb orders --where="status = 'active'" > orders_active.sql
4. कई शर्तें (AND)
mysqldump -u root -p mydb orders \
--where="status = 'active' AND created_at >= '2024-01-01'" \
> orders_active_recent.sql
5. OR शर्तें संयोजित करें
mysqldump -u root -p mydb products \
--where="category = 'A' OR category = 'B'" \
> products_ab.sql
6. LIKE के साथ आंशिक मिलान
mysqldump -u root -p mydb members --where="email LIKE '%@example.com'" > example_members.sql
WHERE शर्तों का उपयोग करते समय नोट्स
1. डबल कोट्स बनाम सिंगल कोट्स का उपयोग
--where="status = 'active'"
जैसा कि ऊपर दिखाया गया है,
बाहरी → डबल कोट्स
आंतरिक → सिंगल कोट्स
मानक तरीका है।
2. यह केवल प्रति तालिका उपयोग किया जा सकता है
--where को पूरे डेटाबेस के लिए उपयोग नहीं किया जा सकता।
आपको इसे प्रत्येक तालिका के लिए निर्दिष्ट करना होगा।
3. तिथि और स्ट्रिंग फ़ॉर्मेट के साथ सावधान रहें
यदि फ़ॉर्मेट MySQL में कॉलम परिभाषा से मेल नहीं खाता, तो पंक्तियों को निकाला नहीं जाएगा।
4. भारी शर्तें प्रोसेसिंग को धीमा कर सकती हैं
विशेष रूप से यदि WHERE शर्त इंडेक्स का उपयोग नहीं कर सकती, तो डंप धीमा हो जाएगा।
व्यावहारिक उपयोग केस
केस 1: किसी निश्चित अवधि के लॉग केवल निकालें
यह उदाहरण बड़े लॉग तालिका से संचालन के लिए आवश्यक केवल हाल के लॉग निकालता है।
mysqldump -u root -p app logs \
--where="created_at >= NOW() - INTERVAL 30 DAY" \
> logs_last_30days.sql
केस 2: केवल सक्रिय उपयोगकर्ताओं को माइग्रेट करें (नए वातावरण में)
mysqldump -u root -p service users \
--where="status = 'active'" \
> active_users.sql
केस 3: जांच के लिए केवल एक विशिष्ट उपयोगकर्ता का डेटा निकालें
mysqldump -u root -p crm payments \
--where="user_id = 42" \
> payments_user_42.sql
केस 4: ID रेंज द्वारा डंप्स को विभाजित करना (बड़े डेटासेट्स के लिए)
mysqldump -u root -p mydb orders --where="id BETWEEN 1 AND 500000" > part1.sql
mysqldump -u root -p mydb orders --where="id BETWEEN 500001 AND 1000000" > part2.sql
यह एक व्यावहारिक दृष्टिकोण है जो बहुत बड़े टेबल्स के लिए आमतौर पर उपयोग किया जाता है।
सर्वोत्तम प्रथाएँ (सिफारिशित सेटिंग्स)
--single-transactionके साथ संयोजन InnoDB के लिए, आप लॉक से बच सकते हैं जबकि एक सुसंगत बैकअप बनाए रख सकते हैं।--quickका उपयोग करके मेमोरी उपयोग कम करें- डंप कॉलम्स के पास इंडेक्स हैं, यह पुष्टि करें यदि WHERE धीमा है, तो अक्सर इसका कारण कोई इंडेक्स न होना होता है।
- फ़ाइल आकार कम करने के लिए gzip के साथ संपीड़ित करें उदाहरण:
mysqldump ... | gzip > backup.sql.gz - व्यवसायिक घंटों के दौरान चलाते समय सावधान रहें क्योंकि यह लोड पैदा कर सकता है, रात के समय या रखरखाव विंडो की सिफारिश की जाती है।
4. पुनर्स्थापना के समय मुख्य बिंदु
भले ही डंप फ़ाइल को WHERE शर्त के साथ निकाला गया हो, बुनियादी पुनर्स्थापना प्रक्रिया सामान्य mysqldump पुनर्स्थापना के समान ही होती है। हालांकि, क्योंकि इसमें “केवल चयनित रिकॉर्ड” होते हैं, कुछ बिंदुओं पर आपको सावधानी बरतनी चाहिए।
शर्तीय डंप से पुनर्स्थापना प्रक्रिया
सबसे मानक पुनर्स्थापना विधि यह है:
mysql -u root -p database_name < dump.sql
जब आप यह कमांड चलाते हैं, तो mysqldump आउटपुट में शामिल CREATE TABLE और INSERT कथन डेटाबेस पर जैसा है वैसा ही लागू होते हैं।
हालांकि, WHERE‑फ़िल्टर किए गए डंप्स के लिए आपको निम्नलिखित बिंदुओं पर ध्यान देना होगा।
WHERE‑फ़िल्टर किए गए डंप को पुनर्स्थापित करते समय नोट्स
1. यह मूल तालिका में मौजूदा डेटा के साथ टकरा सकता है
एक शर्तीय डंप “केवल कुछ रिकॉर्ड” निकालता है।
उदाहरण के लिए:
- लक्ष्य तालिका में पहले से ही वही प्राथमिक कुंजी (id) मौजूद है
- एक आंशिक INSERT डुप्लिकेट्स का कारण बनता है
ऐसे मामलों में, आयात के दौरान आपको इस प्रकार की त्रुटियां दिखाई दे सकती हैं:
ERROR 1062 (23000): Duplicate entry '1001' for key 'PRIMARY'
→ प्रतिकार उपाय
- यदि आवश्यक हो तो लक्ष्य तालिका को पहले TRUNCATE करें
- SQL को इस तरह संशोधित करें कि आप
INSERT IGNOREयाON DUPLICATE KEY UPDATEका उपयोग कर सकें - पुष्टि करें कि लक्ष्य वास्तव में “खाली तालिका” है
क्योंकि mysqldump डिफ़ॉल्ट रूप से INSERT कथन उत्पन्न करता है, आपको डुप्लिकेट्स के बारे में सावधान रहना होगा।
2. विदेशी कुंजी प्रतिबंधों पर ध्यान दें
एक शर्तीय डंप स्वचालित रूप से सभी संबंधित तालिकाओं को साथ नहीं निकालता।
उदाहरण:
- WHERE के साथ केवल users तालिका निकालें
- लेकिन orders तालिका जो user_id को संदर्भित करती है, मौजूद नहीं है
ऐसे में, पुनर्स्थापना के दौरान विदेशी कुंजी त्रुटि उत्पन्न हो सकती है।
→ प्रतिकार उपाय
SET FOREIGN_KEY_CHECKS=0;का उपयोग करके अस्थायी रूप से विदेशी कुंजी जांच को निष्क्रिय करें- यदि आवश्यक हो, तो समान शर्तों के साथ संबंधित तालिकाओं को डंप करें
- पहले से समझें कि आपके उपयोग केस के लिए रेफ़रेंशियल इंटेग्रिटी आवश्यक है या नहीं

3. स्कीमा अंतर (डेव बनाम प्रोडक्शन माइग्रेशन) पर ध्यान दें
यदि विकास और उत्पादन के बीच तालिका संरचनाएँ भिन्न हैं, तो पुनर्स्थापना के दौरान त्रुटियां हो सकती हैं।
उदाहरणों में:
- कॉलम A स्थानीय रूप से मौजूद है लेकिन उत्पादन में हटा दिया गया है
- उत्पादन में NOT NULL है, लेकिन डंप डेटा में NULL शामिल है
- कॉलम क्रम या डेटा प्रकार अलग हैं
→ प्रतिकार उपाय
SHOW CREATE TABLE table_name;के साथ पहले जांचें- यदि आवश्यक हो, तो
--no-create-info(स्कीमा को बाहर रखें) का उपयोग करें और केवल डेटा लोड करें - डंप और पुनर्स्थापना से पहले स्कीमा को एकसमान करें
इसे डिफरेंशियल बैकअप और माइग्रेशन के लिए उपयोग करना
WHERE‑फ़िल्टर किए गए डंप्स अत्यधिक प्रभावी होते हैं जब आप “केवल वह डेटा जो आपको किसी अन्य वातावरण में चाहिए, उसे स्थानांतरित” करना चाहते हैं।
1. आवश्यक रेंज को टेस्ट वातावरण में माइग्रेट करें
- लॉग्स के अंतिम 30 दिन
- सक्रिय उपयोगकर्ता
- वह बिक्री अवधि जिसे आप सत्यापित करना चाहते हैं
ये निष्कर्षण टेस्ट डेटाबेस के आकार को कम करने में भी महत्वपूर्ण योगदान देते हैं।
2. पुराना डेटा आर्काइव करें
यदि प्रोडक्शन डेटाबेस बढ़ रहा है, तो आप केवल पुराने डेटा को निकाल कर इसे अलग से इस तरह स्टोर कर सकते हैं:
mysqldump -u root -p mydb logs \
--where="created_at < '2023-01-01'" \
> logs_archive_2022.sql
3. मर्जिंग पर नोट्स
यदि आप कई कंडीशनल डंप्स को मिलाकर एक ही टेबल में लोड करते हैं, तो आपको प्राइमरी कीज़ और कंसिस्टेंसी पर विशेष ध्यान देना चाहिए।
सारांश: WHERE-फ़िल्टर वाले डंप्स शक्तिशाली हैं, लेकिन सावधानी से रिस्टोर करें
mysqldump का WHERE विकल्प बहुत सुविधाजनक है, लेकिन रिस्टोर के समय आपको इन बिंदुओं को ध्यान में रखना चाहिए:
- गंतव्य/मूल टेबल के साथ डुप्लिकेट रिकॉर्ड्स
- फ़ॉरेन की प्रतिबंध
- स्कीमा असंगतियां
- फ़िल्टरिंग के कारण संभावित कंसिस्टेंसी समस्याएं
इन बातों को कहने के बाद, यदि आप कंडीशनल डंप्स में निपुण हो जाते हैं, तो आपके दैनिक बैकअप, आर्काइविंग और डेटा माइग्रेशन बहुत अधिक प्रभावी हो जाएंगे।
5. ट्रबलशूटिंग / सामान्य प्रश्न
mysqldump एक साधारण टूल जैसा दिखता है, लेकिन जब इसे WHERE कंडीशन्स के साथ जोड़ा जाता है, तो आपके रनटाइम एनवायरनमेंट, डेटा स्ट्रक्चर और परमिशन सेटिंग्स के आधार पर अप्रत्याशित त्रुटियां हो सकती हैं। यह सेक्शन व्यवस्थित रूप से सामान्य वास्तविक दुनिया की समस्याओं और उनके समाधान को समझाता है।
सामान्य त्रुटियां और समाधान
1. अपर्याप्त विशेषाधिकार (एक्सेस डिनाइड)
mysqldump: Got error: 1044: Access denied for user ...
मुख्य कारण
- SELECT विशेषाधिकार की कमी
- ट्रिगर्स या व्यूज़ शामिल होने पर अतिरिक्त विशेषाधिकार आवश्यक हो सकते हैं
mysqlसिस्टम डेटाबेस को डंप करने का प्रयास करने में विफलता
समाधान
- कम से कम, लक्ष्य टेबल्स पर SELECT विशेषाधिकार प्रदान करें
- यदि व्यूज़ हैं →
SHOW VIEW - यदि ट्रिगर्स हैं →
TRIGGER - यदि संभव हो, एक समर्पित बैकअप यूज़र बनाएं
2. WHERE फ़िल्टर लागू नहीं होता और सब कुछ डंप हो जाता है
कारण
- गलत कोटिंग
- शेल द्वारा विशेष अक्षरों को व्याख्या किया जा रहा है
- एक्सप्रेशन कॉलम से मेल नहीं खाता (स्ट्रिंग/डेट फ़ॉर्मेट असंगतता)
उदाहरण (सामान्य गलती)
--where=status='active'
सही रूप
--where="status = 'active'"
समाधान
- बाहरी भाग में डबल कोट्स और अंदर सिंगल कोट्स का उपयोग करें
- LIKE, >, या < का उपयोग करते समय भी यही करें (कोट्स में रखें)
- जाँचें कि डेट फ़ॉर्मेट DB में संग्रहीत रूप से मेल खाता है
3. डंप का आकार असामान्य रूप से बड़ा / प्रोसेसिंग धीमी है
कारण
- WHERE कंडीशन में उपयोग किए गए कॉलम पर कोई इंडेक्स नहीं है
- LIKE ‘%keyword’ जैसे नॉन-प्रिफिक्स मैच का उपयोग
- कंडीशन्स बहुत जटिल हैं
- इंडेक्स के बिना बड़े टेबल को स्कैन करना
समाधान
- WHERE में उपयोग किए गए कॉलम पर इंडेक्स जोड़ने पर विचार करें
- बड़े टेबल्स के लिए, ID रेंज के आधार पर डंप को कई रन में विभाजित करें
- मेमोरी प्रेशर कम करने के लिए हमेशा
--quickका उपयोग करें - रात में या कम ट्रैफ़िक वाले समय में चलाएँ
4. गड़बड़ टेक्स्ट (कैरेक्टर एन्कोडिंग समस्याएं)
कारण
- डिफ़ॉल्ट कैरेक्टर सेट्स एनवायरनमेंट के अनुसार अलग होते हैं
- डंप समय और रिस्टोर समय पर कैरेक्टर सेट मेल नहीं खाता
- utf8 और utf8mb4 का मिश्रण
समाधान
डंप करते समय हमेशा कैरेक्टर सेट निर्दिष्ट करें:
--default-character-set=utf8mb4
※ रिस्टोर के दौरान समान सेटिंग का उपयोग करने से गड़बड़ टेक्स्ट से बचा जा सकता है।
5. डुप्लिकेट एंट्री (प्राइमरी की डुप्लिकेशन) के कारण इम्पोर्ट नहीं हो पा रहा है
क्योंकि कंडीशनल डंप्स “सिर्फ आवश्यक रिकॉर्ड्स” निकालते हैं, इसलिए आपको डुप्लिकेट एरर तब मिलेंगे जब:
- मौजूदा टेबल में पहले से ही वही ID मौजूद है
- आप डंप्स को मर्ज करने की कोशिश करते हैं और डुप्लिकेट होते हैं
समाधान
- डेस्टिनेशन टेबल को TRUNCATE करें
- ज़रूरत अनुसार SQL को एडिट करें और इसे
INSERT IGNOREमें बदलें - मर्ज करने से पहले डुप्लिकेट्स की जाँच करें
प्रदर्शन और ऑपरेशनल सावधानियां
बड़े डेटा सेट्स के लिए बुनियादी रणनीतियां
- ID रेंज के आधार पर डंप को विभाजित करें
- डेट रेंज के आधार पर कई फाइलों में विभाजित करें
- यदि आवश्यक हो तो
gzipयाpigzसे कंप्रेस करें - कम लोड वाले समय, जैसे देर रात, में चलाएँ
लॉक जोखिमों के बारे में
MyISAM डंप के दौरान टेबल्स को लॉक करता है।
InnoDB के लिए, निम्न विकल्प की सिफारिश की जाती है:
--single-transaction
This helps you extract consistent data while mostly avoiding locks.
Operational checklist
- Validate the WHERE condition with a SELECT query in advance
→ WHERE शर्त को पहले से एक SELECT क्वेरी के साथ सत्यापित करें - Check disk space before dumping
→ डंप करने से पहले डिस्क स्पेस जांचें - Always store dump files securely (encrypt and/or compress)
→ डंप फ़ाइलों को हमेशा सुरक्षित रूप से संग्रहीत करें (एन्क्रिप्ट और/या कंप्रेस करें) - Confirm the destination table schema matches
→ सुनिश्चित करें कि गंतव्य तालिका की स्कीमा मेल खाती है
Frequently asked questions (FAQ)
Q1. Can WHERE conditions be used across multiple tables?
No.
नहीं।
mysqldump’s WHERE filtering works per table.
mysqldump का WHERE फ़िल्टरिंग प्रति तालिका काम करता है।
You cannot use JOIN.
आप JOIN का उपयोग नहीं कर सकते।
Q2. Is it OK to use LIKE in WHERE conditions?
Yes, you can. However, non-prefix matches like %keyword cannot use indexes and will be slower.
हाँ, आप कर सकते हैं। हालांकि, %keyword जैसे गैर‑प्रिफिक्स मिलान इंडेक्स का उपयोग नहीं कर सकते और धीमे होंगे।
Q3. Can I dump schema but filter data with WHERE?
If you only need the schema, you would use --no-data, so a WHERE condition is usually unnecessary.
यदि आपको केवल स्कीमा चाहिए, तो आप --no-data का उपयोग करेंगे, इसलिए WHERE शर्त आमतौर पर आवश्यक नहीं होती।
Q4. I get a foreign key error when restoring a conditional dump
Run the following to temporarily disable constraints:
SET FOREIGN_KEY_CHECKS=0;
However, be careful not to break consistency.
हालांकि, संगति को न तोड़ने का ध्यान रखें।
Q5. What’s the best approach when large data takes too long?
- Check whether the WHERE columns are indexed
→ जाँचें कि WHERE कॉलम इंडेक्स्ड हैं या नहीं - Split into multiple dumps using ID ranges
→ ID रेंज का उपयोग करके कई डंप में विभाजित करें - Use
--quick
→--quickका उपयोग करें - Move execution time to late night These are the most effective approaches in real operations.
→ निष्पादन समय को देर रात में ले जाएँ। ये वास्तविक संचालन में सबसे प्रभावी उपाय हैं।
6. Summary
mysqldump MySQL में उपयोग करने के सबसे आसान बैकअप टूल्स में से एक है, और इसे --where विकल्प के साथ मिलाकर, आप साधारण बैकअप से आगे बढ़कर इसे एक “लचीला डेटा निष्कर्षण उपकरण” के रूप में उपयोग कर सकते हैं।
वास्तविक संचालन में, आपको अक्सर केवल एक विशिष्ट अवधि, केवल एक निश्चित स्थिति निकालनी होती है, या बड़े डेटा को छोटे भागों में विभाजित करना पड़ता है। ऐसी स्थितियों में, --where अत्यंत शक्तिशाली होता है और कुशल डेटा प्रबंधन में महत्वपूर्ण योगदान देता है।
Key points covered in this article
- Basic mysqldump syntax Simple backups are possible by specifying just the username and database name.
→ बेसिक mysqldump सिंटैक्स केवल उपयोगकर्ता नाम और डेटाबेस नाम निर्दिष्ट करके साधारण बैकअप संभव हैं। - Conditional dumps with
--whereExtract only the required records, just like a SQL WHERE clause.
→--whereके साथ कंडीशनल डंप केवल आवश्यक रिकॉर्ड निकालें, ठीक SQL WHERE क्लॉज़ की तरह। - Practical condition examples Supports many filtering patterns: date ranges, status, ID ranges, LIKE, and combined conditions.
→ व्यावहारिक शर्त उदाहरण कई फ़िल्टरिंग पैटर्न का समर्थन करता है: तिथि रेंज, स्थिति, ID रेंज, LIKE, और संयुक्त शर्तें। - Restore cautions When loading partial data, watch out for duplicates and foreign key constraints.
→ रीस्टोर सावधानियां आंशिक डेटा लोड करते समय डुप्लिकेट और फॉरेन की बाधाओं का ध्यान रखें। - Common issues and countermeasures Covers insufficient privileges, WHERE not applying, performance drops, encoding issues, and primary key duplication.
→ सामान्य समस्याएं और उपाय अपर्याप्त अधिकार, WHERE लागू न होना, प्रदर्शन गिरावट, एन्कोडिंग समस्याएं, और प्राइमरी की डुप्लिकेशन को कवर करता है।
Benefits of WHERE-filtered dumps
- Faster backups No need to back up everything—filtering reduces processing time.
→ तेज़ बैकअप सब कुछ बैकअप करने की जरूरत नहीं—फ़िल्टरिंग प्रोसेसिंग समय घटाती है। - Smaller file sizes Especially effective for large tables.
→ छोटी फ़ाइल आकार बड़े टेबल के लिए विशेष रूप से प्रभावी। - Easier data migration to test/staging environments Load only the data you need.
→ टेस्ट/स्टेजिंग वातावरण में डेटा माइग्रेशन आसान केवल आवश्यक डेटा लोड करें। - Useful for archiving Makes it easier to manage old data as separate files.
→ आर्काइविंग के लिए उपयोगी पुराने डेटा को अलग फ़ाइलों में प्रबंधित करना आसान बनाता है।
What to try next
Once you understand WHERE-filtered dumps, you can also consider these next steps:
एक बार जब आप WHERE-फ़िल्टरड डंप को समझ लेते हैं, तो आप इन अगले कदमों पर भी विचार कर सकते हैं:
- Automating backups with cron (Linux) using backup scripts
→ क्रॉन (Linux) के साथ बैकअप को स्वचालित करना बैकअप स्क्रिप्ट्स का उपयोग करके - Automatic compression combined with gzip or zip
→ ऑटोमैटिक कंप्रेशन gzip या zip के साथ मिलाकर - Using faster physical backup tools instead of mysqldump (such as Percona XtraBackup)
→ mysqldump के बजाय तेज़ फिजिकल बैकअप टूल्स का उपयोग (जैसे Percona XtraBackup) - Backup design for large-scale environments
→ बड़े पैमाने के वातावरण के लिए बैकअप डिज़ाइन
mysqldump सरल है, लेकिन सही समझ और उपयोग के साथ, यह आपके बैकअप डिज़ाइन विकल्पों को काफी विस्तारित करता है।

