.Ibd, .frm এবং mysqllogbin ফাইল থেকে মাইএসকিউএল টেবিলগুলি পুনরুদ্ধার করা হচ্ছে


10

কোনও কারণে, আমি যখন আমার টেবিলগুলি সঞ্চিত আছে .frmএবং .ibdফাইলগুলি (মাইএসকিউএল বা phpmyadmin এ থাকুক না কেন) খোলার চেষ্টা করি তখন এটি আমাকে একটি সিনট্যাক্স ত্রুটি দেয়, বা এটি বলে যে এটি বিদ্যমান নেই।

আমি অন্য পোস্টটি পড়েছি যা এর সাথে একই রকম সমস্যা ছিল তবে আমি innodb_file_per_tableসক্ষম কিনা তা যাচাই করতে জানি না এবং আমি সামগ্রিকভাবে সত্যিই বিভ্রান্ত হয়ে পড়েছি। আমি আমার mysql-bin.000002ফাইলের একটি অনুলিপিও একটি টেক্সট ফাইলে রূপান্তর করেছিলাম যাতে আমি দেখতে পাই যে আমার ডাটাবেস থেকে ডেটা সম্পূর্ণরূপে হারিয়ে যায় নি।

ডাটাবেসটি গত বছর তৈরি হয়েছিল। এই mysql-bin.00000ফাইলগুলির মধ্যে আমার কাছে have টি রয়েছে তবে কোনও কারণে .000002এটি বৃহত্তম। এই মুহুর্তে, আমার সমস্ত ডাটাবেসের জন্য আমার কাছে ফাইল .ibdএবং .frmফাইল রয়েছে তবে আমি কীভাবে এটি মাইএসকিউএলে পুনরায় ফিরিয়ে আনতে পারি বা কমপক্ষে আমি পড়তে পারি এমন ক্ষতি করতে চলেছি।

আমি উইন্ডোজ 2003 সার্ভারে ওয়্যাম্প সার্ভার 2.4 এবং মাইএসকিউএল 5.6.12 ব্যবহার করছি। এছাড়াও, আমি কি ইনোডিবিতে একটি প্লাগইন ডাউনলোড করব?


না, এটি গত বছর তৈরি হয়েছিল। আমার কাছে mys টি মাইএসকিএল-বিন.00000 ফাইল রয়েছে তবে কিছু কারণে .000002 সবচেয়ে বড়। এই মুহুর্তে আমার কাছে আমার সমস্ত ডাটাবেসের জন্য .ibd এবং .frm ফাইল রয়েছে তবে আমি কীভাবে এটি মাইএসকিউএলে পুনরায় ফিরিয়ে আনতে পারি বা কমপক্ষে আমি পড়তে পারি সে সম্পর্কে আমি হারিয়ে যেতে পারি।
23:25

উত্তর:


20

আমি অবশেষে আবিষ্কার করেছি এবং অনেক সমস্যা এবং ত্রুটির মধ্য দিয়ে আমার সমস্যার সমাধান করেছি। যাদের কাছে তাদের আসল আইবডটা 1 ফাইল নেই এবং কেবল তাদের .frm এবং .ibd ফাইল রয়েছে, আমি কীভাবে আমার ডেটা পুনরুদ্ধার করেছি তা এখানে।

  1. মাইএসকিউএল ইউটিলিটিগুলি -> http://dev.mysql.com/downloads/utilities এ ডাউনলোড এবং ইনস্টল করুন ।
  2. মাইএসকিউএল ইউটিলিটি, মাইএসকিএলএফএম খুলতে আপনার কমান্ড / টার্মিনালে যান এবং আপনার সারণীর কাঠামোটি পুনরুদ্ধার করার জন্য এটি ব্যবহার করুন। আমি কীভাবে এটি করেছি, আমি কি মাইএসকিএলএফএম ফাইলের সিডিতে প্রবেশ করেছি, তারপরে "mysqlfrm --server = ব্যবহারকারীর: pwd @ লোকালহস্ট --পোর্ট = 3307" পথ_টো_.ফ্রিম_ফাইল "> টেবিল_নাম.টেক্সট" প্রবেশ করলাম। .Txt ফাইলটি সেই একই ফোল্ডারে সংরক্ষণ করা উচিত যেখানে আপনার ইউটিলিটিগুলি সেভ করা উচিত যদি আপনি এটি কোথায় যেতে চান তা নির্দিষ্ট না করে।
  3. পাঠ্য ফাইলে, আপনি তৈরি টেবিলের বিবৃতি দেখতে পাবেন, এতে আপনার সারণীর সমস্ত কলাম এবং তথ্য (মূলত, মূল কাঠামো) অন্তর্ভুক্ত রয়েছে। সেই সমস্ত বিবরণ দিয়ে সেই তৈরি বিবৃতিটি অনুলিপি করুন।
  4. আপনার মাইএসকিউএল কমান্ডে একটি নতুন ডাটাবেস তৈরি করুন (ডেটাবেস ডাটাবেস তৈরি করুন)। এটি আপনার আসল ডাটাবেসের নাম হিসাবে একই নাম করুন।
  5. নতুন ডাটাবেসের ভিতরে একটি নতুন টেবিল তৈরি করুন - এটি ফোল্ডারের মতো একই নাম থাকতে হবে না। আপনি কমান্ড প্রম্পটের ভিতরে নতুন টেবিলটি তৈরি করতে পারেন, তবে আমি আমার টেবিলটি পিএইচপিএমইএডমিনে তৈরি করেছি, এটি একটি ফ্রি সফটওয়্যার সরঞ্জাম যা ওয়েবে মাইএসকিউএল পরিচালনার হাত পরিচালনা করে। আমি কেবল পিএইচপিএমইএডমিনে, তারপর এসকিউএল টেবিলের ডাটাবেসে ক্লিক করেছি এবং # 3 থেকে টেবিলের কাঠামো আটকিয়েছি। (পার্শ্ব নোট হিসাবে, আমি সর্বদা ত্রুটি পেয়েছি যদি আমি আমার কমান্ড প্রম্পটে আমার টেবিলগুলিকে "টেবিল" নামকরণ করি, তবে সেই নামটি এড়াতে চেষ্টা করুন)।
  6. আপনার মাইএসকিউএল কমান্ডে, আপনার ডাটাবেসে প্রবেশ করুন এবং "ALTER TABLE table_name DISCARD TABLESPACE" লিখুন, যা মূলত এই টেবিলের .ibd ফাইলটি সরিয়ে ফেলবে।
  7. আপনার সারণিটি (আপনি যে টেবিলটি পুনঃস্থাপন করতে চান) এর অনাবৃত ফাইলটি সদ্য সরিয়ে নেওয়া .ibd ফাইলটি প্রতিস্থাপন করতে সদ্য নির্মিত টেবিলটিতে অনুলিপি করুন। আপনার প্রাথমিক .ibd ফাইলটি সদ্য নির্মিত টেবিলের নামে পরিবর্তন করুন। এটি সবেমাত্র মুছে ফেলা পুরানো .ibd ফাইলটিকে নকল করবে। আপনি আপনার কম্পিউটারে সদ্য নির্মিত ডাটাবেস ফোল্ডারের অধীনে মাইএসকিউএল ডেটা ফোল্ডারে এই ফোল্ডারটি খুঁজে পেতে পারেন।
  8. আপনার মাইএসকিউএল কমান্ডে ফিরে যান, আপনার ডাটাবেসে প্রবেশ করুন এবং "ALTER TABLE TELE_Name Import TABLESPACE" লিখুন। আপনি একটি "সতর্কতা" (1) ত্রুটি-ধরণের বিবৃতি পাবেন তবে কেবল এটি উপেক্ষা করুন।
  9. আর হয়ে গেল! যদি আপনি আপনার নতুন টেবিলটি অ্যাক্সেস করার চেষ্টা করেন তবে এতে আপনার পুরানো টেবিলের সমস্ত ডেটা থাকা উচিত।

আমি আশা করি এটি সাহায্য করেছে এবং আপনার যদি কোন প্রশ্ন বা মন্তব্য থাকে তবে আমাকে জানান! এছাড়াও, অন্যান্য বিবরণের জন্য http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file দেখুন।


দুর্দান্ত নির্দেশাবলী, তবে এটি কেবল মাইএসকিউএল 5.6 এর সাথে কাজ করে ! 5.5 এ Got error -1 from storage engineআপনি চালানোর সময় ত্রুটি পাবেন IMPORT TABLESPACE। তবে আমার জন্য মাইএসকিউএল 5.6 মাইএসকিউএল 5.5 ব্যবহার করে তৈরি করা সারণীর জন্য কাজ করেছে, তাই এটি সমস্ত ভাল;)। যদি আপনি 5.5 এর সাথে আটকে থাকেন তবে আপনাকে যে ক্রিসকল্যান্ডার লিঙ্কটি দিয়েছেন তা নির্দেশাবলী অনুসরণ করতে হবে ।
ostrokach

@ কারমেন্ট আমি আপনার নির্দেশাবলী অনুসরণ করেছি তবে আমার ERRPR এর মুখোমুখি হচ্ছে: স্থান 13635, স্পেসের নাম <dbname> / <tblname> এ পৃষ্ঠা নম্বর 1767006713 অ্যাক্সেস করার চেষ্টা করছে, যা টেবিলস্পেসের সীমার বাইরে is আমি কি করতে পারি তা আপনি আমাকে গাইড করতে পারেন?
মোহিত মেহতা

এটি সবেমাত্র আমার একটি টেবিল পুনরুদ্ধার করে একগুচ্ছ সময় সাশ্রয় করেছে। পদ্ধতিটি এখনও মাইএসকিউএল 5.7.17 এ 2016 সালে কাজ করে
অ্যান্ডি মেরার

@ostrokach দেখে মনে হচ্ছে এটি innodb_file_per_tableসক্ষম হয়েছে।
ইভান

আপনি কেবল .. খুব দীর্ঘ যাত্রার পরে আমাকে বাঁচিয়েছেন, ধন্যবাদ!
আমর সাবজিরো

4

মূল ইনোএনডিবি ডেটা ফাইল - সাধারণত নামকরণ করা ibdata- আপনার মাইএসকিউএল আপনার .ibd ফাইলগুলি বুঝতে সক্ষম হওয়ার জন্য প্রয়োজনীয়।

আপনার যদি বাইনারি ফাইলগুলি ব্যবহার করে সার্ভারগুলির মধ্যে ডেটা সরিয়ে নিতে হয় তবে আপনার মাইএসকিউএল পরিষ্কারভাবে বন্ধ করা উচিত এবং তারপরে আইবডাটা ফাইল (গুলি) সহ সমস্ত ডেটা ফাইল ডিরেক্টরিগুলির মধ্যে সরিয়ে নেওয়া উচিত।

উইন্ডোজে সার্ভারের মধ্যে ডেটা সরিয়ে নেওয়ার আরও নির্ভরযোগ্য প্রক্রিয়াটি mysqldumpহ'ল () বা পিএইচপিএমইএডমিন (বা অনুরূপ কোনও সরঞ্জাম) থেকে একটি ডাটাবেস এক্সপোর্ট করা।

যদি বাইনারি লগিং পুরো সময় সক্ষম হয়ে থাকে যে আপনার সার্ভারটি চলছে (মন্তব্যের উপর ভিত্তি করে, এটি নাও হতে পারে), আপনি mysqlbinlogমাইএসকিএল-বিন ফাইলগুলি থেকে সার্ভারে চালিত প্রতিটি এসকিউএল বিবৃতি পুনরুদ্ধার করতেও ব্যবহার করতে পারেন , এবং সেইভাবে ডাটাবেসটি পুনরায় তৈরি করুন। মাইএসকিএল-বিন ফাইলগুলিতে ইউনিক্স টাইমস্ট্যাম্প থাকতে হবে যা আপনাকে নির্ধারণ করতে সহায়তা করবে যে তারা কতটা পিছিয়ে গেছে।

যদি আপনি আপনার আসল ডাটাবেস ফাইলগুলি হারিয়ে ফেলেছেন এবং সমস্ত কিছু পৃথক .ibd ফাইলগুলি থেকে থাকে, তবে আপনাকে মন্তব্যে আকুজিনস্কির পরামর্শ অনুসারে ডেটা পুনরুদ্ধার করতে হবে।

মাইএসকিউএল 5.6 এর ইনোডিবি .আইবিডি ডেটা ফাইলগুলি ( ট্রান্সপোর্টেবল টেবিল স্পেস ) স্থানান্তরিত করার জন্য কিছু নতুন বৈশিষ্ট্য রয়েছে , তবে এগুলির জন্য কিছু প্রচেষ্টা প্রয়োজন এবং যথেষ্ট ছোট ডাটাবেসের জন্য এটি ব্যবহার করে ডেটা স্থানান্তর করা আরও সহজ হতে চলেছে mysqldump


0

আকিউমিনস্কির প্রশ্নের মন্তব্য থেকে উইকি উত্তর উত্পন্ন হয়েছে generated


আপনি যদি *.ibdফাইলগুলি দেখতে পান তবে তা innodb_file_per_tableহয় ON, নাহলে সমস্ত টেবিলই ibdata1

যদি এটি বলে যে কোনও সারণিটি বিদ্যমান নেই তবে টেবিলটি InnoDB অভিধানে অনুপস্থিত। সমস্ত টেবিলকে পৃথক এসকিএল ডাম্পগুলিতে ফেলে দেওয়ার চেষ্টা করুন (একটি টেবিল - একটি ফাইল)। আপনি যে টেবিলগুলি ডাম্প করতে পারবেন না সেগুলি আপনি টুইনডিবি পুনরুদ্ধার সরঞ্জামকিট দিয়ে পুনরুদ্ধার করতে পারেন ।

এখনও কোনও বাইনারি প্যাকেজ নেই। আপনাকে গিটহাব থেকে উত্স কোডটি পেতে এবং এটি সংকলন করতে হবে। ইনোডিবি অভিধানটি পুনরুদ্ধার করতে নির্দেশাবলী দেখুন । এটি বেশ সোজা:

git clone git@github.com:twindb/undrop-for-innodb.git

এবং তারপর

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