mysqldump –where: ඔබට අවශ්‍ය පේළි පමණක් නිර්යාත කිරීමේ ක්‍රමය (ප්‍රායෝගික උදාහරණ සමඟ)

目次

1. හැඳින්වීම

බැකප් මෙහෙයුම් අතර “අවශ්‍ය දත්ත පමණක්” ලබා ගැනීමේ අවශ්‍යතාව

MySQL ධාවනය කරන විට, නිතර බැකප් කිරීම අත්‍යවශ්‍ය වේ. නමුත්, තත්ත්වය අනුව “සියලු දත්ත dump කිරීම අවශ්‍ය නොවේ” යන බොහෝ අවස්ථා පවතී. උදාහරණයක් ලෙස:

  • විශාල වගුවකින් නිශ්චිත කාල පරාසයක දත්ත පමණක් ලබා ගැනීම
  • තත්ත්වය විශේෂිත අගයක් ගන්නා ලේඛන පමණක් dump කිරීම
  • පරණ දත්ත ඉවත් කර, වර්තමානයේ භාවිතා වන ලේඛන පමණක් මාරු කිරීම
  • අවශ්‍ය දත්ත පමණක් පරීක්ෂණ පරිසරයකට ගෙන යාම

මෙවැනි අවස්ථා වල, mysqldump හි --where විකල්පය ඉතා ප්‍රයෝජනවත් වේ.

mysqldump සහ WHERE කොන්දේසි අතර සම්බන්ධතාවය

සාමාන්‍යයෙන්, mysqldump “වගුවකට සියලු පේළි backup කිරීම” සඳහා යොදා ගනී. නමුත්, --where සමඟ, ඔබට SQL WHERE වාක්‍යය වැනි කොන්දේසි නියම කර අවශ්‍ය ලේඛන පමණක් අඩංගු dump ගොනුවක් සාදන්න පුළුවන්.

  • created_at >= '2024-01-01' වැනි දිනයේ කොන්දේසි
  • status = 'active' වැනි තත්ත්ව කොන්දේසි
  • id BETWEEN 100 AND 200 වැනි පරාස ෆිල්ටර්
  • AND / OR භාවිතා කර එකට එක් කරන බහු කොන්දේසි

ඒ අනුව, mysqldump එකක් “backup මෙවලම” පමණක් නොව, ඉලක්කගත දත්ත ලබා ගැනීමේ සවිස්තරාත්මක මෙවලම ලෙසද භාවිතා කළ හැකිය.

කොන්දේසිමය dump ගොනු වල ප්‍රතිලාභ

--where භාවිතා කිරීමෙන් ඔබට පහත ප්‍රතිලාභ ලැබේ:

  • බැකප් කාලය අඩු කිරීම අවශ්‍ය ලේඛන පමණක් ලබා ගන්නා නිසා, වැඩ බර අඩු වේ.
  • කුඩා dump ගොනු ප්‍රමාණය විශාල වගු ඇති පරිසරවල විශේෂයෙන් ප්‍රයෝජනවත්.
  • දත්ත මාරු කිරීමේ කාර්යක්ෂමතාව පරීක්ෂණ හෝ staging පරිසරවලට අවශ්‍ය දත්ත පමණක් ලෝඩ් කළ හැක.
  • ආරක්ෂණය සඳහා සුදුසු “පරණ දත්ත වෙනම ආරක්ෂා කිරීම” වැනි සවිස්තරාත්මක සැලසුම් සලස්විය හැක.

මෙම ලිපියෙන් ඔබ ඉගෙන ගන්නා දේ

මෙම ලිපිය mysqldump මූලික කරුණු සිට WHERE‑පෙරහන් කර ඇති dump ගොනු ලිවීම, ප්‍රායෝගික උදාහරණ, මෙහෙයුම් අවධානම්, හා දෝෂ නිරාකරණය දක්වා සවිස්තරාත්මක විස්තරයක් ලබා දෙයි.

  • මූලික mysqldump වාක්‍ය රචනය
  • WHERE‑පෙරහන් කර ඇති dump ගොනු ප්‍රායෝගික උදාහරණ
  • දිනය සහ තත්ත්ව අගයන් භාවිතා කරන විශේෂිත කොන්දේසි රටා
  • විශාල වගු මත කාර්යක්ෂමතාවය ගැන සිතීම
  • පොදු දෝෂ සහ ඒවා සකස් කිරීමේ ක්‍රම
  • සැබෑ මෙහෙයුම් වලට සම්බන්ධිත හොඳ පුරුදු

ආරම්භක‑හිතකාමී ලෙස, නියමිත විධාන සහ ඒවා කවදා භාවිතා කළ යුතුද යන්න අපි සවිස්තරාත්මකව පැහැදිලි කරමු.

2. Quick refresher: basic mysqldump usage

mysqldump යනු MySQL හි නිල backup මෙවලමයි. එහි ප්‍රධාන විශේෂත්වය වන්නේ දත්ත සහ වගු ව්‍යුහයන් ටෙක්ස්ට්‑මූලික SQL ගොනුවක් ලෙස සුරකින්න හැකියාවයි. WHERE කොන්දේසි භාවිතා කිරීමට පෙර, ඔබට අවශ්‍ය මූලික කරුණු සමාලෝචනය කරමු.

මූලික වාක්‍ය රචනය සහ මූලික විකල්ප

mysqldump මූලික වාක්‍ය රචනය ඉතා සරලයි:

mysqldump -u username -p database_name > dump.sql

ඔබ විධානය ක්‍රියාත්මක කරන විට, මුරපදය ඇතුළත් කිරීමට ඉල්ලීමක් ලැබේ.
මෙම ආකාරයෙන්, දත්ත ගබඩාවේ සියලු වගු dump කරනු ලැබේ.

සාමාන්‍යයෙන් භාවිතා වන මූලික විකල්ප

mysqldump හි විකල්ප බොහොමයක් ඇත, නමුත් පහත සඳහන් විකල්පයන් විශේෂයෙන් ජනප්‍රියයි:

  • --single-transaction InnoDB වගු lock නොකර backup කරයි. සජීවී පද්ධතියකදත් ආරක්ෂිතයි.
  • --quick පේළි එකින් එක ප්‍රොසෙස් කර මතක භාවිතය අඩු කරයි. විශාල වගු සඳහා ප්‍රයෝජනවත්.
  • --default-character-set=utf8mb4 dump ගොනුවේ අක්ෂර සමුදාය නියම කර, අකුරු විකෘති වීම වැළැක්වයි.
  • --no-data වගු ව්‍යුහයන් පමණක් dump කරයි (දත්ත නොමැත).
  • --tables අවශ්‍ය වගු නම් සඳහන් කර, ඔබට අවශ්‍ය දේ පමණක් dump කරගත හැක.

මෙම විකල්ප එකතු කිරීමෙන්, ඔබේ තත්ත්වයට සුදුසු උපරිම backup එකක් සාදන්න පුළුවන්.

විශේෂිත වගු පමණක් dump කිරීමේ ක්‍රමය

mysqldump භාවිතා කර, දත්ත ගබඩාවේ නාමය පසු වගු නාම ලැයිස්තුවක් දී, ඔබට අවශ්‍ය වගු පමණක් backup කළ හැකිය.

mysqldump -u root -p mydb users orders > selected_tables.sql

මෙම උදාහරණයේ users සහ orders වගු පමණක් dump කරයි.

ඔබට බහු වගු අවශ්‍ය වුවත්, සම්පූර්ණ දත්ත ගබඩාව අවශ්‍ය නොවන්නේ නම්, මෙය ඉතා ප්‍රයෝජනවත් වේ.

බහු දත්ත ගබඩා එකවර dump කිරීම

බහු දත්ත ගබඩා එකවර backup කිරීමට, --databases හෝ --all-databases භාවිතා කරන්න.

  • නිර්දේශිත බහු දත්ත සමුදායන් dump කිරීම mysqldump -u root -p --databases db1 db2 db3 > multi_db.sql
  • සේවාදායකයේ සියලුම දත්ත සමුදායන් dump කිරීම mysqldump -u root -p --all-databases > all.sql

WHERE-පෙරඅනුමැතියෙන් පෙරඅනුමැති dump ගැනීම් මූලික වශයෙන් ටේබල් එකකට භාවිතා වන බැවින්, “table-level dumps” සංකල්පය පළමුව තේරුම් ගැනීම වැදගත් වේ.

mysqldump සමඟ මූලික බැකප්-විසුරුවා හඳුනාගැනීම

mysqldump භාවිතයෙන් මූලික බැකප් හඳුනාගැනීම පහත පරිදි වේ:

  1. mysqldump මගින් dump ගොනුවක් ජනනය කිරීම
  2. gzip වැනි දෙයකින් එය තද කිරීම (විකල්පයක් ලෙස)
  3. එය ආරක්ෂිත ස්ථානයක ගබඩා කිරීම (වෙනත් සේවාදායකයක්, බාහිර ගබඩාවක්, ආදිය)
  4. mysql පණිවිඩය මගින් import කිරීමෙන් විසුරුවා හැරීම

විසුරුවා හැරීම මෙසේ සිදු වේ:

mysql -u root -p mydb < dump.sql

mysqldump සරල පෙළඹුල් SQL ජනනය කරන බැවින්, එය කළමනාකරණය කිරීම පහසු වන අතර නිශ්චිත පරිසරයකට බැඳුනු නොවේ.

3. --where විකල්පය භාවිතයෙන් කොන්ඩිෂනල් dump ගැනීම්

mysqldump හි බලවත්ම විකල්පයන්ගෙන් එකක් වන්නේ --where යි.
ඔබට MySQL SELECT WHERE කොටසකදී භාවිතා කරන ආකාරයටම කොන්ඩිෂන්ස් නිර්දේශ කළ හැකි අතර, ඔබට අවශ්‍ය පේළි පමණක් dump කළ හැක.

--where මොනවද කළ හැකි?

සාමාන්‍ය mysqldump ටේබල් එකක්ම බැකප් කරයි.
එහෙත් --where මගින්, ඔබට “extraction-style backups” වැනි දේ කළ හැක:

  • නව දත්ත පමණක් extract කිරීම
  • status active තත්ත්වයේ පේළි පමණක් dump කිරීම
  • නිශ්චිත පරිශීලකයෙකුගේ දත්ත පමණක් බැකප් කිරීම
  • නිශ්චිත ID පරාසය තුළ පේළි පමණක් extract කිරීම
  • බහු කොන්ඩිෂන්ස් ඒකාබද්ධ කිරීම (AND/OR)

මේ නිසා mysqldump බැකප් මෙවලමක් ලෙස පමණක් නොව,
“අවුල්පෙරඅනුමැති සමඟ දත්ත සංක්‍රමණ මෙවලමක්” ලෙසද භාවිතා කළ හැක.

මූලික syntax

--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. status මගින් පෙරඅනුමැති කිරීම (active පමණක්)

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. ද්විත්ව උපුටා vs. තනි උපුටා භාවිතය

--where="status = 'active'"

ඉහත පරිදි පෙන්වා ඇති ආකාරයට,
බාහිර → ද්විත්ව උපුටා
අභ්‍යන්තර → තනි උපුටා
මෙය සම්මත ප්‍රවේශය වේ.

2. එය ටේබල් එකකට පමණක් භාවිතා කළ හැක

--where සම්පූර්ණ දත්ත සමුදායක් සඳහා භාවිතා කළ නොහැක.
ඔබට එය එක් එක් ටේබල් සඳහා නිර්දේශ කළ යුතුය.

3. දිනය සහ string formats සමඟ සැලකිලිමත් වන්න

අදාළ column definition MySQL හි format එකට ගැලපෙන්නේ නම්, පේළි extract නොවේ.

4. බරපතල කොන්ඩිෂන්ස් processing වේගය අඩු කළ හැක

විශේෂයෙන්ම WHERE කොන්ඩිෂන් index එකක් භාවිතා කළ නොහැකි නම්, dump වේගය අඩු වේ.

ප්‍රායෝගික භාවිතා තත්ත්වයන්

උදාහරණය 1: නිශ්චිත කාලයක logs පමණක් extract කිරීම

මෙම උදාහරණයෙන් විශාල log ටේබල් එකකින් operations සඳහා අවශ්‍ය නවතම logs පමණක් extract කරයි.

mysqldump -u root -p app logs \
--where="created_at >= NOW() - INTERVAL 30 DAY" \
> logs_last_30days.sql

උදාහරණය 2: active පරිශීලකයින් පමණක් migrate කිරීම (නව පරිසරයකට)

mysqldump -u root -p service users \
--where="status = 'active'" \
> active_users.sql

උදාහරණය 3: විමර්ශනය සඳහා නිශ්චිත පරිශීලකයෙකුගේ දත්ත පමණක් extract කිරීම

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 වගුව ලබා ගන්න
  • නමුත් user_id යොමු කරන orders වගුව නොමැත

මෙම අවස්ථාවේ, ප්‍රතිස්ථාපනයේදී විදේශ යතුරු දෝෂයක් සිදුවිය හැක.

→ ප්‍රතිකාර

  • SET FOREIGN_KEY_CHECKS=0; භාවිතා කර විදේශ යතුරු පරීක්ෂණය තාවකාලිකව අක්‍රිය කරන්න
  • අවශ්‍ය නම්, ඒම කොන්දේසි සමඟ සම්බන්ධ වගු ඩම්ප් කරන්න
  • ඔබේ භාවිතය සඳහා සම්බන්ධතා අඛණ්ඩතාව අවශ්‍යද යන්න පෙරම තේරුම් ගන්න

3. සැකැස්ම වෙනස්කම් (dev vs. production මාරු) ගැන සැලකිල්ලෙන් සිටින්න

විකසනය සහ නිෂ්පාදනය අතර වගු සැකැස්ම වෙනස් නම්, ප්‍රතිස්ථාපනයේදී දෝෂ සිදුවිය හැක.

උදාහරණය:

  • Column A ස්ථානීයව පවතින නමුත් නිෂ්පාදනයේ ඉවත් කර ඇත
  • නිෂ්පාදනයේ NOT NULL ඇත, නමුත් ඩම්ප් දත්ත වල NULL අඩංගු වේ
  • තීරු අනුපිළිවෙළ හෝ දත්ත වර්ග වෙනස් වේ

→ ප්‍රතිකාර

  • SHOW CREATE TABLE table_name; භාවිතා කර පෙර පරීක්ෂා කරන්න
  • අවශ්‍ය නම්, --no-create-info (සැකැස්ම නොඇතුළත්) භාවිතා කර දත්ත පමණක් පූරණය කරන්න
  • ඩම්ප් කිරීම සහ ප්‍රතිස්ථාපනයට පෙර සැකැස්ම එකතු කරන්න

වෙනස්කම් බැකප් සහ මාරු සඳහා එය භාවිතා කිරීම

WHERE‑පෙරහන් කරන ලද ඩම්ප් ඔබට “අවශ්‍ය දත්ත පමණක් වෙනත් පරිසරයකට ගෙන යාම” අවශ්‍ය වන විට ඉතා ප්‍රයෝජනවත් වේ.

1. අවශ්‍ය පරාසය පමණක් පරීක්ෂණ පරිසරයකට මාරු කරන්න

  • ලොග්ස් වල අවසන් 30 දින පමණක්
  • ක්‍රියාශීලී පරිශීලකයන් පමණක්
  • ඔබට තහවුරු කිරීමට අවශ්‍ය විකුණුම් කාලය පමණක්

මෙම ලබාගැනීම් පරීක්ෂණ දත්ත ගබඩා ප්‍රමාණය අඩු කිරීමේදී වැදගත් දායකත්වයක් ලබා දෙයි.

2. පරණ දත්ත සංරක්ෂණය කරන්න

අපේක්ෂණ DB වර්ධනය වෙමින් පවතින විට, පරණ දත්ත පමණක් නිස්සාරණය කර වෙනම තැනක සංරක්ෂණය කළ හැකියි මෙසේ:

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 පෙරහන බලාත්මක නොවී සියල්ලම ගිල්පැනේ

හේතු

  • වැරදි උපුටා දැක්වීම
  • විශේෂ අක්ෂර shell විසින් විග්‍රහ කරනු ලැබේ
  • ප්‍රකාශනය වගුවේ කොටුව සමඟ නොගැලපේ (සංක්‍රමණ/දිනපතා ආකෘති නොගැලපීම)

උදාහරණය (සුලබ වැරැද්ද)

--where=status='active'

නිවැරදි ආකාරය

--where="status = 'active'"

විසඳුම

  • පිටත ද්විත්ව උපුටා සහ ඇතුළත තනි උපුටා භාවිතා කරන්න
  • LIKE, > හෝ < භාවිතා කරන විට එයම කරන්න (උපුටාවකින් ආවරණය කරන්න)
  • දත්ත සමුදායේ එය සංරක්ෂණය වන ආකාරයට දිනපතා ආකෘතිය ගැලපෙන බව පරීක්ෂා කරන්න

3. ගිල්පැනවීමේ ප්‍රමාණය අසාමාන්‍ය ලෙස විශාල / සැකසුම මන්දගාමී

හේතු

  • WHERE කොන්දේසියේ භාවිතා වන කොටුවේ සුචිකාවක් නොමැති වීම
  • LIKE ‘%keyword’ වැනි සරලාකෘති නොවන ගැලපීම් භාවිතා කිරීම
  • කොන්දේසි ඉතා සංකීර්ණ
  • සුචිකාවක් නැති විශාල වගුව ස්කෑන් කිරීම

විසඳුම

  • WHERE හි භාවිතා වන කොටුවන්ට සුචිකාවක් එකතු කිරීම සලකා බලන්න
  • විශාල වගුවන් සඳහා, ID පරාසය අනුව ගිල්පැනවීම් බෙදන්න
  • මතකයේ බර අඩු කිරීමට සැමවිටම --quick භාවිතා කරන්න
  • රාත්‍රියේ හෝ බහුල ගමනාගමනය අඩු වේලාවන්හි ධාවනය කරන්න

4. විකෘති පාඨ (අක්ෂර සංකේතන ගැටලු)

හේතු

  • පරිසරය අනුව අකුරු සෙට් මූල්‍යථන වෙනස් වේ
  • ගිල්පැනීමේ කාලයේ සහ ප්‍රතිස්ථාපනයේ කාලයේ charset නොගැලපේ
  • utf8 සහ utf8mb4 මිශ්‍ර කිරීම

විසඳුම

ගිල්පැනීමේදී සැමවිටම charset නිර්දේශ කරන්න:

--default-character-set=utf8mb4

※ ප්‍රතිස්ථාපනයේදී එයම සැකසුම භාවිතා කිරීම විකෘති පාඨ වැළැක්වීමට උපකාරී වේ.

5. Duplicate entry හේතුවෙන් ආනයනය කළ නොහැකි (ප්‍රාථමික යතුර සමානකරණය)

කොන්දේසි සහිත ගිල්පැනවීම් “අවශ්‍ය ලේඛන පමණක්” නිස්සාරණය කිරීම නිසා, පහත සඳහන් විට සමානකරණ දෝෂ ලැබේ:

  • පවතින වගුවේ දැනටමත් එයම 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 වැනි ප්‍රතිඵල නොමැති (non‑prefix) ගැලපීම් ඉන්ඩෙක්ස් භාවිතා නොකරයි, එබැවින් මන්දගාමී වේ.

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 is one of the easiest backup tools to use in MySQL, and by combining it with the --where option, you can go beyond simple backups and use it as a “flexible data extraction tool.” → mysqldump යනු MySQL හි භාවිතයට පහසුම බැකප් මෙවලම් අතරින් එකක් වන අතර, --where විකල්පය සමඟ ඒකතු කිරීමෙන්, ඔබට සරල බැකප් වලට අමතරව “ආකෘතිමය දත්ත ලබා ගැනීමේ මෙවලම” ලෙස භාවිතා කළ හැක.

In real-world operations, you often need to extract only a specific period, only a certain status, or split large data into smaller parts. In such situations, --where is extremely powerful and contributes significantly to efficient data management. → ප්‍රායෝගික මෙහෙයුම් වල, ඔබට නියමිත කාල පරාසයක්, නියමිත තත්ත්වයක් පමණක් ලබා ගැනීමට, හෝ විශාල දත්ත කුඩා කොටස් වලට වෙන් කිරීමට අවශ්‍ය වේ. එවැනි අවස්ථාවල, --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 --where Extract 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 → cron (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 is simple, but with a correct understanding and usage, it greatly expands your backup design options. → mysqldump සරලයි, නමුත් නිවැරදි අවබෝධය සහ භාවිතය සමඟ, ඔබේ බැකප් සැලසුම් විකල්පයන් විශාල ලෙස පුළුල් කරයි.