MySQL आयात गाइड: SQL डंप्स और CSV को तेज़ी से आयात करें (LOAD DATA, Workbench, phpMyAdmin)

目次

1. इस लेख में आप क्या कर पाएँगे

Many people searching for “MySQL data import” are in a situation where they want to:

  • “.sql फ़ाइल को पुनर्स्थापित करें”
  • “CSV आयात करें”
  • “यह त्रुटि के साथ रुक जाता है”
  • “यह Workbench या phpMyAdmin में काम नहीं करता”

In other words, you want a solution you can apply right now.

First, here are the shortest “success paths” by goal.

🔹 SQL फ़ाइल (.sql) आयात करने के लिए सबसे तेज़ कमांड

For backup restores or server migration, this is the quickest.

mysql -u username -p database_name < backup.sql

Things to check beforehand

  • क्या लक्ष्य डेटाबेस मौजूद है?
  • क्या कनेक्टिंग उपयोगकर्ता के पास लक्ष्य DB के लिए अधिकार हैं?
  • SQL फ़ाइल एन्कोडिंग (आमतौर पर UTF-8)

If the database has not been created yet:

CREATE DATABASE example_db;

🔹 CSV फ़ाइल आयात करने का सबसे तेज़ तरीका (सिफ़ारिश किया गया)

For importing large data quickly, LOAD DATA is ideal.

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, name, @age)
SET age = NULLIF(@age,'');

Key points

  • Windows लाइन समाप्ति → '\r\n'
  • यदि हेडर पंक्ति है → IGNORE 1 LINES
  • खाली स्ट्रिंग को NULL में बदलें → NULLIF()
  • कई वातावरणों को LOCAL की आवश्यकता होती है (बाद में समझाया गया)

🔹 यदि आप GUI के माध्यम से आयात करना चाहते हैं

MySQL Workbench

  • सर्वर → डेटा आयात → फ़ाइल चुनें → चलाएँ

phpMyAdmin

  • लक्ष्य DB चुनें → आयात → फ़ाइल चुनें → चलाएँ

⚠ However, for large files and reliable error handling, CLI (command line) is more dependable.

🔹 आयात करने से पहले 3 अनिवार्य जाँच आइटम

1. Character set (most important)

SHOW VARIABLES LIKE 'character_set%';

Recommended: utf8mb4

2. Settings that cause INFILE-related errors

SHOW VARIABLES LIKE 'local_infile';
SHOW VARIABLES LIKE 'secure_file_priv';

3. Privilege check

SHOW GRANTS FOR 'user'@'localhost';

✔ इस लेख में आगे क्या है

  • SQL फ़ाइलों को आयात करने के विस्तृत तरीके
  • व्यावहारिक CSV आयात तकनीकें
  • INFILE क्यों विफल होता है इसका पूर्ण विश्लेषण
  • त्रुटि प्रकार के अनुसार सबसे तेज़ समाधान
  • बड़े डेटासेट के लिए वास्तविक-विश्व तकनीकें

MySQL data import workflow diagram showing SQL file, CSV file, LOAD DATA LOCAL INFILE, mysql command, and MySQL server process

2. MySQL आयात के प्रकार और कब प्रत्येक का उपयोग करें

There are multiple ways to import into MySQL, but the best choice depends on your use case.
If you understand this correctly, you can avoid unnecessary trouble.

2.1 SQL डंप (.sql) आयात कब करें

Common use cases

  • बैकअप से पुनर्स्थापना
  • सर्वर माइग्रेशन
  • प्रोडक्शन जैसी डेटा को विकास वातावरण में लागू करना
  • mysqldump से निर्यात किए गए डेटा को पुनः आयात करना

Features

  • पूरे टेबल संरचना + डेटा को पुनर्स्थापित करता है
  • उच्च पुनरुत्पादनशीलता
  • लेनदेन शामिल हो सकते हैं
  • आमतौर पर सबसे सुरक्षित विकल्प

Typical methods

mysql -u user -p dbname < dump.sql

Or inside MySQL:

SOURCE /path/to/dump.sql;

Best for

  • मौजूदा DB की पूरी पुनर्स्थापना
  • प्रोडक्शन वातावरण का पुनर्निर्माण
  • CI/CD वातावरण के लिए डेटा लोडिंग

2.2 CSV / TSV आयात कब करें

Common use cases

  • बाहरी सिस्टम से डेटा प्राप्त करना
  • Excel डेटा आयात करना
  • ETL प्रोसेसिंग
  • केवल विशिष्ट टेबल्स को अपडेट करना

Features

  • केवल डेटा लोड करता है (स्कीमा अलग से मौजूद होना चाहिए)
  • तेज़ ( LOAD DATA अत्यंत तेज़ है)
  • आयात के दौरान ट्रांसफ़ॉर्मेशन लॉजिक की अनुमति देता है

Typical method

LOAD DATA LOCAL INFILE 'file.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

Best for

  • निर्धारित बैच जॉब्स
  • डेटा इंटीग्रेशन
  • बड़ी पंक्तियों की गिनती का उच्च-गति सेवन

2.3 GUI टूल्स कब उपयोग करें

Common tools:

  • MySQL Workbench
  • phpMyAdmin

Features

  • सहज संचालन
  • शुरुआती‑मित्र
  • छोटे डेटासेट के लिए उपयुक्त

Cautions

  • अपलोड सीमा (phpMyAdmin)
  • टाइमआउट्स
  • बड़े डेटा के साथ अस्थिर
  • त्रुटियों का विश्लेषण करना कठिन

2.4 विधि द्वारा तुलना (व्यावहारिक दृष्टिकोण)

MethodSpeedStabilityLarge-file supportError analysisRecommendation
mysql command★★★★★
LOAD DATA★★★★★
Workbench★★★
phpMyAdmin×★★

✔ वास्तविक कार्य में अनुशंसित विकल्प

  • बैकअप पुनर्स्थापना → mysql कमांड
  • उच्च गति CSV आयात → LOAD DATA LOCAL INFILE
  • छोटे, एकबारगी कार्य → GUI

यदि आप अनिश्चित हैं, तो CLI (कमांड लाइन) चुनना सबसे स्थिर विकल्प है

3. SQL फ़ाइल आयात (सफलता का सबसे तेज़ मार्ग)

.sql फ़ाइल आयात करना बैकअप पुनर्स्थापना और सर्वर माइग्रेशन के लिए सबसे सामान्य विधि है।
यहाँ, लक्ष्य “जितनी जल्दी संभव हो सफल होना” है, इसलिए हम केवल वास्तविक कार्य में उपयोग किए जाने वाले व्यावहारिक चरणों पर ध्यान देंगे।

3.1 एक पंक्ति में पुनर्स्थापना (सबसे सामान्य विधि)

यह सबसे विश्वसनीय और तेज़ विधि है।

mysql -u username -p database_name < backup.sql

इसे चलाने के बाद, आपको पासवर्ड के लिए पूछा जाएगा।

✔ पूर्व-जाँच (विफलता से बचने के लिए)

① क्या डेटाबेस मौजूद है?
SHOW DATABASES;

यदि यह मौजूद नहीं है:

CREATE DATABASE example_db;
② क्या उपयोगकर्ता के पास विशेषाधिकार हैं?
SHOW GRANTS FOR 'user'@'localhost';

यदि विशेषाधिकार अनुपलब्ध हैं:

GRANT ALL PRIVILEGES ON example_db.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
③ फ़ाइल एन्कोडिंग

आमतौर पर यह UTF-8 होता है।
यदि आप गड़बड़ अक्षर देखते हैं, तो इसे स्पष्ट रूप से निर्दिष्ट करें।

mysql --default-character-set=utf8mb4 -u user -p dbname < backup.sql

3.2 MySQL के अंदर से चलाएँ (SOURCE कमांड)

यह विधि MySQL में लॉग इन करने के बाद चलती है।

mysql -u user -p
USE example_db;
SOURCE /path/to/backup.sql;

जब यह उपयोगी हो

  • जब आप केवल SQL फ़ाइल का एक भाग चलाना चाहते हैं
  • जब आप सटीक त्रुटि स्थान पहचानना चाहते हैं
  • जब आप निष्पादन लॉग को दृश्य रूप से पुष्टि करना चाहते हैं

3.3 सामान्य विफलताएँ और समाधान

❌ ERROR 1049: अज्ञात डेटाबेस

→ डेटाबेस मौजूद नहीं है
CREATE DATABASE चलाएँ

❌ ERROR 1045: एक्सेस अस्वीकृत

→ अपर्याप्त विशेषाधिकार
SHOW GRANTS के साथ जाँचें

❌ यह बीच में रुक जाता है / त्रुटि स्थान अस्पष्ट है

समाधान:

  1. फ़ाइल की शुरुआत और अंत जाँचें
    head backup.sql
    tail backup.sql
    
  1. त्रुटि से ठीक पहले की पंक्तियों की जाँच करें
  2. यदि फ़ाइल बड़ी है, तो इसे विभाजित करके भागों में चलाएँ
    split -l 10000 backup.sql part_
    

3.4 बड़े SQL आयात को स्थिर करने के टिप्स

① लेनदेन सेटिंग्स जाँचें

जाँचें कि SET autocommit=0; शामिल है या नहीं

② यदि विदेशी कुंजी प्रतिबंध समस्या हैं

SET FOREIGN_KEY_CHECKS=0;
-- import
SET FOREIGN_KEY_CHECKS=1;

③ SQL मोड जाँचें

SELECT @@sql_mode;

स्ट्रिक्ट मोड आयात को प्रभावित कर रहा हो सकता है।

✔ व्यावहारिक सिफारिशें

  • प्रोडक्शन पुनर्स्थापना → mysql कमांड
  • डिबगिंग → SOURCE
  • बड़ी फ़ाइलें → CLI + विभाजन पर विचार करें

4. CSV आयात (सबसे महत्वपूर्ण: LOAD DATA के साथ सबसे तेज़)

CSV डेटा आयात करते समय, सबसे तेज़ और सबसे व्यावहारिक विधि LOAD DATA है
बड़े डेटासेट के लिए, यह INSERT कथनों की तुलना में बहुत तेज़ है।

यहाँ, हम सही “कॉपी-पेस्ट और चलाएँ” स्वरूप प्रदान करेंगे और सामान्य विफलता बिंदुओं को उजागर करेंगे।

4.1 प्रथम: CSV पूर्वापेक्षाएँ

आयात करने से पहले, निम्नलिखित की जाँच सुनिश्चित करें।

✔ विभाजक

  • कॉमा ,
  • टैब \t
  • सेमीकोलन ; (विदेशी डेटा में सामान्य)

✔ उद्धरण वर्ण

  • क्या मान डबल कोट्स "value" के साथ बंद हैं

✔ पंक्ति समाप्ति

  • Linux / Mac → \n
  • Windows → \r\n

✔ कैरेक्टर सेट / एन्कोडिंग

  • अनुशंसित: utf8mb4
  • Windows पर निर्मित CSV Shift-JIS हो सकता है
  • UTF-8 with BOM कभी-कभी त्रुटियों का कारण बन सकता है

उदाहरण जाँच:

file -i example.csv

4.2 कॉपी-पेस्ट-तैयार बुनियादी रूप (हेडर वाला CSV)

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(id, name, @age)
SET age = NULLIF(@age,'');

प्रत्येक विकल्प का अर्थ

  • LOCAL क्लाइंट साइड से फाइल पढ़ता है (कई वातावरणों में आवश्यक)
  • IGNORE 1 LINES हेडर रो को स्किप करता है
  • @age स्टोर करने से पहले मान को ट्रांसफॉर्म करने के लिए उपयोग की जाने वाली अस्थायी चर
  • NULLIF() खाली स्ट्रिंग्स को NULL में बदलता है

4.3 केवल आवश्यक कॉलम्स को आयात करें

यदि CSV में अनावश्यक कॉलम्स हैं:

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, @dummy, age);

अनचाहे कॉलम्स को @dummy में मैप करें।

4.4 आयात के दौरान डेट्स और प्रकारों को बदलें

उदाहरण: MM/DD/YYYY → MySQL फॉर्मेट में बदलें

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(@date_col, name)
SET date_col = STR_TO_DATE(@date_col, '%m/%d/%Y');

4.5 टैब-डिलीमिटेड (TSV) के लिए

FIELDS TERMINATED BY '\t'

4.6 प्रदर्शन को और बेहतर बनाएं (बड़े डेटा के लिए)

अस्थायी रूप से इंडेक्सेस को अक्षम करें

ALTER TABLE example_table DISABLE KEYS;
-- Run LOAD DATA
ALTER TABLE example_table ENABLE KEYS;

अस्थायी रूप से फॉरेन कीज को अक्षम करें

SET FOREIGN_KEY_CHECKS=0;
-- Run LOAD DATA
SET FOREIGN_KEY_CHECKS=1;

LOCAL क्यों अक्सर आवश्यक होता है

  • LOAD DATA INFILE → सर्वर साइड पर फाइल पढ़ता है
  • LOAD DATA LOCAL INFILE → क्लाइंट साइड पर फाइल पढ़ता है

कई वातावरणों में, LOCAL का उपयोग करने से सफलता दर अधिक होती है

✔ व्यावहारिक अनुशंसित रूप

अधिकांश मामलों में:

LOAD DATA LOCAL INFILE
+ explicit delimiter
+ explicit line endings
+ IGNORE 1 LINES
+ type conversion

यह सबसे स्थिर दृष्टिकोण है।

5. INFILE विफल होने के शीर्ष 4 कारण (सबसे महत्वपूर्ण अनुभाग)

अधिकांश LOAD DATA INFILE विफलताएं सेटिंग्स, प्रिविलेजेस, या स्रोत स्थान की गलतफहमी के कारण होती हैं।
यदि आप इसे समझते हैं, तो आप अधिकांश त्रुटियों को तुरंत हल कर सकते हैं।

5.1 INFILE और LOCAL INFILE के बीच अंतर

यह मुख्य बुनियादी अवधारणा है।

CommandWhere it reads fromTypical use
LOAD DATA INFILEFile on the serverA fixed path on the server
LOAD DATA LOCAL INFILEFile on the clientA CSV on your local PC

सामान्य गलतफहमियां

  • INFILE से लोकल पीसी फाइल पढ़ने की कोशिश करना और विफल होना
  • सर्वर पर फाइल मौजूद नहीं है

✔ त्वरित नियम का अंगूठा

  • अपनी पीसी पर CSV → LOCAL
  • सर्वर पर रखी CSV → INFILE

यदि अनिश्चित हैं, तो LOCAL का उपयोग सबसे सुरक्षित विकल्प है

5.2 local_infile अक्षम है (ERROR 1148 का कारण)

उदाहरण त्रुटि:

ERROR 1148 (42000): The used command is not allowed with this MySQL version

कारण:

local_infile बंद है

✔ वर्तमान सेटिंग जांचें

SHOW VARIABLES LIKE 'local_infile';

✔ कनेक्ट करते समय इसे सक्षम करें (क्लाइंट-साइड)

mysql --local-infile=1 -u user -p

✔ स्थायी रूप से सक्षम करें (कॉन्फ़िग फाइल)

my.cnf या my.ini में जोड़ें:

[mysqld]
local_infile=1

आपको सर्वर को पुनः आरंभ करना होगा।

5.3 secure_file_priv प्रतिबंध

यह तब होता है जब LOAD DATA INFILE का उपयोग किया जाता है (LOCAL के बिना)।

जांचें:

SHOW VARIABLES LIKE 'secure_file_priv';

उदाहरण आउटपुट

/var/lib/mysql-files/

→ आप केवल इस डायरेक्टरी के अंदर फाइलें पढ़ सकते हैं।

✔ समाधान

  • CSV को अनुमत डायरेक्टरी में ले जाएं
  • या LOCAL का उपयोग करें

5.4 अपर्याप्त प्रिविलेजेस (FILE प्रिविलेज / OS अनुमतियां)

उदाहरण त्रुटि:

ERROR 1045: Access denied

जांचें:

SHOW GRANTS FOR 'user'@'localhost';

✔ आवश्यक प्रिविलेज

GRANT FILE ON *.* TO 'user'@'localhost';

※ सुरक्षा के लिए, संभवतः सबसे कम प्रिविलेजेस के साथ संचालित करें।

5.5 गलत पथ निर्दिष्ट करना

  • सापेक्ष पथ के बजाय निरपेक्ष पथ का उपयोग करें
  • विंडोज पर, C:/path/file.csv की सिफारिश की जाती है
  • बैकस्लैशेज से आगे की स्लैशेस अधिक सुरक्षित हैं

✔ INFILE मुद्दों के लिए तेज़ समस्या निवारण प्रवाह

  1. क्या आपने LOCAL जोड़ा है ?
  2. SHOW VARIABLES LIKE 'local_infile';
  3. SHOW VARIABLES LIKE 'secure_file_priv';
  4. प्रिविलेजेस जांचें (SHOW GRANTS)
  5. पथ जांचें (निरपेक्ष पथ)

इस क्रम में, आप अधिकांश मामलों को हल कर सकते हैं।

6. GUI के माध्यम से आयात (Workbench / phpMyAdmin)

The command line सबसे स्थिर है, लेकिन कुछ स्थितियों में आप GUI टूल्स का उपयोग करना चाहते हैं। यहाँ, हम वास्तविक कार्य में लोग जहाँ फँसते हैं उन सामान्य बिंदुओं पर ध्यान देंगे।

6.1 MySQL Workbench के साथ आयात

एक SQL फ़ाइल आयात करें (बैकअप पुनर्स्थापना)

  1. Workbench लॉन्च करें
  2. मेन्यू → Server → Data Import
  3. “Import from Self-Contained File” चुनें
  4. .sql फ़ाइल चुनें
  5. टार्गेट स्कीमा (डेटाबेस) चुनें
  6. “Start Import” पर क्लिक करें

CSV आयात करें (प्रति तालिका)

  1. लक्ष्य तालिका पर राइट-क्लिक करें
  2. Table Data Import Wizard चुनें
  3. CSV फ़ाइल चुनें
  4. डिलिमिटर सेट करें और हेडर है या नहीं निर्धारित करें
  5. चलाएँ

⚠ Workbench के अटकने के सामान्य कारण

  • बड़ी फ़ाइलें (सैकड़ों MB या अधिक)
  • टाइमआउट
  • एन्कोडिंग मिलान नहीं
  • secure_file_priv प्रतिबंध

👉 बड़ी फ़ाइलों या प्रोडक्शन वातावरण के लिए, CLI की सिफारिश की जाती है।

6.2 phpMyAdmin के साथ आयात

चरण

  1. लक्ष्य डेटाबेस चुनें
  2. “Import” टैब खोलें
  3. फ़ाइल चुनें
  4. फ़ॉर्मेट चुनें (SQL / CSV)
  5. चलाएँ

⚠ phpMyAdmin सीमाएँ

① अपलोड आकार सीमा

upload_max_filesize
post_max_size

बड़ी फ़ाइलें विफल होंगी।

② टाइमआउट
max_execution_time

लंबे समय तक चलने वाले आयात मध्य में रुक सकते हैं।

③ मेमोरी समाप्त
memory_limit

6.3 जब आपको GUI का उपयोग करना चाहिए

  • छोटे डेटासेट (कुछ MB)
  • डेवलपमेंट वातावरण
  • अस्थायी एकबारगी कार्य

6.4 जब आपको CLI का उपयोग करना चाहिए (सिफारिशित)

  • प्रोडक्शन वातावरण
  • दसों MB या अधिक
  • बड़ी CSV आयात
  • जब आपको त्रुटि विश्लेषण की आवश्यकता हो
  • सर्वर-से-सर्वर माइग्रेशन

✔ व्यावहारिक निष्कर्ष

GUI “आसान” है, लेकिन स्थिरता, पुनरुत्पादनशीलता, और बड़ी फ़ाइलों के प्रबंधन के लिए CLI अत्यधिक बेहतर है

समस्या निवारण के लिए, CLI संचालन सीखना अंततः सिफारिश किया जाता है।

7. समस्या निवारण (त्रुटि द्वारा: कारण → सबसे तेज़ समाधान)

अधिकांश MySQL आयात त्रुटियाँ बहुत पैटर्नयुक्त होती हैं। यहाँ, हम उन्हें “कारण → पहला कार्य → सत्यापन कमांड” क्रम में व्यवस्थित करेंगे।

7.1 ERROR 1148 (42000)

उपयोग किया गया कमांड इस MySQL संस्करण के साथ अनुमति नहीं है

🔎 कारण

  • LOAD DATA LOCAL INFILE अक्षम है
  • local_infile बंद है

✅ सबसे तेज़ समाधान

① वर्तमान सेटिंग्स जांचें

SHOW VARIABLES LIKE 'local_infile';

② कनेक्ट करते समय सक्षम करें (क्लाइंट-साइड)

mysql --local-infile=1 -u user -p

③ स्थायी रूप से सक्षम करें (यदि आवश्यक हो)

[mysqld]
local_infile=1

→ MySQL पुनः शुरू करें

7.2 ERROR 1366

गलत स्ट्रिंग मान

🔎 कारण

  • एन्कोडिंग मिलान नहीं
  • utf8 और utf8mb4 के बीच असंगति
  • Shift-JIS मिश्रित

✅ सबसे तेज़ समाधान

① वर्तमान कैरेक्टर सेट जांचें

SHOW VARIABLES LIKE 'character_set%';

② तालिका को utf8mb4 में बदलें

ALTER TABLE example_table CONVERT TO CHARACTER SET utf8mb4;

③ आयात समय पर इसे स्पष्ट रूप से निर्दिष्ट करें

mysql --default-character-set=utf8mb4 -u user -p db < file.sql

7.3 ERROR 1062

डुप्लिकेट एंट्री

🔎 कारण

  • डुप्लिकेट प्राइमरी कीज़
  • UNIQUE प्रतिबंध उल्लंघन

✅ Fix options

विकल्प 1: डुप्लिकेट को अनदेखा करें
LOAD DATA LOCAL INFILE 'file.csv'
INTO TABLE example_table
IGNORE;
विकल्प 2: डुप्लिकेट पर अपडेट करें
INSERT INTO example_table (id, name)
VALUES (1,'John')
ON DUPLICATE KEY UPDATE name=VALUES(name);
विकल्प 3: स्टेजिंग टेबल का उपयोग करें
CREATE TEMPORARY TABLE temp LIKE example_table;
-- LOAD into temp first
INSERT INTO example_table
SELECT * FROM temp;

7.4 ERROR 1045

उपयोगकर्ता के लिए एक्सेस अस्वीकृत

🔎 कारण

  • अपर्याप्त DB विशेषाधिकार
  • अपर्याप्त FILE विशेषाधिकार
  • पथ के लिए अपर्याप्त OS अनुमतियाँ

✅ Check

SHOW GRANTS FOR 'user'@'localhost';

✅ Example required privileges

GRANT ALL PRIVILEGES ON example_db.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

※ FILE विशेषाधिकार देते समय सावधान रहें।

7.5 It stops mid-way on large files

🔎 कारण

  • टाइमआउट
  • मेमोरी समाप्त
  • PHP सीमाएँ (phpMyAdmin)

✅ सबसे तेज़ उपाय

टाइमआउट बढ़ाएँ
SET GLOBAL net_read_timeout=600;
SET GLOBAL net_write_timeout=600;
फ़ाइल को विभाजित करें
split -l 100000 large.csv part_

✔ त्रुटि समाधान प्रवाह (सबसे तेज़)

  1. एन्कोडिंग जाँचें
  2. local_infile जाँचें
  3. secure_file_priv जाँचें
  4. विशेषाधिकार जाँचें
  5. लाइन समाप्ति जाँचें ( \n / \r\n )

इस क्रम में, आप अधिकांश समस्याओं को हल कर सकते हैं।

8. बड़े डेटा सेटों के लिए वास्तविक-विश्व तकनीकें (विफलता-प्रूफ संचालन)

जब सैकड़ों हज़ार से लेकर मिलियन पंक्तियों को आयात किया जाता है,
सामान्य विधियाँ धीमी, रुक सकती हैं, या टूट सकती हैं

यहाँ उत्पादन में सामान्यतः उपयोग की जाने वाली स्थिर तकनीकें हैं।

8.1 फ़ाइल को विभाजित करें और चरणों में आयात करें

एक ही बार में बड़ी CSV/SQL फ़ाइल को फीड करने से मेमोरी और टाइमआउट समस्याएँ हो सकती हैं।

✔ Linux / Mac

split -l 100000 large.csv part_

→ प्रत्येक भाग में 100,000 पंक्तियों में विभाजित करें

✔ Windows (PowerShell उदाहरण)

Get-Content large.csv -TotalCount 100000 > part_1.csv

✔ चरणबद्ध आयात के लाभ

  • आंशिक विफलता के बाद पुनः प्रयास करना आसान
  • त्रुटि स्थान को pinpoint करना आसान
  • सर्वर लोड अधिक स्थिर

8.2 अस्थायी रूप से इंडेक्स और विदेशी कुंजियों को निष्क्रिय करें

आयात के दौरान, इंडेक्स अपडेट अक्सर बाधा बन जाते हैं।

✔ अस्थायी रूप से इंडेक्स निष्क्रिय करें

ALTER TABLE example_table DISABLE KEYS;
-- LOAD DATA
ALTER TABLE example_table ENABLE KEYS;

※ मुख्यतः MyISAM के लिए। InnoDB पर सीमित प्रभाव।

✔ विदेशी कुंजियों को निष्क्रिय करें

SET FOREIGN_KEY_CHECKS=0;
-- import
SET FOREIGN_KEY_CHECKS=1;

8.3 ऑटोकमिट नियंत्रित करें (गति बढ़ाएँ)

SET autocommit=0;
-- LOAD DATA
COMMIT;
SET autocommit=1;

8.4 बल्क लोड्स के लिए अनुशंसित सेटिंग्स

SET UNIQUE_CHECKS=0;
SET FOREIGN_KEY_CHECKS=0;
SET AUTOCOMMIT=0;

आयात के बाद:

COMMIT;
SET UNIQUE_CHECKS=1;
SET FOREIGN_KEY_CHECKS=1;
SET AUTOCOMMIT=1;

⚠ उत्पादन में सावधानी से उपयोग करें।

8.5 टाइमआउट बढ़ाएँ

SET GLOBAL net_read_timeout=600;
SET GLOBAL net_write_timeout=600;

8.6 स्टेजिंग टेबल रणनीति (सुरक्षित संचालन)

सीधे प्रोडक्शन टेबल में आयात करने के बजाय, पहले एक वैलिडेशन टेबल का उपयोग करें।

CREATE TABLE staging LIKE example_table;
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE staging;

वैलिडेशन के बाद:

INSERT INTO example_table
SELECT * FROM staging;

✔ सबसे स्थिर वास्तविक-विश्व पैटर्न

  1. स्टेजिंग टेबल में लोड करें
  2. पंक्तियों की गिनती जाँचें
  3. प्रतिबंधों को वैलिडेट करें
  4. प्रोडक्शन में लागू करें
  5. लॉग सहेजें

✔ बड़े डेटा के लिए निष्कर्ष

  • जहाँ संभव हो CLI का उपयोग करें
  • आयात को विभाजित करें
  • स्टेजिंग के माध्यम से जाएँ
  • अस्थायी रूप से प्रतिबंधों को निष्क्रिय करें
  • लॉग जाँचें

इससे आयात मिलियन पंक्तियों पर भी स्थिर रहेगा।

9. अक्सर पूछे जाने वाले प्रश्न (FAQ)

यहाँ MySQL आयात प्रश्नों के अक्सर खोजे जाने वाले उत्तरों के त्वरित, व्यावहारिक उत्तर हैं।

प्रश्न 1. क्या मैं CSV से केवल विशिष्ट कॉलम आयात कर सकता हूँ?

हाँ, आप कर सकते हैं।

आप अनावश्यक कॉलम को एक वेरिएबल (जैसे @dummy) में मैप कर सकते हैं और उन्हें अनदेखा कर सकते हैं।

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(id, @dummy, age);

यदि आप केवल कुछ कॉलम चाहते हैं, तो सुनिश्चित करें कि कॉलम क्रम स्पष्ट रूप से निर्दिष्ट करें

प्रश्न 2. खाली सेल को NULL कैसे बनाऊँ?

NULLIF() का उपयोग करें।

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(name, @age)
SET age = NULLIF(@age,'');

यह खाली स्ट्रिंग (”) को NULL में बदल देता है।

प्रश्न 3. हेडर पंक्ति को कैसे छोड़ूँ?

IGNORE 1 LINES

उदाहरण:

LOAD DATA LOCAL INFILE '/path/to/example.csv'
INTO TABLE example_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

प्रश्न 4. आयात परिणामों को कैसे वैलिडेट करूँ?

✔ पंक्तियों की गिनती जाँचें

SELECT COUNT(*) FROM example_table;

✔ चेतावनियों/त्रुटियों के लिए जाँचें

MySQL चेतावनियों की जाँच करें:

SHOW WARNINGS;

✔ स्टेजिंग टेबल रणनीति (सिफ़ारिश किया गया)

Load into a staging table first, then apply to production.

Q5. कौन सा तरीका सबसे तेज़ है?

Conclusion:

  • CSV → LOAD DATA LOCAL INFILE (सबसे तेज़)
  • बैकअप पुनर्स्थापना → mysql कमांड

GUI सुविधाजनक है, लेकिन CLI गति और स्थिरता में जीतता है

Q6. मुझे Windows पर लाइन-एंडिंग त्रुटि मिल रही है

It’s due to line endings.

Windows:

LINES TERMINATED BY '\r\n'

Linux / Mac:

LINES TERMINATED BY '\n'

Q7. मुझे secure_file_priv त्रुटि मिल रही है

Check:

SHOW VARIABLES LIKE 'secure_file_priv';

Fix:

  • CSV को अनुमत डायरेक्टरी में रखें
  • या LOCAL का उपयोग करें

✔ FAQ सारांश

  • कॉलम मैपिंग → @dummy
  • NULL रूपांतरण → NULLIF
  • हेडर को छोड़ें → IGNORE 1 LINES
  • हाई-स्पीड इम्पोर्ट → LOAD DATA
  • प्रमुख “अटके” बिंदु → local_infile / secure_file_priv / एन्कोडिंग

10. सारांश

MySQL इम्पोर्ट पहली नज़र में जटिल लग सकते हैं, लेकिन जब लक्ष्य के अनुसार व्यवस्थित किया जाता है, तो वे बहुत सरल होते हैं

आइए सबसे छोटे सफलता मार्गों का सारांश लें।

✔ एक SQL फ़ाइल (.sql) पुनर्स्थापित करें

Fastest and most stable:

mysql -u user -p dbname < backup.sql
  • जाँचें कि DB मौजूद है या नहीं
  • विशेषाधिकार जाँचें
  • एन्कोडिंग के लिए utf8mb4 की सिफ़ारिश करें

✔ CSV आयात (तेज़)

Basic form:

LOAD DATA LOCAL INFILE '/path/to/file.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Key points:

  • Windows लाइन एंडिंग्स → \r\n
  • खाली स्ट्रिंग्स → NULLIF()
  • यदि यह विफल हो जाता है, तो local_infile जाँचें

✔ समस्या निवारण जाँच क्रम

  1. एन्कोडिंग (utf8mb4 की सिफ़ारिश)
  2. SHOW VARIABLES LIKE 'local_infile';
  3. SHOW VARIABLES LIKE 'secure_file_priv';
  4. विशेषाधिकार (SHOW GRANTS)
  5. लाइन एंडिंग्स

इस क्रम में, आप अधिकांश समस्याओं को हल कर सकते हैं।

✔ बड़े डेटासेट्स के लिए स्वर्ण नियम

  • CLI का उपयोग करें
  • इम्पोर्ट को विभाजित करें
  • एक स्टेजिंग टेबल के माध्यम से जाएँ
  • अस्थायी रूप से फॉरेन की/कंस्ट्रेंट्स को निष्क्रिय करें
  • लॉग्स जाँचें

✔ अंतिम निष्कर्ष

  • बैकअप पुनर्स्थापना → mysql कमांड
  • हाई-स्पीड CSV इम्पोर्ट → LOAD DATA LOCAL INFILE
  • छोटे एकबारगी कार्य → GUI

यदि आप अनिश्चित हैं, तो CLI का उपयोग सबसे स्थिर विकल्प है।

इसके साथ, आपके पास MySQL इम्पोर्ट्स के लिए पूर्ण ज्ञान सेट है।

इसे अपने वातावरण में आज़माएँ और एक स्थिर ऑपरेशनल वर्कफ़्लो बनाएं।