بازیابی جداول MySQL زمانی که فقط .frm و فایل های .ibd در دسترس هستند

چگونه برای حل “خطا خروجی زیر #1146 - جدول وجود ندارد” ناشی از انتقال فایل ها .idb (سازی InnoDB) به طور مستقیم بین دایرکتوری ها (جدول).

logo_mysql

مشکل

بسیاری از مشکلات ما مشکلات ما ایجاد کرده اند. من فقط آماده سازی یک وب سایت با استفاده از وردپرس و فکر کرده بود: چنین ببینید که چگونه آن را در پی اچ پی کار می کند 7? خوب, عنوان از WampServer استفاده من پی اچ پی 5.6, بنابراین من به حال “خوشحال” ایده برای ارتقاء از WampServer 2.5 (آپاچی 2.4.9, خروجی زیر را 5.6.17, Php5.5.12) برای از WampServer 3.0.6 (Apache2.4.23, Mysql5.7.14, Php5.6.25 و پی اچ پی 7.0.10).

واضح, من آغاز شده توسط پشتیبان گیری, اما اشتباه بزرگ من را انتخاب نمی شد به صادرات SQL مانند سایت, به جای آن, فقط یک کپی از فایل های خروجی زیر (مای / داده) و نرم افزار (WWW / سایت). من اعتماد به نفس به این کار بود, به عنوان قبل.

پس از نصب از WampServer جدید با PHP 7, من قرار دادن فایل های پشتیبان گیری MySQL و برنامه وجود دارد تماس, تنها زمانی که من تست مرورگر, سایت ظاهر شد, اما صفحه نمایش نصب و راه اندازی وردپرس به عنوان یک وب سایت جدید بود. ژله! در PHPMyAdmin گسترش برای دیدن اگر پایگاه داده خوب بود و دیدم که, با وجود اینکه پایگاه داده ذکر شده, زمانی که من در جدول برای مشاهده داده کلیک ظاهر پیغام خطای زیر:

  خروجی زیر خطا #1146 - جدول <table_name از> وجود ندارد

من شده اند و من کشف کرد که شما فقط می توانید کپی یا انتقال فایل های خروجی زیر به طور مستقیم به یکی دیگر از شاخه های MySQL اگر فایل ها نوع MyISAM از, کسانی که با پسوند .frm .MYD .MYI. من واقعا نمی دانم چه اتفاقی افتاده, اما من به عنوان پایگاه داده InnoDB را ظاهر (.FRM E .idb). متاسفانه, تنها پس از این رویداد دیدم اسناد و مدارک خروجی زیر قبل هشدار داده:

  شما نمی توانید آزادانه حرکت می کند .فایل های IBD بین دایرکتوری پایگاه داده مانند شما می توانید با فایل های جدول MyISAM. 
  تعریف جدول ذخیره شده در جدول InnoDB را به اشتراک گذاشته شامل نام پایگاه داده. 
  شناسه معامله و ورود به سیستم اعداد ذخیره شده در فایل جدول نیز بین پایگاه های داده متفاوت.

راه حل

من برای دیدن برخی از راه حل های ساده, اما من در اینجا شرح داده خواهد شد که واقعا برای من کار, هر چند به نظر می رسد پیچیده تر, ارسال یافت نشد “جدول بازگرداندن(بازدید کنندگان) در پایگاه داده MySQL که FRM یا IBD فایل تنها در دسترس“.

قبل, اما, راه دانش, ارزش به خاطر سپردن است که در مقایسه با سازی InnoDB, خروجی زیر را نگه می دارد ساختار آن را در فایل های .frm و داده ها در .ibd. نظریه به اندازه کافی, اجازه می دهد تا پایین به!

گام 1: از نو خلق ساختار .frm

همان طور که گفتم, .frm شامل ساختار جدول خود را. در ابتدا ما نیاز به بازیابی آن ساختار و پس از داده محبوب. شما می توانید آن را انجام دهید 3 روش های مختلف در زیر توضیح داده, بیشتر قبل, اجازه دهید به شما چیزی در مورد به “خروجی زیر آب و برق”.

خروجی زیر آب و برق | mysqlfrm

اگر شما قصد استفاده از روش ارائه 1 (آنلاین) سپس شما نیاز به استفاده از ابزار “mysqlfrm” ارائه شده توسط “خروجی زیر آب و برق“.

این ابزار ساختار داده ها استخراج و تولید SQL ایجاد جدول اسکریپت. برای این, دانلود “خروجی زیر آب و برق” (چیزی شبیه به خروجی زیر آب و برق-1.6.4-winx64.msi) و نصب-O.

باز کردن کنسول (فرمان / از) و استفاده از دستور CD به حرکت دایرکتوری پیش فرض نصب (چیزی شبیه به C:\برنامه فایلها خروجی زیر افزار خروجی زیر 1.6\). توجه داشته باشید که در آن دایرکتوری اجرایی است mysqlfrm.exe.

  سی دی "C:\فایل های برنامه  خروجی زیر  خروجی زیر 1.6 نرم افزار"

را انتخاب کنید تنها یکی از روش های زیر برای استخراج ساختار یک جدول موجود در .frm:

1روش درجه | آنلاین

1. مشاهده وب سایت HTTPS://recovery.twindb.com/;
2. دار و دسته منو “بازیابی ساختار” و سپس در “از فایل .frm“;
3. کلیک بر روی دکمه “مرورگر…” و انتخاب فایل .frm خود را; E
4. کلیک بر روی دکمه “بارگذاری” و اسکریپت ایجاد جدول بر روی صفحه نمایش ظاهر می شود.

شما می توانید فایل .frm متعدد در یک بار ایجاد یک اسکریپت تنها با تمام جداول ارسال. فقط به شما یک وبلاگ با تمام .frm خود را قبل از ایجاد “مرورگر / آپلود”.

2روش درجه | با استفاده از –تشخیص

/* به عنوان مثال عمومی */
   mysqlfrm -diagnostic "<منبع / مسیر>/mytable.frm" > "<مقصد / راه / recovered_mytable.sql>"
 
/* به عنوان مثال در عمل با جدول وردپرس wp_posts.frm */
   mysqlfrm --تشخیص "C:\WAMP  بن  خروجی زیر  mysql5.6.17  داده ها  meubanco  wp_posts.frm" > "C:\Recovered_wp_posts.sql"

3روش درجه | با استفاده از –سرور

/* به عنوان مثال عمومی */
  mysqlfrm -server=ریشه:رمز عبور من@localhost را پورت=3311 "<منبع / مسیر>/mytable.frm" > "<مقصد / مسیر>/recovered_mytable.sql"
 
/* به عنوان مثال در عمل با جدول وردپرس wp_posts.frm */
  mysqlfrm --سرور=ریشه@localhost را --بندر=3307 ""C:\WAMP  بن خروجی زیر\mysqld.6.17\داده ها  meubanco  wp_posts.FRM" > "C:\recovered_wp_posts.SQL"

پورت خروجی زیر استفاده کنید! انتخاب هر دیگر در دسترس. توجه کنید که فرمان تغییر مسیر خروجی را به یک فایل .sql است که در مسیر مشخص ذخیره (هیچ موردی, C:).

گام 2: از نو خلق کردن جدول در پایگاه داده خود را

در یک پایگاه داده جدید, ایجاد یک جدول با اسکریپت تولید شده در مرحله 1. من شخصا نصب یک نسخه تمیز از از WampServer استفاده می شود و در PHPMyAdmin (HTTP://localhost را / از phpMyAdmin /) برای ایجاد پایگاه داده و واردات اسکریپت SQL در مرحله ایجاد 1 (recovered_wp_posts.sql). این اسکریپت ایجاد خواهد شد 2 فایل های موجود در دایرکتوری از پایگاه داده MySQL خود:

  SUA_TABELA.FRM
  SUA_TABELA.بانک توسعه اسلامی

در مورد من, این فایل ها در ایجاد شد C:\wamp64 بن خروجی زیر mysql5.7.14 داده ها <MYDATABASE.GDB>. به عبارت دیگر, جستجو نصب و راه اندازی MySQL خود را و توجه داشته باشید که دایرکتوری داده ها یک پایگاه داده وجود دارد و دو فایل به نام.

گام 3: حذف فایل .idb جدید

برای حذف فایل .idb جدید, اجرای دستور SQL زیر:

/* به عنوان مثال عمومی */
  ALTER TABLE TABLESPACE صرفنظر mytable;
 
/* به عنوان مثال در عمل با جدول وردپرس wp_posts */
  ALTER TABLE wp_posts TABLESPACE صرفنظر;

این Comando در حذف انتر لینک o یک tabela E O جدول (جایی که آنها به طور فیزیکی ذخیره می شود فایل های پایگاه داده), و حذف فایل .idb.

گام 4: کپی فایل های قدیمی .idb

.idb فایل اصلی (که شامل داده) باید به جای .idb کپی در مرحله حذف شد 3. استفاده از کلیدهای Ctrl + C و Ctrl + V و یا حتی کشتن خط فرمان.

گام 5: دوباره جدول

لینک خراب در مرحله 3 شما نیاز به با دستور زیر را ترمیم می شود:

/* به عنوان مثال عمومی */
  ALTER TABLE TABLESPACE واردات mytable;
 
/* به عنوان مثال در عمل با جدول وردپرس wp_posts */
  تغییر جدول wp_posts TABLESPACE واردات;

نگران نباشید اگر شما برخی از هشدار می, اما, ممکن است به شکست نمایش خطای زیر:

  #1808 - عدم تطابق طرحواره (جدول دارای فرمت ردیف ROW_TYPE_DYNAMIC, .فایل IBD است فرمت ردیف ROW_TYPE_COMPACT.)

در این مورد, این اتفاق افتاد با توجه به راه های مختلف است که mysql5.7.14 (جدید) ایجاد جدول به طور پیش فرض در رابطه با خروجی زیر-06/05/17 (عتیقه), SEM O ROW_FORMAT = جمع و جور.

سپس, اگر شما با استفاده از MySQL> = این mysql5.7.14, همه شما باید انجام دهید این است اضافه کردن ROW_FORMAT = جمع و جور در جدول تعریف ایجاد.

  CREATE TABLE `wp_posts` (. . .) موتور=InnoDB را ROW_FORMAT=جمع و جور

خطاهای دیگر

فقط برای ثبت, قبل از موفقیت در استخراج داده ها .frm, من تا به حال برخی از اشتباهات:

  # منبع روی localhost: ... متصل.
  # شروع سرور باعث روی پورت 3304 ... خطا در متوقف شکست خورده سرور باعث.  ID پردازش = 6648.
  ERROR: عملیات سرور تخم ریزی شکست خورده. خطای سرور کلون: قادر به برقراری ارتباط با جدید نمونه. ID پردازش = 6648.. برای تشخیص, اجرای ابزار دوباره و استفاده کنید the --گزینه اطناب به مشاهده پیام ها را از سرور باعث و اصلاح هر گونه خطا ارائه شده و سپس دوباره اجرای ابزار.
  موفقیت: این فرآیند با PID 6648 (فرآیند فرزند PID 7264) بسته شده است.
ردیابی (ترین تماس های اخیر آخرین):
  پرونده "G:\ADE  ساخت  sb_0-19921351-1470074463.97  پایتون 2.7.6-ویندوز-x86-64bit   معاونت سایت بسته  cx_Freeze  initscripts  Console.py", خط 27, که در <واحد>
  پرونده "scripts\mysqlfrm.py", خط 422, که در <واحد>
  پرونده ".\mysql\utilities\command\Read_frm.py", خط 439, در read_frm_files
  پرونده ".\mysql\utilities\command\Read_frm.py", خط 166, در _spawn_server
  پرونده ".\mysql\utilities\command\serverclone.py", خط 180, در clone_server
  پرونده ".\mysql\utilities\common\تیools.py", خط 273, در get_mysqld_version
IOError: [Errno 13] مجوز رد: "version_check،

در مورد خاص از وردپرس, شما نیاز به حذف اسکریپت که SQL به دست آمده در .frm تولید, تمام پست های عنوان "پیش فرض ‘0000-00-00 00:00:00', وگرنه, خطا گرفتن:

  #1067 - مقدار پیش فرض (به طور پیش فرض) نامعتبر برای COMMENT_DATE،

که!

منابع

http://www.voxteneo.com/restoring-tables-mysql-database-frm-ibd-files-available/

https://medium.com/@alexquick/transporting-mysql-tablespaces-from-5-6-to-5-7-517c01345fbb#.72zermd8b

http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html

https://lanmenezesbr.wordpress.com/2014/10/21/mysql-erro-1146-table-doesnt-exist/

http://stackoverflow.com/questions/7759170/mysql-table-doesnt-exist-but-it-does-or-it-should

تعداد دسترسی ها: 21400

12 بررسی “بازیابی جداول MySQL زمانی که فقط .frm و فایل های .ibd در دسترس هستند

  1. رودریگو گفت:

    چه باید بکنید وقتی پیغام خطای زیر را مشاهده می کنید: #1815 – خطای داخلی. می توانید LSNs در جدول تنظیم مجدد نیست “MYDATABASE.GDB”.”minhatabela”: فساد ساختار داده.
    آیا ممکن است به انجام دستی داده درج? چگونه آن را انجام?
    من از شما سپاسگزارم.

  2. به Cristian U گفت:

    سلام تیلور,

    چگونه این خطا حل بود:
    ERROR: عملیات سرور تخم ریزی شکست خورده. خطای سرور کلون: قادر به برقراری ارتباط با نمونه جدید. ID پردازش = 6648.. برای تشخیص, اجرای ابزار دوباره و با استفاده از –گزینه اطناب به مشاهده پیام ها را از سرور باعث و اصلاح هر گونه خطا ارائه شده و سپس دوباره اجرای ابزار.
    موفقیت: این فرآیند با PID 6648 (فرآیند فرزند PID 7264) بسته شده است.

    من در حفظ و دریافت پیام همان و من do not دانم چگونه آن را حل.

    با تشکر

  3. فریتاس د Luiz Reginaldo گفت:

    تبریک تیلور, اما آموزشی غیر ممکن است!! شما همان پسر!

    آغوش و برای به اشتراک گذاشتن تجربه خود را!

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخشهای موردنیاز علامتگذاری شدهاند با *