MySQL ইম্পোর্ট গাইড: দ্রুত SQL ডাম্প এবং CSV ইম্পোর্ট (LOAD DATA, Workbench, phpMyAdmin)

目次

1. আপনি এই প্রবন্ধে কী করতে পারবেন

অনেক মানুষ “MySQL ডেটা ইম্পোর্ট” খুঁজে থাকেন এমন একটি পরিস্থিতিতে যেখানে তারা চান:

  • “একটি .sql ফাইল পুনরুদ্ধার করুন”
  • “একটি CSV ইম্পোর্ট করুন”
  • “এটি একটি ত্রুটিতে থেমে যায়”
  • “এটি Workbench বা phpMyAdmin-এ কাজ করে না”

অন্য কথায়, আপনি একটি এমন সমাধান চান যা আপনি এখনই প্রয়োগ করতে পারেন

প্রথমে, লক্ষ্য অনুযায়ী সবচেয়ে সংক্ষিপ্ত “সফলতার পথ” গুলো এখানে দেওয়া হল।

🔹 একটি SQL ফাইল (.sql) ইম্পোর্ট করার সর্বোচ্চ দ্রুত কমান্ড

ব্যাকআপ পুনরুদ্ধার বা সার্ভার মাইগ্রেশনের জন্য, এটি সবচেয়ে দ্রুত।

mysql -u username -p database_name < backup.sql

পূর্বে যাচাই করার বিষয়গুলো

  • গন্তব্য ডাটাবেসটি আছে কি?
  • সংযোগকারী ব্যবহারকারীর লক্ষ্য ডিবির জন্য প্রিভিলেজ আছে কি?
  • SQL ফাইলের এনকোডিং (সাধারণত UTF-8)

যদি ডাটাবেসটি এখনও তৈরি না হয়ে থাকে:

CREATE DATABASE example_db;

🔹 একটি CSV ফাইল ইম্পোর্ট করার সর্বোচ্চ দ্রুত পদ্ধতি (প্রস্তাবিত)

বড় ডেটা দ্রুত ইম্পোর্ট করার জন্য, LOAD DATA আদর্শ।

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,'');

মূল বিষয়গুলো

  • Windows লাইন শেষ → '\r\n'
  • যদি হেডার রো থাকে → IGNORE 1 LINES
  • খালি স্ট্রিংকে NULL-এ রূপান্তর করুন → NULLIF()
  • অনেক পরিবেশে LOCAL প্রয়োজন (পরে ব্যাখ্যা করা হয়েছে)

🔹 যদি আপনি GUI দিয়ে ইম্পোর্ট করতে চান

MySQL Workbench

  • Server → Data Import → ফাইল নির্বাচন করুন → চালান

phpMyAdmin

  • লক্ষ্য DB নির্বাচন করুন → Import → ফাইল বাছাই করুন → চালান

⚠ তবে, বড় ফাইল এবং নির্ভরযোগ্য ত্রুটি হ্যান্ডলিংয়ের জন্য, CLI (কমান্ড লাইন) বেশি নির্ভরযোগ্য।

🔹 ইম্পোর্টের আগে চেক করার ৩টি অপরিহার্য আইটেম

১. ক্যারেক্টার সেট (সবচেয়ে গুরুত্বপূর্ণ)

SHOW VARIABLES LIKE 'character_set%';

প্রস্তাবিত: utf8mb4

২. INFILE-সংশ্লিষ্ট ত্রুটি ঘটায় এমন সেটিংস

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

৩. প্রিভিলেজ চেক

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

২. MySQL ইম্পোর্টের ধরন এবং কখন কোনটি ব্যবহার করবেন

MySQL-এ ইম্পোর্ট করার বিভিন্ন পদ্ধতি আছে, তবে সেরা পছন্দ আপনার ব্যবহারের উপর নির্ভর করে
যদি আপনি এটি সঠিকভাবে বুঝতে পারেন, অপ্রয়োজনীয় সমস্যাগুলি এড়াতে পারবেন।

২.১ কখন একটি SQL ডাম্প (.sql) ইম্পোর্ট করবেন

সাধারণ ব্যবহার ক্ষেত্র

  • ব্যাকআপ থেকে পুনরুদ্ধার
  • সার্ভার মাইগ্রেশন
  • প্রোডাকশন-সদৃশ ডেটা ডেভেলপমেন্ট পরিবেশে প্রয়োগ
  • mysqldump দিয়ে এক্সপোর্ট করা ডেটা পুনরায় ইম্পোর্ট

বৈশিষ্ট্যসমূহ

  • সম্পূর্ণ টেবিল স্ট্রাকচার + ডেটা পুনরুদ্ধার করে
  • উচ্চ পুনরুত্পাদনযোগ্যতা
  • ট্রানজ্যাকশন অন্তর্ভুক্ত করতে পারে
  • সাধারণত সবচেয়ে নিরাপদ বিকল্প

সাধারণ পদ্ধতি

mysql -u user -p dbname < dump.sql

অথবা MySQL-এর ভিতরে:

SOURCE /path/to/dump.sql;

কোন ক্ষেত্রে উপযুক্ত

  • একটি বিদ্যমান DB-র পূর্ণ পুনরুদ্ধার
  • প্রোডাকশন পরিবেশ পুনর্নির্মাণ
  • CI/CD পরিবেশের জন্য ডেটা লোডিং

২.২ কখন CSV / TSV ইম্পোর্ট করবেন

সাধারণ ব্যবহার ক্ষেত্র

  • বাহ্যিক সিস্টেম থেকে ডেটা গ্রহণ
  • Excel ডেটা ইম্পোর্ট
  • ETL প্রক্রিয়াকরণ
  • শুধুমাত্র নির্দিষ্ট টেবিল আপডেট

বৈশিষ্ট্যসমূহ

  • শুধুমাত্র ডেটা লোড করে (স্কিমা আলাদাভাবে থাকতে হবে)
  • দ্রুত ( LOAD DATA অত্যন্ত দ্রুত )
  • ইম্পোর্টের সময় রূপান্তর লজিক অনুমোদন করে

সাধারণ পদ্ধতি

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

কোন ক্ষেত্রে উপযুক্ত

  • নির্ধারিত ব্যাচ কাজ
  • ডেটা ইন্টিগ্রেশন
  • বড় রো কাউন্টের উচ্চ-গতির ইনজেশন

২.৩ কখন GUI টুল ব্যবহার করবেন

সাধারণ টুলগুলো:

  • MySQL Workbench
  • phpMyAdmin

বৈশিষ্ট্যসমূহ

  • সহজবোধ্য অপারেশন
  • শুরুয়াতিদের জন্য উপযোগী
  • ছোট ডেটাসেটের জন্য উপযুক্ত

সতর্কতা

  • আপলোড সীমা (phpMyAdmin)
  • টাইমআউট
  • বড় ডেটার সাথে অস্থিতিশীল
  • ত্রুটি বিশ্লেষণ কঠিন

2.4 পদ্ধতি অনুযায়ী তুলনা (প্রায়োগিক দৃষ্টিকোণ)

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

✔ বাস্তব কাজের জন্য সুপারিশকৃত পছন্দসমূহ

  • Backup restore → mysql commandব্যাকআপ রিস্টোর → mysql কমান্ড
  • High-speed CSV import → LOAD DATA LOCAL INFILEউচ্চ-গতির CSV ইম্পোর্ট → LOAD DATA LOCAL INFILE
  • Small, one-off tasks → GUIছোট, একবারের কাজ → GUI

If you’re unsure, choosing the CLI (command line) is the most stable option.

→ যদি আপনি নিশ্চিত না হন, CLI (কমান্ড লাইন) বেছে নেওয়া সবচেয়ে স্থিতিশীল বিকল্প

3. একটি SQL ফাইল ইম্পোর্ট করা (সফলতার সর্বোত্তম পথ)

Importing a .sql file is the most common method for backup restores and server migrations.
Here, the goal is to “succeed as quickly as possible,” so we’ll focus only on the practical steps used in real work.

→ একটি .sql ফাইল ইম্পোর্ট করা ব্যাকআপ রিস্টোর এবং সার্ভার মাইগ্রেশনের জন্য সবচেয়ে সাধারণ পদ্ধতি
এখানে, লক্ষ্য হল “যথাসম্ভব দ্রুত সফল হওয়া,” তাই আমরা শুধুমাত্র বাস্তব কাজের ব্যবহারিক ধাপগুলোর উপর মনোযোগ দেব।

3.1 এক লাইনে রিস্টোর (সবচেয়ে সাধারণ পদ্ধতি)

This is the most reliable and fastest method.

→ এটি সবচেয়ে নির্ভরযোগ্য এবং দ্রুততম পদ্ধতি।

mysql -u username -p database_name < backup.sql

After running it, you’ll be prompted for the password.

→ এটি চালানোর পরে, আপনাকে পাসওয়ার্ডের জন্য প্রম্পট করা হবে।

✔ পূর্ব-পরীক্ষা (ব্যর্থতা রোধের জন্য)

① ডাটাবেসটি আছে কি না?
SHOW DATABASES;

If it doesn’t exist:

→ যদি না থাকে:

CREATE DATABASE example_db;
② ব্যবহারকারীর অনুমতি আছে কি?
SHOW GRANTS FOR 'user'@'localhost';

If privileges are missing:

→ যদি অনুমতি না থাকে:

GRANT ALL PRIVILEGES ON example_db.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
③ ফাইল এনকোডিং

Usually it’s UTF-8.
If you see garbled characters, specify it explicitly.

→ সাধারণত এটি UTF-8।
যদি অক্ষরগুলো গড়মিল দেখায়, স্পষ্টভাবে নির্দিষ্ট করুন।

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

3.2 MySQL এর ভিতর থেকে চালানো (SOURCE কমান্ড)

This method runs after you log into MySQL.

→ এই পদ্ধতি MySQL-এ লগইন করার পরে চালানো হয়।

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

কখন এটি উপকারী

  • When you want to run only part of an SQL file → যখন আপনি শুধুমাত্র একটি SQL ফাইলের অংশ চালাতে চান
  • When you want to identify the exact error location → যখন আপনি সঠিক ত্রুটি অবস্থান চিহ্নিত করতে চান
  • When you want to visually confirm the execution log → যখন আপনি এক্সিকিউশন লগটি দৃশ্যমানভাবে নিশ্চিত করতে চান

3.3 সাধারণ ব্যর্থতা এবং সমাধান

❌ ERROR 1049: অজানা ডাটাবেস

→ The DB doesn’t exist
→ Run CREATE DATABASE

→ ডাটাবেসটি নেই
CREATE DATABASE চালান

❌ ERROR 1045: অ্যাক্সেস অস্বীকৃত

→ Insufficient privileges
→ Check with SHOW GRANTS

→ অনুমতি অপর্যাপ্ত
SHOW GRANTS দিয়ে পরীক্ষা করুন

❌ It stops mid-way / error location is unclear

Fix:

→ সমাধান:

  1. Check the beginning and end of the file

→ ফাইলের শুরু এবং শেষ পরীক্ষা করুন

head backup.sql
tail backup.sql
  1. Check the lines right before the error

→ ত্রুটির ঠিক আগে থাকা লাইনগুলো পরীক্ষা করুন

  1. If the file is large, split and run it in parts

→ ফাইলটি বড় হলে, ভাগ করে অংশে চালান

split -l 10000 backup.sql part_

3.4 বড় SQL ইম্পোর্ট স্থিতিশীল করার টিপস

① ট্রানজ্যাকশন সেটিংস পরীক্ষা করুন

See whether SET autocommit=0; is included

SET autocommit=0; অন্তর্ভুক্ত আছে কি না দেখুন

② যদি ফরেন কী কনস্ট্রেইন্ট সমস্যা হয়

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

③ SQL মোড পরীক্ষা করুন

SELECT @@sql_mode;

Strict mode may be affecting the import.

→ স্ট্রিক্ট মোড ইম্পোর্টকে প্রভাবিত করতে পারে।

✔ ব্যবহারিক সুপারিশসমূহ

  • Production restore → mysql command → প্রোডাকশন রিস্টোর → mysql কমান্ড
  • Debugging → SOURCE → ডিবাগিং → SOURCE
  • Large files → CLI + consider splitting → বড় ফাইল → CLI + ভাগ করার কথা বিবেচনা করুন

4. CSV ইম্পোর্ট (সবচেয়ে গুরুত্বপূর্ণ: LOAD DATA দিয়ে দ্রুততম)

When importing CSV data, the fastest and most practical method is LOAD DATA.
For large datasets, it’s overwhelmingly faster than INSERT statements.

→ CSV ডেটা ইম্পোর্ট করার সময়, সবচেয়ে দ্রুত এবং ব্যবহারিক পদ্ধতি হল LOAD DATA
বড় ডেটাসেটের জন্য, এটি INSERT স্টেটমেন্টের তুলনায় অনেক দ্রুত।

Here, we’ll provide the correct “copy-paste and run” format and highlight common failure points.

→ এখানে, আমরা সঠিক “কপি-পেস্ট এবং চালান” ফরম্যাট প্রদান করব এবং সাধারণ ব্যর্থতার পয়েন্টগুলো হাইলাইট করব।

4.1 প্রথমে: CSV প্রয়োজনীয়তা

Before importing, be sure to check the following.

→ ইম্পোর্ট করার আগে, নিম্নলিখিত বিষয়গুলো নিশ্চিত করুন।

✔ ডিলিমিটার

  • Comma , → কমা ,
  • Tab \t → ট্যাব \t
  • Semicolon ; (common in overseas data) → সেমিকোলন ; (বিদেশি ডেটায় সাধারণ)

✔ কোট ক্যারেক্টার

  • Whether values are enclosed like "value" with double quotes → মানগুলো ডাবল কোট "value" দিয়ে ঘেরা আছে কি না

✔ লাইন শেষের চিহ্ন

  • Linux / Mac → \n → লিনাক্স / ম্যাক → \n
  • Windows → \r\n → উইন্ডোজ → \r\n

✔ ক্যারেক্টার সেট / এনকোডিং

  • Recommended: utf8mb4 → প্রস্তাবিত: utf8mb4
  • CSV created on Windows may be Shift-JIS → উইন্ডোজে তৈরি CSV হতে পারে Shift-JIS
  • UTF-8 with BOM can sometimes cause errors → BOM সহ UTF-8 কখনও কখনও ত্রুটি সৃষ্টি করতে পারে

Example check:

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 ব্যর্থতার শীর্ষ ৪টি কারণ (সবচেয়ে গুরুত্বপূর্ণ বিভাগ)

বেশিরভাগ 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 is OFF

✔ বর্তমান সেটিং চেক করুন

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 is the most stable, but there are situations where you want to use GUI tools.
Here, we’ll focus on the common points where people get stuck in real work.

6.1 MySQL Workbench দিয়ে ইম্পোর্ট

একটি SQL ফাইল ইম্পোর্ট (ব্যাকআপ রিস্টোর)

  1. Workbench চালু করুন
  2. মেনু → Server → Data Import
  3. “Import from Self-Contained File” নির্বাচন করুন
  4. .sql ফাইলটি নির্বাচন করুন
  5. Target Schema (ডাটাবেস) নির্বাচন করুন
  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 বন্ধ

✅ দ্রুততম সমাধান

① Check current settings

SHOW VARIABLES LIKE 'local_infile';

② Enable when connecting (client-side)

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

③ Enable permanently (if needed)

[mysqld]
local_infile=1

→ MySQL রিস্টার্ট করুন

7.2 ERROR 1366

অবৈধ স্ট্রিং মান

🔎 কারণ

  • এনকোডিং মিসম্যাচ
  • utf8 এবং utf8mb4 এর মধ্যে অসামঞ্জস্য
  • Shift-JIS মিশ্রিত

✅ দ্রুততম সমাধান

① Check current character set

SHOW VARIABLES LIKE 'character_set%';

② Convert table to utf8mb4

ALTER TABLE example_table CONVERT TO CHARACTER SET utf8mb4;

③ Specify it explicitly at import time

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

7.3 ERROR 1062

ডুপ্লিকেট এন্ট্রি

🔎 কারণ

  • ডুপ্লিকেট প্রাইমারি কী
  • UNIQUE কনস্ট্রেইন্ট লঙ্ঘন

✅ সমাধানের বিকল্প

বিকল্প ১: ডুপ্লিকেট উপেক্ষা করুন
LOAD DATA LOCAL INFILE 'file.csv'
INTO TABLE example_table
IGNORE;
বিকল্প ২: ডুপ্লিকেটে আপডেট করুন
INSERT INTO example_table (id, name)
VALUES (1,'John')
ON DUPLICATE KEY UPDATE name=VALUES(name);
বিকল্প ৩: স্টেজিং টেবিল ব্যবহার করুন
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 পারমিশন

✅ চেক করুন

SHOW GRANTS FOR 'user'@'localhost';

✅ উদাহরণ প্রয়োজনীয় প্রিভিলেজ

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

※ FILE প্রিভিলেজ প্রদান করার সময় সতর্ক থাকুন।

7.5 বড় ফাইলের ক্ষেত্রে মাঝপথে থেমে যায়

🔎 কারণ

  • টাইমআউট
  • মেমরি শেষ
  • 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 ইনপুট করা মেমরি ও টাইমআউট সমস্যার সৃষ্টি করতে পারে।

✔ লিনাক্স / ম্যাক

split -l 100000 large.csv part_

→ প্রতি অংশে ১০০,০০০ লাইন ভাগ করুন

✔ উইন্ডোজ (PowerShell উদাহরণ)

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

✔ ধাপে ধাপে ইম্পোর্টের সুবিধা

  • আংশিক ব্যর্থতার পরে পুনরায় চেষ্টা করা সহজ
  • ত্রুটির অবস্থান নির্ধারণ করা সহজ
  • সার্ভারের লোড আরও স্থিতিশীল

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 ইম্পোর্ট সংক্রান্ত প্রায়শই অনুসন্ধান করা প্রশ্নগুলোর দ্রুত, ব্যবহারিক উত্তর এখানে দেওয়া হল।

Q1. কি আমি CSV থেকে শুধুমাত্র নির্দিষ্ট কলাম ইম্পোর্ট করতে পারি?

হ্যাঁ, আপনি পারেন।

আপনি অপ্রয়োজনীয় কলামগুলোকে একটি ভেরিয়েবলে (যেমন @dummy) ম্যাপ করে উপেক্ষা করতে পারেন।

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

যদি আপনি শুধুমাত্র নির্দিষ্ট কলাম চান, তবে স্পষ্টভাবে কলামের ক্রম নির্ধারণ করুন

Q2. কীভাবে খালি সেলকে 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-এ রূপান্তর করে।

Q3. কীভাবে হেডার রো স্কিপ করব?

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;

Q4. কীভাবে ইম্পোর্ট ফলাফল যাচাই করব?

✔ সারির সংখ্যা পরীক্ষা করুন

SELECT COUNT(*) FROM example_table;

✔ সতর্কতা/ত্রুটি পরীক্ষা করুন

MySQL সতর্কতা পরীক্ষা করুন:

SHOW WARNINGS;

✔ স্টেজিং টেবিল কৌশল (প্রস্তাবিত)

প্রথমে একটি স্টেজিং টেবিলে লোড করুন, তারপর প্রোডাকশনে প্রয়োগ করুন।

Q5. কোন পদ্ধতি সবচেয়ে দ্রুত?

উপসংহার:

  • CSV → LOAD DATA LOCAL INFILE (সর্বোচ্চ দ্রুত)
  • ব্যাকআপ পুনরুদ্ধার → mysql command

GUI সুবিধাজনক, তবে গতি ও স্থায়িত্বের জন্য CLI জয়ী

Q6. Windows-এ লাইন-এন্ডিং ত্রুটি পাচ্ছি

এটি লাইন-এন্ডিংয়ের কারণে।

Windows:

LINES TERMINATED BY '\r\n'

Linux / Mac:

LINES TERMINATED BY '\n'

Q7. secure_file_priv ত্রুটি পাচ্ছি

পরীক্ষা করুন:

SHOW VARIABLES LIKE 'secure_file_priv';

সমাধান:

  • CSV-টি অনুমোদিত ডিরেক্টরিতে রাখুন
  • অথবা LOCAL ব্যবহার করুন

✔ FAQ সংক্ষিপ্তসার

  • কলাম ম্যাপিং → @dummy
  • NULL রূপান্তর → NULLIF
  • হেডার বাদ দিন → IGNORE 1 LINES
  • উচ্চ-গতির ইম্পোর্ট → LOAD DATA
  • শীর্ষ “আটকে থাকা” পয়েন্টগুলি → local_infile / secure_file_priv / এনকোডিং

10. সংক্ষিপ্তসার

MySQL ইম্পোর্ট প্রথমে জটিল দেখাতে পারে, তবে লক্ষ্য অনুযায়ী সাজালে, সেগুলি খুবই সরল

আসুন সংক্ষিপ্ত সফলতার পথগুলো পুনরায় দেখি।

✔ একটি SQL ফাইল (.sql) পুনরুদ্ধার করুন

সর্বোচ্চ দ্রুত এবং সর্বোচ্চ স্থিতিশীল:

mysql -u user -p dbname < backup.sql
  • ডেটাবেস আছে কিনা পরীক্ষা করুন
  • অনুমতিগুলি পরীক্ষা করুন
  • এনকোডিংয়ের জন্য utf8mb4 সুপারিশ করুন

✔ CSV ইম্পোর্ট (দ্রুত)

মৌলিক রূপ:

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;

মূল পয়েন্টগুলি:

  • 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 command
  • উচ্চ-গতির CSV ইম্পোর্ট → LOAD DATA LOCAL INFILE
  • ছোট একবারের কাজ → GUI

যদি আপনি অনিশ্চিত হন, CLI ব্যবহার করা সবচেয়ে স্থিতিশীল পছন্দ।

এতে, আপনার কাছে MySQL ইম্পোর্টের জন্য সম্পূর্ণ জ্ঞান রয়েছে।

আপনার পরিবেশে এটি চেষ্টা করুন এবং একটি স্থিতিশীল অপারেশনাল ওয়ার্কফ্লো গড়ে তুলুন।