এমন কোনও InnoDB টেবিলটি কীভাবে পুনরুদ্ধার করবেন যার ফাইলগুলি প্রায় সরানো হয়েছিল


13

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

এই ডেটাডির একটি ফাইল সিস্টেম যা কেবলমাত্র মাইএসকিএল এর ডেটাডির হিসাবে ব্যবহৃত হয় তাই মুক্ত করার মতো আর কিছু ছিল না।

আমার কাছে একটি 4 গিগ ইনডোডব পরীক্ষার টেবিল ছিল যা প্রতিরূপের স্ট্রিমের অংশ ছিল না তাই আমি বুঝতে পেরেছিলাম যে এটি কাজ করবে কিনা তা দেখার জন্য আমি কিছু চেষ্টা করব এবং পরীক্ষার পরিবেশ হওয়ার কারণে বিষয়গুলি ভয়াবহভাবে ভুল হয়ে গেলে আমি খুব বেশি চিন্তিত হইনি।

আমি যে পদক্ষেপ নিয়েছি তা এখানে

  1. আমি যে টেবিলটি সরাতে যাচ্ছিলাম তা ফ্লাশ করে
  2. এটিতে একটি পঠিত লক স্থাপন করা হয়েছে (যদিও এটিতে কোনও কিছুই লেখা হয়নি এবং এটি প্রতিলিপি প্রবাহে ছিল না)
  3. .Frm এবং .ibd অনুলিপি করে একটি ফাইল সিস্টেমে ডাব্লু / কিছু খুচরা ঘরে
  4. টেবিলটি আনলক করা হয়েছে
  5. সেই টেবিলটি কেটে দেওয়া হয়েছে - এটি অপ্টিমাইজ করার জন্য পর্যাপ্ত জায়গা খালি করে পুনরায় প্রতিলিপি শুরু করা শুরু করে।
  6. স্লেভিং / শাটডাউন মাইএসকিএল বন্ধ করুন
  7. Tmp এর বাইরে ফাইলটি অনুলিপি করে ডেটা ডায়ারে ফিরে যান
  8. মাইএসকিএল পুনরায় চালু করুন

.Rr লগে কোনও কিছুই প্রদর্শিত হয় না, জিনিসগুলি দেখতে ভাল লাগে। আমি সংযোগ এবং mydb ব্যবহার; এবং শো টেবিলগুলিতে আমি যে টেবিলটির সাথে গোলযোগ করছি তা দেখুন see তবে, যদি আমি চেষ্টা করি

select * from testtable limit 10;

আমি ত্রুটি পেয়েছি

ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist

আমি এ পর্যন্ত যা বলতে পারি তা থেকে আমি অন্য সমস্ত টেবিলগুলি থেকে কেবল সূক্ষ্মভাবে পড়তে পারি এবং যেকোন অভিযোগের পুনরাবৃত্তি শুরু হয়েছিল।

এই জায়গাটি থেকে পুনরুদ্ধার করার জন্য আমি কি কিছু করতে পারি? প্রয়োজনে আমি এটিকে স্ক্র্যাচ থেকে পুনর্নির্মাণ করতে পারি তবে সাধারণভাবে এই উদ্যোগ সম্পর্কে অন্যরা কী চিন্তা করেছিল তা আগ্রহী ছিল। আমি যে পদক্ষেপ নিয়েছিলাম তার ধারাবাহিকতা সম্পর্কে কি কিছু ছিল যা ডাব্লু / আরও ত্রুটিহীন ফলাফলের সমাপ্ত হত?

যদি এটি কোনও পরীক্ষার সার্ভার না হয় আমি কেবল 'এটি লাইভ করতে পারি না' এবং কী ঘটেছিল তা দেখতে পেতাম না? আমি যদি এটি পছন্দ করতে পারি তবে প্রোডাকশন গোলামের উপর অস্থায়ীভাবে স্থান খালি করার সর্বোত্তম উপায় কী হবে?

উত্তর:


15

ট্রানসেট টেবিলটি সম্পর্কে সবচেয়ে বেশি ভুলে যাওয়া মানুষ হ'ল ট্রানসেট ট্যাবলেটটি ডিডিএল হয়, ডিএমএল নয় । InnoDB- এ, ইবদাটা 1-এর মেটাডেটাতে ইনোডিবি সারণির একটি তালিকাযুক্ত তালিকা রয়েছে। ট্র্যাঙ্কেট টেবিল ব্যবহারের ফলে ইনোডিবি টেবিলের অভ্যন্তরীণ মেটাডেটা আইডি স্থানান্তরিত হয়। এটি ঘটে কারণ ট্র্যাঙ্কেট টেবল কার্যকরভাবে নিম্নলিখিতটি করে:

উদাহরণ: mydb.mytb নামে একটি InnoDB টেবিল কেটে ফেলতে

USE mydb
CREATE TABLE newtb LIKE mytb;
ALTER TABLE mytb RENAME oldtb;
ALTER TABLE newtb RENAME mytb;
DROP TABLE oldtb;

নতুন মাইটিবিতে এইভাবে আলাদা অভ্যন্তরীণ মেটাডেটা আইডি থাকবে।

আপনি .ibd ফাইলটি অন্য কোনও জায়গায় অনুলিপি করার সময় .ibd এর মধ্যে মূল অভ্যন্তরীণ মেটাডেটা আইডি থাকে। কেবলমাত্র .bd ফাইলটি পিছনে রাখার ফলে ইবদাটা 1 এর সাথে অভ্যন্তরীণ মেটাডেটা আইডির একটি পুনর্মিলন ঘটায় না।

আপনার যা করা উচিত তা হ'ল:

InnoDB টেবিলের .ibd ফাইলটি অনুলিপি করুন। তারপরে, এটি চালান

ALTER TABLE tablename DISCARD TABLESPACE;

পরে এটিকে ফিরিয়ে আনতে .ibd ফাইলটি আবার ড্যাটাডিরিতে অনুলিপি করুন এবং তারপরে চালান

ALTER TABLE tablename IMPORT TABLESPACE;

এটি অভ্যন্তরীণ মেটাডেটা আইডি সংরক্ষণ করবে।

নিশ্চিত করুন .ফ্রিম সর্বদা উপস্থিত থাকে।

আমি একবারই একজন ক্লায়েন্টকে 30 ইনোডিবি টেবিলগুলি একই পদ্ধতিতে পুনরুদ্ধার করতে সহায়তা করেছিলাম। আমাকে অন্য ডিবি সার্ভার ব্যবহার করতে হয়েছিল এবং সঠিক অভ্যন্তরীণ মেটাডেটা আইডিটি সন্ধান করার জন্য InnoDB টেবিলগুলি যুক্ত এবং বাদ দিয়ে কিছু গেম খেলতে হয়েছিল।

ক্লায়েন্টটি এই নিবন্ধটি পেয়েছে: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file । আমরা এটি ব্যবহার করেছিলাম এবং এটি একটি দুর্দান্ত চুক্তিতে সহায়তা করেছিল। আমি এটি আপনাকে সাহায্য করে আশা করি।


1
আমার কাছে 2 টি ডাটাবেস রয়েছে যেখানে সমস্ত টেবিল বলে Table 'X' doesn't exist in engine। টেবিলের প্রত্যেকটির জন্য আমাকে কি উপরের পদ্ধতিটি করতে হবে বা এটির সমাধানের আরও ভাল উপায় আছে?
papanito

-2

আমি আমার ম্যাকের সাথে অভিজ্ঞতা পেয়েছি, কোনও বন্ধুকে বিক্রি করার আগে এক্সএএমপিপি ফোল্ডারটি কেবলমাত্র আমার হার্ড ড্রাইভে অনুলিপি করে থাকি। (সাফল্য নয়) দুর্ভাগ্যক্রমে, এটি আমার কাছে সমস্যা নিয়ে আসছিল, কারণ আমি নিম্নলিখিত পদক্ষেপগুলি চেষ্টা করেছিলাম: - আমি নতুন এক্সএএমপিপি ইনস্টল করেছি এবং আমার নতুন ম্যাকের পুরো \ httdocs এবং var\ mysql টি অনুলিপি করছি, যারা কেবল ডিগ্রি .frm এবং .ibd সহ, কাজ করছে না, আমি এখনও পিএইচপিএমইএডমিনের ভিতরে থাকা টেবিলগুলিতে অ্যাক্সেস করতে পারছি না ... - আমি একই এক্সএএমপিপি সংস্করণ ইনস্টল করার চেষ্টা করেছি এবং উপরের পদক্ষেপগুলি পুনরুদ্ধার করার চেষ্টা করেছি, এখনও কাজ করছি না। - বিছানায় যাওয়ার সিদ্ধান্ত নিয়েছে।

(সাফল্য) - আজ সকালে আমি আমার ব্যাকআপ ডিস্কটি নিয়ে এসেছি এবং উইন্ডোজ 7. এর সাথে চেষ্টা করে দেখি - - উইন্ডোজের জন্য সর্বশেষতম এক্সএএমপিপি ইনস্টল করুন, সি: am এক্সএএমপি - আমার আমার ব্যাকআপ থেকে একটি ওয়েবসাইট (ফোল্ডার) আছে \ https এবং ভিতরে ডাটাবেস ফোল্ডারটি \ var \ mysql আমার উইন্ডোজ 7 এ প্রস্তুত, আমি কেবল একটি ওয়েবসাইট দিয়ে চেষ্টা করতে চাই তারপরে বাকীটি চেষ্টা করতে চাই কারণ আমার httdocs \ এবং \ var \ mysql এর ভিতরে অনেকগুলি প্রকল্প রয়েছে - আমি উল্লেখ করছি httdocs \ ফোল্ডারে উইন্ডোজ সি: \ xampp \ httdocs এবং \ var \ mysql কে সি: \ xampp \ mysql \ ডেটা অনুলিপি করুন

সর্বশেষ নয় আমি আমার ব্যাকআপ ফাইল থেকে আইবি_লগফাইল 0, ইব_লগফিল 1, আইবডটা 1 অনুলিপি করে সিএম: \ xampp \ mysql \ ডেটা

আমি http: // লোকালহোস্ট / মাইওবসাইটকে রিফ্রেশ করি

বাহ বাহ সম্পন্ন ... এটি কাজ করছে ...

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