মাইএসকিউএল: # 126 - টেবিলের জন্য ভুল কী ফাইল


108

আমি একটি মাইএসকিউএল কোয়েরি থেকে নিম্নলিখিত ত্রুটি পেয়েছি।

#126 - Incorrect key file for table

আমি এই টেবিলের জন্য একটি কীও ঘোষণা করি নি, তবে আমার সূচকগুলি রয়েছে। সমস্যা কি হতে পারে কেউ কি জানেন?


3
আমি
এটির


যদি আপনি এটি করে থাকেন REPAIR TABLEএবং এখনও এটি পেয়ে থাকেন /tmpতবে আরও জায়গা রয়েছে তবে আপনি কেবল সার্ভারটি রিবুট করার চেষ্টা করতে চাইতে পারেন।
icc97

উত্তর:


160

যতবারই এটি ঘটেছে, এটি আমার অভিজ্ঞতার পুরো ডিস্ক।

সম্পাদনা

এটিও লক্ষণীয় যে এটি কোনও র‌্যামডিস্ক কনফিগার করা থাকলে কোনও বড় টেবিল পরিবর্তন করার মতো জিনিসগুলি করার সময় একটি সম্পূর্ণ র‌্যামডিস্কের কারণে ঘটতে পারে। আপনি যদি এর আকার বাড়াতে না পারেন তবে এই জাতীয় ক্রিয়াকলাপের জন্য অস্থায়ীভাবে র‌্যামডিস্ক লাইনটি মন্তব্য করতে পারেন।


4
এছাড়াও আমার কাছে প্রায় 2 জিবি ফ্রি স্পেস রয়েছে এবং এই ত্রুটিটি পেয়েছি। তবে আমার ডাটাবেসের প্রায় 1.7 জিবি এবং ডাটাবেসটিতে 1.5 টাকার সারি সহ একটি টেবিল রয়েছে। পরিষ্কার করার পরে, যখন 3.5-5Gb সম্পর্কে মুক্ত স্থান হয়, ত্রুটিটি অদৃশ্য হয়ে যায়।
সের্গেই

2
আমার সিস্টেমে (ফেডোরা 18) /tmpএকটি ছোট টিএমপিএফএস ফাইল সিস্টেম এবং মাইএসকিএলটি সেখানে একটি টেম্প টেবিল লিখে স্থানের বাইরে চলে গেছে। Mysql.comtmpdir
jcbwlkr

1
যদিও এটি একটি কারণ হতে পারে তবে এটি আমার জন্য পুরো ডিস্কের কারণে কখনও হয়নি। আমি এই ত্রুটিটি একটি অ্যামাজন আরডিএস উদাহরণে 10 জিবি বরাদ্দ পেয়েছি যা কেবল 1% পূর্ণ। কম স্মৃতিশক্তিও এর কারণ হতে পারে।
সেরিন

2
আপনি tmpdir = / mysql_tmp বা my.cnf- এ কিছু সেট করতে পারেন এবং এটি মূল ফাইল সিস্টেমে থাকা উচিত (তবে এটি বড়))
কেভিন পার্কার

আমার ডিস্কের স্থান থাকলেও আমি একই ত্রুটি পেয়েছি [root @ ADM-PROD-PERCONA-SL-RP-03 পারকোনা] # ডিএফ -h ফাইল-সিস্টেমের আকার ব্যবহারযোগ্য / ডিভ / এক্সভিডিএ 7.8 জি 1.6 জি 6.1 জি 21% এ মাউন্ট করা% ব্যবহার করুন / devtmpfs 61G 80K 61G 1% / dev tmpfs 61G 0 61G 0% / dev / shm / dev / md0 3.0T 1.8T 1.2T 61% / mnt
আশীষ কার্পে

35

প্রথমত, আপনার জানা উচিত যে কী এবং সূচকগুলি মাইএসকিউএলে প্রতিশব্দ yms আপনি তৈরি টেবিল সিনট্যাক্স সম্পর্কে ডকুমেন্টেশন তাকান , আপনি পড়তে পারেন:

KEYসাধারণত এর প্রতিশব্দ INDEX। মূল বৈশিষ্ট্যটি কলাম সংজ্ঞা PRIMARY KEYহিসাবে KEYদেওয়া ঠিক যেমন নির্দিষ্ট করা যেতে পারে । এটি অন্যান্য ডাটাবেস সিস্টেমের সাথে সামঞ্জস্যের জন্য প্রয়োগ করা হয়েছিল।


এখন, আপনি যে ধরণের ত্রুটি পাচ্ছেন তা দুটি জিনিসের কারণে হতে পারে:

  • মাইএসকিউএল সার্ভারে ডিস্ক সমস্যা
  • দূষিত কী / টেবিল

প্রথম ক্ষেত্রে, আপনি দেখতে পাবেন যে আপনার প্রশ্নের সীমাবদ্ধতা যুক্ত করা অস্থায়ীভাবে সমস্যার সমাধান করতে পারে। যদি এটি এটি আপনার হয়ে থাকে তবে আপনার কাছে সম্ভবত এমন একটি tmpফোল্ডার রয়েছে যা আপনি চেষ্টা করছেন এমন প্রশ্নের আকারের জন্য খুব ছোট। তারপরে আপনি সিদ্ধান্ত নিতে বা tmpবড় করতে বা আপনার প্রশ্নগুলি আরও ছোট করে তুলতে পারেন! ;)

কখনও কখনও, tmpযথেষ্ট বড় তবে এখনও পূর্ণ হয়ে যায়, আপনাকে এই পরিস্থিতিতে কিছু ম্যানুয়াল পরিষ্কার করতে হবে।

দ্বিতীয় ক্ষেত্রে, মাইএসকিউএল এর ডেটা নিয়ে আসল সমস্যা রয়েছে। আপনি যদি সহজেই ডেটা sertোকাতে পারেন তবে আমি কেবল টেবিলটি ড্রপ / পুনরায় তৈরি করতে এবং ডেটাটি পুনরায় সন্নিবেশ করার পরামর্শ দেব। আপনি না পারলে মেরামত টেবিলের সাহায্যে জায়গায় টেবিলটি মেরামতের চেষ্টা করতে পারেন । এটি একটি দীর্ঘতর প্রক্রিয়া যা খুব ভাল ব্যর্থ হতে পারে।


সম্পূর্ণ ত্রুটির বার্তা আপনি পান:

'FILEPATH.MYI' টেবিলের জন্য ভুল কী ফাইল; এটি মেরামত করার চেষ্টা করুন

এটি বার্তায় উল্লেখ করেছে যে আপনি এটি মেরামতের চেষ্টা করতে পারেন। এছাড়াও, আপনি যে প্রকৃত ফাইলপথটি পান তা যদি আপনি দেখে থাকেন তবে আপনি আরও জানতে পারবেন:

  • যদি এটির মতো কিছু হয় /tmp/#sql_ab34_23fতার অর্থ মাইএসকিউএলকে কোয়েরি আকারের কারণে একটি অস্থায়ী টেবিল তৈরি করা দরকার। এটি এটি / টেম্পে সঞ্চয় করে এবং সেই অস্থায়ী টেবিলের জন্য আপনার / tmp এ পর্যাপ্ত জায়গা নেই।

  • যদি এর পরিবর্তে প্রকৃত টেবিলের নাম থাকে তবে এর অর্থ এই যে এই টেবিলটি সম্ভবত খুব দূষিত এবং আপনার এটি মেরামত করা উচিত।


যদি আপনি সনাক্ত করেন যে আপনার সমস্যাটি / টিএমপি আকারের সাথে রয়েছে তবে ঠিক ঠিক মতো একই প্রশ্নের এই উত্তরটি পড়ুন: মাইএসকিউএল, ত্রুটি 126: টেবিলের জন্য ভুল কী ফাইল


16

এই নির্দেশাবলী অনুসরণ করে আমার টিএমপি ডিরেক্টরিটি পুনরায় তৈরি করতে এবং সমস্যাটি সমাধান করার অনুমতি দিয়েছে:

সমস্ত ফাইল সিস্টেম এবং তাদের ডিস্ক ব্যবহার মানব পাঠযোগ্য আকারে প্রদর্শন করুন:

df -h

ফাইলগুলি খোলে এমন প্রক্রিয়াগুলি সন্ধান করুন /tmp

sudo lsof /tmp/**/*

তারপরে অ্যামাউন্ট /tmpএবং /var/tmp:

umount -l /tmp
umount -l /var/tmp

তারপরে দূষিত পার্টিশন ফাইলটি সরান:

rm -fv /usr/tmpDSK

তারপরে একটি নতুন নতুন তৈরি করুন:

/scripts/securetmp

নোট করুন যে সিকিউরিটিম্প পার্ল স্ক্রিপ্ট সম্পাদনা করে আপনি নিজে টিএমপি ডিরেক্টরিটির আকার নিজেই সেট করতে পারেন, তবে স্ক্রিপ্টটি চালিয়ে আমাদের সার্ভারে টিএমপি ডিরেক্টরিটির আকার প্রায় 450 এমবি থেকে 4.0 জিবি বাড়িয়েছে।


9

# 126 ত্রুটি সাধারণত ঘটে যখন আপনি কোনও দুর্নীতিগ্রস্থ টেবিল পেয়েছেন। এটি সমাধানের সর্বোত্তম উপায় হ'ল মেরামত করা। এই নিবন্ধটি সাহায্য করতে পারে:

http://dev.mysql.com/doc/refman/5.0/en/repair-table.html


আমি আমার সমস্ত কী মুছে ফেলেছি এবং অনুকূলিত করেছি। আমার জিজ্ঞাসা খুব ধীর হলে আমি কি এই ত্রুটিটি পেতে পারি?
ব্রায়ান

আমি নিশ্চিত নই তবে আমার বোঝার উপর ভিত্তি করে, এই ত্রুটিটি কোনও ক্যোয়ারির কারণে ঘটেনি। আপনি এখনও মেরামতের চেষ্টা করেছেন?
জুনমেট

3

যখন আমি সেট আমি এই ত্রুটি পেয়েছিলাম ft_min_word_len = 2মধ্যে my.cnf, যা, 2 করার জন্য একটি সম্পূর্ণ টেক্সট সূচক সর্বনিম্ন শব্দ দৈর্ঘ্য কমে যায় 4 ডিফল্ট থেকে।

টেবিলটি মেরামত করা সমস্যার সমাধান করেছে।


আপনি কি জানেন যে আপনি যখন প্রথমে সেটিংসটি পরিবর্তন করেন কেবল তখনই এটি ঘটে থাকে বা ন্যূনতম শব্দের দৈর্ঘ্য খুব কম হওয়ার কারণে এটি এমন কি ঘটতে পারে?
Y0lk

1

আপনার ক্যোয়ারিতে সীমাটি ব্যবহার করার চেষ্টা করুন। এটি পুরো ডিস্কের কারণেই @ মন্টস্টার এক্স দ্বারা বলা হয়েছে।

আমিও এই সমস্যার মুখোমুখি হয়েছি এবং প্রশ্নের সীমাতে সমাধান করেছি, কারণ সেখানে হাজার হাজার রেকর্ড ছিল। এখন ভাল কাজ করছি :)


1

আমি জানি যে এটি একটি পুরানো বিষয় তবে উল্লিখিত কোনও সমাধানই আমার পক্ষে কাজ করেনি। আমি অন্য কিছু কাজ করেছি যা কাজ করেছে:

তোমার দরকার:

  1. মাইএসকিউএল পরিষেবা বন্ধ করুন:
  2. মাইএসকিএল \ ডেটা খুলুন
  3. Ib_logfile0 এবং ib_logfile1 উভয়ই সরান।
  4. পরিষেবাটি পুনরায় চালু করুন


1

আমি এই সমস্যাটি এর সাথে স্থির করেছি:

ALTER TABLE table ENGINE MyISAM;
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
ALTER TABLE table ENGINE InnoDB;

সাহায্য করতে পারে


আমি ঠিক একটি পদক্ষেপ ব্যবহার করে অনুরূপ সমস্যার সমাধান করতে সক্ষম হয়েছি, আপনি আপনার বর্তমান টেবিল ইঞ্জিনটি ব্যবহার করে আপনার টেবিলটি পুনর্নির্মাণ করতে পারেন। উদাহরণস্বরূপ, আপনি মাইসাম ব্যবহার করলে: অল্টার ইগনোর টেবিল table ইঞ্জিন = মাইআইএসএএম;
সানডাউনে

1

যান /etc/my.cnfএবং মন্তব্য করুনtmpfs

#tmpdir=/var/tmpfs

এটি সমস্যার সমাধান করে।

আমি অন্য উত্তরে প্রস্তাবিত কমান্ডটি চালিয়েছি এবং ডিরেক্টরিটি ছোট থাকাকালীন এটি খালি ছিল, সুতরাং স্থানটি সমস্যা ছিল না।

/var/tmp$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/vzfs              60G   51G  9.5G  85% /
none                  1.5G  4.0K  1.5G   1% /dev
tmpfs                 200M     0  200M   0% /var/tmpfs
/var/tmpfs$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/vzfs              60G   51G  9.5G  85% /
none                  1.5G  4.0K  1.5G   1% /dev
tmpfs                 200M     0  200M   0% /var/tmpfs

0

কোয়েরিতে জড়িত প্রতিটি টেবিলের জন্য মেরামত কমান্ড চালানোর চেষ্টা করুন।

মাইএসকিউএল প্রশাসক ব্যবহার করুন, ক্যাটালগ -> আপনার ক্যাটালগ নির্বাচন করুন -> একটি সারণি নির্বাচন করুন -> রক্ষণাবেক্ষণ বোতামটি ক্লিক করুন -> মেরামত -> এফআরএম ব্যবহার করুন।


0

এখন অন্য উত্তরগুলির জন্য এটি আমার জন্য সমাধান হয়েছে। দেখা যাচ্ছে যে একই ক্যোয়ারিতে একটি কলাম এবং একটি সূচি নামকরণের কারণে ত্রুটির কারণ হয়েছিল।

কাজ করছে না:

-- rename column and rename index
ALTER TABLE `client_types`
    CHANGE `template_path` `path` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
    DROP INDEX client_types_template_path_unique,
    ADD UNIQUE INDEX `client_types_path_unique` (`path` ASC);

কাজ (2 বিবৃতি):

-- rename column
ALTER TABLE `client_types`
    CHANGE `template_path` `path` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;
-- rename index
ALTER TABLE `client_types`
    DROP INDEX client_types_template_path_unique,
    ADD UNIQUE INDEX `client_types_path_unique` (`path` ASC);

এটি মারিয়াডিবি 10.0.20 এ ছিল। মাইএসকিউএল 5.5.48 এ একই প্রশ্নের সাথে কোনও ত্রুটি ছিল না।


0
mysql> set global sql_slave_skip_counter=1; start slave; show slave status\G

তারপরে ত্রুটি উপস্থিত রয়েছে:

 Error 'Table './openx/f_scraper_banner_details' is marked as crashed and should be repaired' on query. Default database: 'openx'. Query: 'INSERT INTO f_scraper_banner_details(job_details_id, ad_id, client_id, zone_id, affiliateid, comments, pct_to_report, publisher_currency, sanity_check_enabled, status, error_code, report_date) VALUES (10274859, 321264, 0, 31926, 0, '', -1, 'USD', 1, 'FAILURE', 'INACTIVE_BANNER', '2016-06-28 04:00:00')'

mysql> মেরামতের টেবিল f_scraper_banner_dETails;

এটি আমার পক্ষে কাজ করেছে


0

আমার সমস্যাটি খারাপ জিজ্ঞাসা থেকে এসেছে। আমি এফআরএম-তে একটি টেবিল রেফারেন্স করলাম সেলেকের ক্ষেত্রে উল্লেখ করা হয়নি।

উদাহরণ:

   SELECT t.*,s.ticket_status as `ticket_status`
   FROM tickets_new t, ticket_status s, users u

, users uএটা কি আমার জন্য সমস্যা সৃষ্টি করছিল। এটি সরানো সমস্যার সমাধান করেছে।

রেফারেন্সের জন্য এটি একটি কোডআইজিনিটার দেব পরিবেশে ছিল।


0

Ft_min_word_len (পূর্ণ পাঠ্য মিনিটের শব্দের দৈর্ঘ্য) হ্রাস করার পরে কোনও টেবিলে লেখার সময় আমি এই বার্তাটি পেয়েছি । এটি সমাধানের জন্য, টেবিলটি মেরামত করে সূচিটি পুনরায় তৈরি করুন।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.