MySQL ආයාත මාර්ගෝපදේශය: SQL ඩම්ප් සහ CSV වේගයෙන් ආයාත කිරීම (LOAD DATA, Workbench, phpMyAdmin)

目次

1. ඔබට මෙම ලිපියෙන් කළ හැකි දේ

“MySQL දත්ත ආයාත” සොයන බොහෝ ජනතාව මෙවැනි අවස්ථාවක සිටී, ඔවුන්ට අවශ්‍ය වන්නේ:

  • “.sql ගොනුවක් ප්‍රතිස්ථාපනය කිරීම”
  • “CSV ආයාත කිරීම”
  • “දෝෂයක් සමඟ නවත්වීම”
  • “Workbench හෝ phpMyAdmin හි ක්‍රියා නොකිරීම”

අනෙක් වචනයෙන් කියනවා නම්, ඔබට දැන්ම යොදාගත හැකි විසඳුමක් අවශ්‍යයි.

පළමුව, ඉලක්ක අනුව කෙටි “සාර්ථක මාර්ග” මෙන්න:

🔹 SQL ගොනුව (.sql) ආයාත කිරීමේ වේගවත්ම විධානය

ආපසු ගබඩා කිරීම හෝ සේවාදායක මාරු කිරීම සඳහා, මෙය වේගවත්ම ක්‍රමයයි.

mysql -u username -p database_name < backup.sql

පෙර පරීක්ෂා කළ යුතු දේවල්

  • ඉලක්ක දත්ත ගබඩාව පවතිද?
  • සම්බන්ධ වන පරිශීලකයාට ඉලක්ක DB සඳහා අවසර තිබේද?
  • 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 (command line) වඩා විශ්වාසනීය වේ.

🔹 ආයාත කිරීමට පෙර පරීක්ෂා කළ යුතු 3 අත්‍යවශ්‍ය අංග

1. අක්ෂර සමුදාය (ඉතා වැදගත්)

SHOW VARIABLES LIKE 'character_set%';

නිර්දේශිතය: utf8mb4

2. INFILE-සම්බන්ධ දෝෂ ඇති කරන සැකසුම්

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

3. අවසර පරීක්ෂාව

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 ආයාත වර්ග සහ ඒවා භාවිතා කළ යුතු අවස්ථා

MySQL වෙත ආයාත කිරීමේ විවිධ ක්‍රම ඇත, නමුත් හොඳම තේරීම ඔබේ භාවිතය අනුව තීරණය වේ. ඔබ මෙය නිවැරදිව තේරුම් ගන්නේ නම්, අනිවාර්ය නොවන ගැටළු වලින් වැළැක්විය හැක.

2.1 SQL ඩම්ප් (.sql) ආයාත කිරීමේ අවස්ථා

සාමාන්‍ය භාවිත අවස්ථා

  • ආපසු ගබඩා කිරීමෙන් ප්‍රතිස්ථාපනය
  • සේවාදායක මාරු කිරීම
  • නිෂ්පාදන වැනි දත්ත සංවර්ධන පරිසරයට යෙදීම
  • mysqldump සමඟ නිර්යාත කළ දත්ත නැවත ආයාත කිරීම

විශේෂාංග

  • සම්පූර්ණ වගුවේ ව්‍යුහය + දත්ත ප්‍රතිස්ථාපනය
  • ඉහළ ප්‍රතිනිර්මාණය
  • ගනුදෙනු ඇතුළත් කළ හැක
  • සාමාන්‍යයෙන් ආරක්ෂිතතම විකල්පය

සාමාන්‍ය ක්‍රම

mysql -u user -p dbname < dump.sql

හෝ MySQL තුළ:

SOURCE /path/to/dump.sql;

හොඳම භාවිතය

  • පවතින DB එකේ සම්පූර්ණ ප්‍රතිස්ථාපනය
  • නිෂ්පාදන පරිසරය නැවත ගොඩනැගීම
  • CI/CD පරිසර සඳහා දත්ත පූරණය

2.2 CSV / TSV ආයාත කිරීමේ අවස්ථා

සාමාන්‍ය භාවිත අවස්ථා

  • බාහිර පද්ධතිවලින් දත්ත ලැබීම
  • Excel දත්ත ආයාත කිරීම
  • ETL සැකසීම
  • විශේෂිත වගු පමණක් යාවත්කාලීන කිරීම

විශේෂාංග

  • දත්ත පමණක් පූරණය (ස්කීමා වෙනම තිබිය යුතුය)
  • වේගවත් (LOAD DATA ඉතා වේගවත්)
  • ආයාත කිරීමේදී පරිවර්තන තර්කය භාවිතා කළ හැක

සාමාන්‍ය ක්‍රමය

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

හොඳම භාවිතය

  • නියමිත කාලසටහන් බැච් රැකියා
  • දත්ත ඒකාබද්ධ කිරීම
  • විශාල පේළි ගණනේ ඉහළ වේගයෙන් ඇතුළත් කිරීම

2.3 GUI මෙවලම් භාවිතා කිරීමේ අවස්ථා

පොදු මෙවලම්:

  • MySQL Workbench
  • phpMyAdmin

විශේෂාංග

  • අවබෝධය සරල ක්‍රියාකාරිත්වය
  • ආරම්භකයන්ට සුහද
  • කුඩා දත්ත කට්ටල සඳහා සුදුසු

අවධානම්

  • උඩුගත කිරීමේ සීමා (phpMyAdmin)
  • කාලය ඉක්මවනවා
  • විශාල දත්ත සමඟ අස්ථිර
  • දෝෂ විශ්ලේෂණය කිරීම අමාරු

2.4 ක්‍රමයෙන් සංසන්දනය (ප්‍රායෝගික දෘෂ්ටිකෝණයෙන්)

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

✔ සැබෑ වැඩකදී නිර්දේශිත තේරීම්

  • බැකප් ප්‍රතිස්ථාපනය → mysql command
  • ඉහළ වේගයෙන් CSV ආනයනය → LOAD DATA LOCAL INFILE
  • කුඩා, එක-අවසර කාර්යයන් → GUI

ඔබට සැකයක් තිබේ නම්, CLI (command line) තෝරා ගැනීම ඉතා ස්ථායී විකල්පයකි.

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 command)

මෙම ක්‍රමය MySQL වෙත ලොග් වීමෙන් පසු ධාවනය වේ.

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

එය භාවිතා කිරීමට උපකාරී වන විට

  • SQL ගොනුවකින් කොටසක් පමණක් ධාවනය කිරීමට අවශ්‍ය වන විට
  • නිශ්චිත දෝෂ ස්ථානය හඳුනා ගැනීමට අවශ්‍ය වන විට
  • ධාවන ලොගය දෘශ්‍යමයව තහවුරු කිරීමට අවශ්‍ය වන විට

3.3 සුලබ අසාර්ථකත්ව සහ නිවැරදි කිරීම්

❌ ERROR 1049: Unknown database

→ DB තිබේ නැත
CREATE DATABASE ධාවනය කරන්න

❌ ERROR 1045: Access denied

→ හිමිකම් ප්‍රමාණවත් නැත
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 command
  • දෝෂ සෙවීම → SOURCE
  • විශාල ගොනු → CLI + කොටස්වලට බෙදීම සලකා බලන්න

4. CSV ආනයනය (වඩාත් වැදගත්: LOAD DATA සමඟ වේගවත්ම)

CSV දත්ත ආනයනය කිරීමේදී, LOAD DATA වඩාත් වේගවත් සහ ප්‍රායෝගික ක්‍රමයකි.
විශාල දත්ත සමුදායන් සඳහා, එය INSERT ප්‍රකාශනවලට වඩා බහුලව වේගවත් ය.

මෙහිදී, අපි නිවැරදි “copy-paste and run” ආකෘතිය සැපයීම සහ සුලබ අසාර්ථකත්ව ස්ථාන ඉස්මතු කරමු.

4.1 පළමුව: CSV පූර්ව-අවශ්‍යතා

ආනයනයට පෙර, පහත සියල්ල පරීක්ෂා කරන්න.

✔ වෙන්කරු

  • කොමා `,
  • ටැබ් \t
  • සෙමිකොලන් ; (විදේශීය දත්තවල සුලබ)

✔ උපුටා ගැනීමේ අක්ෂරය

  • අගයන් "value" මෙන් ද්විත්ව උපුටා දර්ශකවලින් වටවී ඇත්දැයි

✔ පේළි අවසාන

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

✔ අක්ෂර සමුදාය / ආකෘතිකරණය

  • නිර්දේශිත: utf8mb4
  • Windows හි නිර්මාණය කළ CSV Shift-JIS විය හැක
  • BOM සහිත UTF-8 බොහෝ විට දෝෂ ඇති කළ හැක

උදාහරණ පරීක්ෂණ:

file -i example.csv

4.2 Copy-paste සූදානම් මූලික ආකෘතිය (හෙඩර් සහිත 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 ඔබට අවශ්‍ය තීරුවල පමණක් ආයාත කරන්න

If the CSV has unnecessary columns:

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

Map unwanted columns to @dummy.

4.4 ආයාත කිරීමේදී දිනයන් සහ වර්ග පරිවර්තනය කරන්න

Example: convert MM/DD/YYYY → MySQL format

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

This is the most stable approach.

5. INFILE අසාර්ථක වීමට ඇති ඉහළම 4 හේතු (ඉතා වැදගත් කොටස)

බොහෝ LOAD DATA INFILE අසාර්ථකතා සැකසුම්, අවසර, හෝ මූලාශ්‍ර ස්ථානයේ වැරදි අවබෝධය නිසා සිදුවේ.
ඔබ මෙය අවබෝධ කරගත්තා නම්, බොහෝ දෝෂයන් වහාම විසඳා ගත හැක.

5.1 INFILE සහ LOCAL INFILE අතර වෙනස

This is the key basic concept.

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

If unsure, using LOCAL is the safest choice.

5.2 local_infile අක්‍රියයි (ERROR 1148 හේතුව)

Example error:

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

Cause:

local_infile is OFF

✔ වත්මන් සැකසුම පරීක්ෂා කරන්න

SHOW VARIABLES LIKE 'local_infile';

✔ සම්බන්ධ වන විට සක්‍රිය කරන්න (ගනුදෙනුකරු පාර්ශ්ව)

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

✔ ස්ථිරව සක්‍රිය කරන්න (වින්‍යාස ගොනුව)

Add to my.cnf or my.ini:

[mysqld]
local_infile=1

You must restart the server.

5.3 secure_file_priv සීමාව

LOAD DATA INFILE (LOCAL නොමැති) භාවිතා කරන විට මෙය සිදුවේ.

Check:

SHOW VARIABLES LIKE 'secure_file_priv';

උදාහරණ ප්‍රතිඵල

/var/lib/mysql-files/

→ ඔබට මෙම නාමාවලියේ ඇතුළත ගොනු පමණක් කියවිය හැක.

✔ විසඳුම

  • CSV එක අවසර ලත් නාමාවලියට ගෙන යන්න
  • හෝ LOCAL භාවිතා කරන්න

5.4 ප්‍රමාණවත් නොවන අවසර (FILE අවසර / OS අවසර)

Example error:

ERROR 1045: Access denied

Check:

SHOW GRANTS FOR 'user'@'localhost';

✔ අවශ්‍ය අවසර

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

※ ආරක්ෂාව සඳහා, හැකි තරම් අඩුම අවසරයන් සමඟ ක්‍රියා කරන්න.

5.5 වැරදි මාර්ග නිරූපණය

  • සම්බන්ධිත මාර්ගයක් නොව, සම්පූර්ණ මාර්ගයක් භාවිතා කරන්න
  • Windows හි, 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 Import with MySQL Workbench

Import an SQL file (backup restore)

  1. Workbench ආරම්භ කරන්න
  2. මෙනුව → Server → Data Import
  3. “Self-Contained File” එකෙන් ආයාත කිරීම තෝරන්න
  4. .sql ගොනුව තෝරන්න
  5. ඉලක්ක Schema (දත්ත ගබඩා) තෝරන්න
  6. “Start Import” ක්ලික් කරන්න

Import CSV (per table)

  1. ඉලක්ක වගුව මත දකුණු-ක්ලික් කරන්න
  2. Table Data Import Wizard තෝරන්න
  3. CSV ගොනුව තෝරන්න
  4. විභජකය සහ ශීර්ෂකයක් තිබේදැයි සකසන්න
  5. ක්‍රියාත්මක කරන්න

⚠ Common reasons Workbench gets stuck

  • විශාල ගොනු (සිය ගණනක් MB හෝ ඊට වැඩි)
  • කාලය ඉක්මවා යාම
  • කේතනය නොගැලපීම
  • secure_file_priv සීමා

👉 විශාල ගොනු හෝ නිෂ්පාදන පරිසර සඳහා, CLI භාවිතා කිරීම නිර්දේශිතය.

6.2 Import with phpMyAdmin

Steps

  1. ඉලක්ක දත්ත ගබඩාව තෝරන්න
  2. “Import” ටැබ් එක විවෘත කරන්න
  3. ගොනුවක් තෝරන්න
  4. ආකෘතිය තෝරන්න (SQL / CSV)
  5. ක්‍රියාත්මක කරන්න

⚠ phpMyAdmin limitations

① Upload size limit

upload_max_filesize
post_max_size

විශාල ගොනු අසාර්ථක වේ.

② Timeout
max_execution_time

දිගු කාලීන ආයාතයන් මැදින් නවතී යා හැක.

③ Out of memory
memory_limit

6.3 When you should use GUI

  • කුඩා දත්ත කට්ටල (කොටස් කිහිපයක් MB)
  • විකසන පරිසර
  • තාවකාලික එක්වර වැඩ

6.4 When you should use CLI (recommended)

  • නිෂ්පාදන පරිසර
  • දහස් ගණනක් MB හෝ ඊට වැඩි
  • විශාල CSV ආයාත
  • දෝෂ විශ්ලේෂණය අවශ්‍ය වන විට
  • සේවාදායක-සේවාදායක මාරු

✔ Practical conclusion

GUI “පහසු” වේ, නමුත්
CLI ස්ථාවරතාව, ප්‍රතිපත්තිකරණය, සහ විශාල ගොනු හසුරවීම සඳහා අතිශය වඩාත් හොඳයි.

දෝෂ නිරාකරණය සඳහා, CLI ක්‍රියාකාරකම් ඉගෙන ගැනීම අවසානයේ නිර්දේශිතය.

7. Troubleshooting (By Error: Cause → Fastest Fix)

බොහෝ MySQL ආයාත දෝෂ ඉතාමත් රටාවකින් යුක්ත වේ.
මෙහිදී, අපි ඒවා “හේතුව → පළමු ක්‍රියාව → සත්‍යාපන විධානය” ලෙස සංවිධානය කරමු.

7.1 ERROR 1148 (42000)

මෙම MySQL අනුවාදය සමඟ භාවිතා කරන ලද විධානය අනුමත නොවේ

🔎 Cause

  • LOAD DATA LOCAL INFILE අක්‍රිය කර ඇත
  • local_infile අක්‍රියයි

✅ Fastest fix

① වත්මන් සැකසුම් පරීක්ෂා කරන්න

SHOW VARIABLES LIKE 'local_infile';

② සම්බන්ධ වන විට සක්‍රිය කරන්න (ග්‍රාහක-පාර්ශ්වය)

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

③ ස්ථිරව සක්‍රිය කරන්න (අවශ්‍ය නම්)

[mysqld]
local_infile=1

→ MySQL නැවත ආරම්භ කරන්න

7.2 ERROR 1366

වැරදි string අගය

🔎 Cause

  • කේතනය නොගැලපීම
  • utf8 සහ utf8mb4 අතර අසමතුලිතතාව
  • Shift-JIS මිශ්‍රව ඇත

✅ Fastest fix

① වත්මන් අක්ෂර සමුහය පරීක්ෂා කරන්න

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

නකල් ඇතුළත් කිරීම

🔎 Cause

  • නකල් ප්‍රාථමික යතුරු
  • UNIQUE සීමා උල්ලංඝනය

✅ Fix options

Option 1: Ignore duplicates

විකල්ප 1: නකල් නොසලකා හරින්න

LOAD DATA LOCAL INFILE 'file.csv'
INTO TABLE example_table
IGNORE;
Option 2: Update on duplicate

විකල්ප 2: නකල් වූ විට යාවත්කාලීන කරන්න

INSERT INTO example_table (id, name)
VALUES (1,'John')
ON DUPLICATE KEY UPDATE name=VALUES(name);
Option 3: Use a staging table

විකල්ප 3: තාවකාලික වගුවක් භාවිතා කරන්න

CREATE TEMPORARY TABLE temp LIKE example_table;
-- LOAD into temp first
INSERT INTO example_table
SELECT * FROM temp;

7.4 ERROR 1045

පරිශීලකයාට ප්‍රවේශය ප්‍රතික්ෂේප කරන ලදී

🔎 Cause

  • අප්‍රමාණවත් 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

🔎 Cause

  • කාලය අවසන් වීම
  • මතක අවසන් වීම
  • 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

✔ පියවරෙන් ආයාත කිරීමේ ප්‍රතිලාභ

  • අර්ධ දෝෂයක පසු නැවත උත්සාහ කිරීම පහසුය
  • දෝෂ ස්ථානය හඳුනා ගැනීම පහසුය
  • වඩා ස්ථායි සේවාදායක භාරය

8.2 තාවකාලිකව ඉන්ඩෙක්ස් සහ විදේශ යතුරු අක්‍රිය කිරීම

ආයාත කිරීමේදී, ඉන්ඩෙක්ස් යාවත්කාලීන කිරීම් බොහෝ විට bottleneck වේ.

✔ තාවකාලිකව ඉන්ඩෙක්ස් අක්‍රිය කිරීම

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 autocommit පාලනය (වේගවත් කිරීම)

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 විධානය

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 / encoding

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 විධානය
  • ඉහළ-වේග CSV ආයාතය → LOAD DATA LOCAL INFILE
  • කුඩා එකවර කාර්ය → GUI

ඔබට අනිශ්චිත නම්, CLI භාවිතය අතින් ස්ථාවරතම තේරීමයි.

මෙම සමඟ, ඔබට MySQL ආයාත සඳහා සම්පූර්ණ දැනුමක් ඇත.

ඔබේ පරිසරයේ එය පරීක්ෂා කර, ස්ථාවර මෙහෙයුම් ක්‍රමලේඛයක් ගොඩනඟන්න.