.Myd, .myi, .frm ফাইলগুলি থেকে কীভাবে MySQL ডাটাবেস পুনরুদ্ধার করবেন


183

কিভাবে আমার মাইএসকিউএল ডাটাবেস এক পুনঃস্থাপন .myd, .myi, .frmফাইল?


10
যদিও আমি এটির উত্তর দিয়েছি, এটি সত্যই সার্ভারফল্টের অন্তর্গত।
ডারোবার্ট

31
@ চন্দ্রজিৎ আপনার সত্যিকারের সর্বাধিক ভোট দেওয়া উত্তর গ্রহণ করা উচিত।
টাওয়ার

2
আরে চন্দ্রজিৎ, আপনি কেন ডার্বার্টের উত্তর গ্রহণ করবেন না? আমি নিশ্চিত করি এটি আমার পক্ষেও কাজ করে। এটা আপনার জন্য না? stackoverflow.com/help/someone-answers
তাজ

উত্তর:


173

যদি এটি মাইআইএসএএম টেবিল হয়, তবে .FRM, .MYD, এবং .MYI ফাইলগুলি একটি ডাটাবেস ডিরেক্টরিতে (যেমন, /var/lib/mysql/dbname) ফাঁসিয়ে দেওয়া সেই টেবিলটি উপলব্ধ করবে। এটি যেমন একই ডাটাবেস থেকে এসেছে, একই সার্ভার, একই মাইএসকিউএল সংস্করণ বা একই আর্কিটেকচার হতে হবে না। ফোল্ডারের জন্য আপনাকেও মালিকানা পরিবর্তন করতে হবে (যেমন, chown -R mysql:mysql /var/lib/mysql/dbname)

নোট করুন যে অনুমতিগুলি ( GRANTইত্যাদি) mysqlডাটাবেসের একটি অংশ । সুতরাং সেগুলি টেবিল সহ পুনরুদ্ধার করা হবে না; GRANTব্যবহারকারী তৈরি করতে, অ্যাক্সেস দিতে ইত্যাদি আপনার যথাযথ বিবৃতি চালানোর দরকার হতে পারে ( mysqlডাটাবেস পুনরুদ্ধার করা সম্ভব তবে আপনার মাইএসকিউএল সংস্করণ এবং mysql_upgradeইউটিলিটির প্রয়োজনীয় কোনও রান সম্পর্কে সতর্কতা অবলম্বন করা উচিত ।)

আসলে, আপনার সম্ভবত সম্ভবত .FRM (টেবিল কাঠামো) এবং .MYD (টেবিল ডেটা) প্রয়োজন, তবে .MYI (সূচিপত্র) পুনর্নির্মাণের জন্য আপনাকে টেবিলটি মেরামত করতে হবে।

একমাত্র সীমাবদ্ধতা হ'ল আপনি যদি ডাউনগ্রেড হন তবে আপনি ভালভাবে রিলিজ নোটগুলি পরীক্ষা করতে পারেন (এবং সম্ভবত মেরামতের টেবিলটি চালান)। আরও মাইএসকিউএল সংস্করণগুলি অবশ্যই বৈশিষ্ট্যগুলি যুক্ত করে।

[যদিও এটি সুস্পষ্ট হওয়া উচিত, আপনি যদি টেবিলগুলি মিশ্রিত করেন এবং মিলেন তবে those টেবিলগুলির মধ্যে সম্পর্কের অখণ্ডতা আপনার সমস্যা; মাইএসকিউএল যত্ন করে না, তবে আপনার অ্যাপ্লিকেশন এবং আপনার ব্যবহারকারীরা পারে। এছাড়াও, InnoDB টেবিলগুলির জন্য এই পদ্ধতিটি মোটেই কার্যকর হয় না। কেবল মাইআইএসএএম, তবে আপনার কাছে থাকা ফাইলগুলি বিবেচনা করে আপনার মাইআইএসএএম]


এটি কি তথ্য_স্কেমার টেবিলে উপযুক্ত এন্ট্রিগুলি যুক্ত না করে কাজ করবে? মানে এই ফাইলগুলি সন্ধান করার জন্য মাইএসকিউএলকে জানতে হবে?
জেনশাই

4
তথ্য_সেমার টেবিলগুলি আসলে বিদ্যমান থাকে না, এগুলি কেবলমাত্র অভ্যন্তরীণ ডাটাবেসের স্থিতিতে দেখা। দেখুন dev.mysql.com/doc/refman/5.0/en/information-schema.html
ব্রায়ান-ব্রাজিল

4
বাহ, আমি নোংরা অনুভব করেছি, তবে আমার মাইএসকিউএল 5.1 এর মধ্যে মাইএসকিউএল 4 ইনস্টল হওয়া থেকে পুরো ডিরেক্টরিটি বাদ দিয়ে কেবল ছদ্মবেশে টেবিলগুলি পুনরায় তৈরি করা হয়েছে। পুনরায় আরম্ভ বা কিছু নেই (উইন্ডোতে)।
ডেভ

4
এটি চালানোর জন্য আপনাকে কেবল স্মরণে রাখা দরকার (প্রতিটি টেবিলের জন্য): check table sometable; এবং তারপরে মেরামত চালান (কেবল প্রয়োজন হলে): repair table sometable;
নাক্স

3
এটি দুর্দান্ত কাজ করেছে! আমি ফাইলগুলি রেখে দিয়েছিলাম, তবে আমি মালিকানা "মাইএসকিএল: মাইএসকিএল" তে পরিবর্তন না করা পর্যন্ত মাইএসকিএল এগুলি "দেখছিল" না।
sean.boyer

26

মনে রাখবেন যে আপনি যদি এমওয়াইআই ফাইলটি পুনর্নির্মাণ করতে চান তবে মেরামত সারণীর সঠিক ব্যবহার হ'ল:

টেবিলটি সাময়িকভাবে USE_FRM মেরামত করুন;

অন্যথায় আপনি সম্ভবত অন্য একটি ত্রুটি পাবেন।


24

আমি সবেমাত্র এর সমাধান করতে পেরেছি। আমি উইন্ডোজ 7 এ মাইএসকিউএল 5.1 বা 5.6 ব্যবহার করছি।

  1. "সি: \ প্রোগ্রাম ডেটা \ মাইএসকিউএল \ এমএসকিউএল সার্ভার 5.1 \ ডেটা" তে অবস্থিত পুরানো ফাইল থেকে .frm ফাইল এবং আইবডাটা 1 অনুলিপি করুন
  2. বর্তমান এসকিউএল ইনস্ট্যান্সে এসকিউএল সার্ভার দৃষ্টান্ত বন্ধ করুন
  3. "সি: \ প্রোগ্রাম ডেটা \ মাইএসকিউএল \ এমএসকিউএল সার্ভার ৫.১ \ ডেটা" এ অবস্থিত ডেটাফোল্ডারে যান
  4. আপনি পুনরুদ্ধার করতে চান ফাইল থেকে .frm ফাইল ধারণ করে আপনার ডাটাবেসের আইবেডাটা 1 এবং ফোল্ডারটি আটকান ।
  5. মাইএসকিউএল উদাহরণটি শুরু করুন।

এই পুনরুদ্ধারের জন্য .MYI এবং .MYD ফাইলটি সনাক্ত করার দরকার নেই।


এই পদক্ষেপগুলি অনুসরণ করেছে (সমস্ত কিছু ব্যর্থ হওয়ার পরে) এবং innodb_force_recovery = 4স্তরটি ব্যবহার করেছে (নিশ্চিত নয় যে এই ক্ষেত্রে তার প্রয়োজন ছিল)। শুকরিয়া ধন্যবাদ!
জোশুয়া স্টিওয়ার্ডসন

6
এফওয়াইআই: ibdata1ইনোডিবি, মাইআইএসএএম নয়।
ডারোবার্ট

14

একটি বিষয় লক্ষণীয়:

.FRM ফাইলটির এতে আপনার টেবিলের কাঠামো রয়েছে এবং এটি আপনার মাইএসকিউএল সংস্করণে সুনির্দিষ্ট।

.MYD ফাইলটি সংস্করণের সাথে সুনির্দিষ্ট নয়, কমপক্ষে ছোটখাটো সংস্করণ নয়।

.MYI ফাইলটি সুনির্দিষ্ট, তবে REPAIR TABLEঅন্য উত্তরগুলির মতই ফেলে রেখে পুনরায় জেনারেট করা যায় ।

এই উত্তরের বিষয়টি আপনাকে জানাতে হবে যে যদি আপনার টেবিলগুলির স্কিমা ডাম্প থাকে তবে আপনি এটি ব্যবহার করতে পারেন টেবিলের কাঠামো তৈরি করতে, তারপরে সেইগুলি .MYD ফাইলগুলিকে আপনার ব্যাকআপগুলি দিয়ে প্রতিস্থাপন করুন, MYI ফাইলগুলি মুছুন এবং তাদের মেরামত করুন them সব। এইভাবে আপনি আপনার ব্যাকআপগুলি অন্য মাইএসকিউএল সংস্করণে পুনরুদ্ধার করতে পারেন, বা ব্যবহার না করে আপনার ডাটাবেসটিকে পুরোপুরি সরিয়ে নিতে পারেন mysqldump। বড় ডাটাবেসগুলি সরিয়ে নেওয়ার সময় আমি এই সুপারটি সহায়ক পেয়েছি।


14

সরল! একটি ডামি ডাটাবেস তৈরি করুন (বলুন আব্বাস)

এই সমস্ত .myd, .myi, .frm ফাইলগুলিকে mysql \ data \ abc এ অনুলিপি করুন যেখানে mysql \ ডেটা the এমন এক স্থান যেখানে সমস্ত ডাটাবেসের জন্য .myd, .myi, .frm সংরক্ষণ করা হয়।

তারপরে phpMyadmin এ যান, db abc এ যান এবং আপনি আপনার ডাটাবেস খুঁজে পান।


সবচেয়ে সংক্ষিপ্ত এবং সুনির্দিষ্ট উত্তর
সেরাক শিফরভ

ডেটা পুনরুদ্ধারের সর্বোত্তম উপায় ... আমি ডাব্লুএইচএমপি ইনস্টল করেছি, তারপরে একটি নতুন ডাটাবেস তৈরি করেছি, নতুন ডাটাবেস ডিরেক্টরিতে ফাইলগুলি অনুলিপি করবো: সি: AM ডাব্লুএমপি \ বিইন \ মাইএসকিএল \ মাইএসকিএলএক্সএক্স \ ডেটা d নতুন ডেটাবেস ওপেন phpmyadmin এবং আপনার নতুন ডাটাবেস, আপনি পাবেন ডেটা দেখুন
আলেকজান্দ্রি

7

আমার মনে হয় .আমি আপনি ভিতরে MySQL থেকে মেরামত করতে পারেন।

আপনি যদি মাইএসকিউএল থেকে এই ধরণের ত্রুটি বার্তাগুলি দেখেন: ডেটাবেসগুলি কোয়েরি (ক্যোয়ারী) কার্যকর করতে ব্যর্থ হয়েছে 1016: ফাইলটি খুলতে পারে না: 'সামিটবেল.এমওয়াইআই'। (errno: 145) ত্রুটি এমএসজি: 1034: টেবিলের জন্য ভুল কী ফাইল: 'সামিটবেবল'। এটি সম্ভবত মেরামত করার চেষ্টা করুন আপনার কাছে সম্ভবত ক্র্যাশ হওয়া বা দূষিত টেবিল রয়েছে।

আপনি এই জাতীয় কোনও mysql প্রম্পট থেকে টেবিলটি চেক এবং মেরামত করতে পারেন:

check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable;
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+

এবং এখন আপনার টেবিল ভাল করা উচিত:

check table sometable;
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+

6

ডিরেক্টরিটি অ্যাক্সেস করার প্রয়োজন ছাড়াই আমি একটি .sqlফাইল ফাইলগুলিতে রূপান্তর করার জন্য একটি সমাধান পেয়েছি (আপনি তারপরে .sqlফাইলটি একটি সার্ভারে আমদানি করতে এবং ডাটাবেসটি পুনরুদ্ধার করতে পারেন), সুতরাং এটি করার জন্য আপনাকে /varকোনও সার্ভার প্রশাসক হওয়ার দরকার নেই।

এটি আপনার কম্পিউটারে এক্সএএমপিপি বা এমএএমপি ইনস্টল করা দরকার।

  • আপনি এক্সএএমপিপি ইনস্টল করার পরে, ইনস্টল ডিরেক্টরি (সাধারণত C:\XAMPP) এবং উপ ডিরেক্টরিতে নেভিগেট করুন mysql\data। পুরো পথটি হওয়া উচিতC:\XAMPP\mysql\data
  • ভিতরে আপনি তৈরি করেছেন এমন অন্য কোনও ডাটাবেসের ফোল্ডার দেখতে পাবেন। কপি & ফোল্ডার পূর্ণ আটকান .myd, .myiএবং .frmসেখানে ফাইল। সেই ফোল্ডারটির পথ হওয়া উচিত

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • তারপরে localhost/phpmyadminএকটি ব্রাউজারে যান। সবেমাত্র mysql\dataফোল্ডারে আপনি যে ডাটাবেসটি পেস্ট করেছেন তা নির্বাচন করুন এবং নেভিগেশন বারের এক্সপোর্টে ক্লিক করুন। এটি .sqlফাইল হিসাবে রফতানি চয়ন করে । এটি তখন ফাইলটি সেভ করে জিজ্ঞাসা করে পপ আপ করবে

আর এটাই! আপনি এখন একজন আছে (উচিত) .sqlডাটাবেসের মূলত ছিল ফাইল .myd, .myiএবং .frmফাইল। তারপরে আপনি নতুন ডাটাবেস তৈরি করে এবং নেভিগেশন বারে 'আমদানি' টিপুন এবং তারপরে এটি আমদানির পদক্ষেপগুলি অনুসরণ করে phpMyAdmin এর মাধ্যমে অন্য সার্ভারে আমদানি করতে পারেন


5

আপনি মাইএসকিউএল এর ঠিক একই সংস্করণ হিসাবে এই ফাইলগুলিকে ডেটা ফোল্ডারের যথাযথভাবে নামের সাব ডাইরেক্টরি ডিরেক্টরিতে অনুলিপি করতে পারবেন এবং আপনি সেই ডিরেক্টরিতে সম্পর্কিত সমস্ত ফাইল ধরে রেখেছেন। যদি আপনার কাছে সমস্ত ফাইল না থাকে তবে আমি নিশ্চিত যে আপনার সমস্যা হবে।


আমার কাছে মাইএসকিউএল এর হুবহু একই সংস্করণ না থাকলে আমি কী করব?
জো স্প্রেগ


2

উপরের বর্ণনাটি আমার পক্ষে কাজ করার জন্য যথেষ্ট ছিল না (সম্ভবত ঘন বা অলস) তাই ভবিষ্যতে আমাকে সহায়তা করার উত্তরটি খুঁজে পেয়ে আমি এই স্ক্রিপ্টটি তৈরি করেছি। আশা করি এটি অন্যকে সহায়তা করবে

vim fixperms.sh 

#!/bin/sh
for D in `find . -type d`
do
        echo $D;
        chown -R mysql:mysql $D;
        chmod -R 660 $D;
        chown mysql:mysql $D;
        chmod 700 $D;
done
echo Dont forget to restart mysql: /etc/init.d/mysqld restart;

-2

উইন্ডোজ এক্সপি রয়েছে এবং মাইএসকিউএল সার্ভার 5.5 ইনস্টলড রয়েছে তাদের জন্য - ডাটাবেসের জন্য অবস্থান সি: \ নথি এবং সেটিংস \ সমস্ত ব্যবহারকারীদের অ্যাপ্লিকেশন ডেটা \ মাইএসকিউএল \ মাইএসকিউএল সার্ভার 5.5 \ ডেটা, যদি আপনি মাইএসকিএল ওয়ার্কবেঞ্চ ইনস্টলেশনটির মধ্যে অবস্থান পরিবর্তন না করেন unless গুই।


3
প্রশ্নটি নির্দিষ্ট ফাইল প্রকারগুলি থেকে পুনরুদ্ধার সম্পর্কিত, উইন্ডোজ এক্সপি মাইএসকিউএল 5.5-এ এই ফাইলগুলি কোথায় পাওয়া যাবে তা নয়।
ড্যান্পে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.