აღდგენა MySQL მაგიდები, როდესაც მხოლოდ .frm და .ibd ფაილი ხელმისაწვდომია

როგორ უნდა გადაწყდეს “MySQL Error #1146 - ცხრილი არ არსებობს” გამოწვეული მოძრავი ფაილი .idb (InnoDB) უშუალოდ საიტები (Tablespace).

logo_mysql

პრობლემა

ბევრი პრობლემა გვაქვს, არის პრობლემები, ჩვენ შევქმნით. მე მხოლოდ მოამზადოს ნახვა გამოყენებით WordPress და აზრის: ასეთი ვხედავთ, თუ როგორ მუშაობს PHP 7? კარგი, როგორც ჩემი WampServer გამოიყენება PHP 5.6, ასე რომ მომიწია “ბედნიერი” იდეა განახლება WampServer 2.5 (Apache-2.4.9, Mysql-5.6.17, Php5.5.12) for WampServer 3.0.6 (Apache2.4.23, Mysql5.7.14, Php5.6.25 და PHP 7.0.10).

ნათელი, დავიწყე სარეზერვო, მაგრამ ჩემი დიდი შეცდომა იყო აირჩიოს არა ექსპორტის SQL ასეთი საიტის, ამის ნაცვლად,, მხოლოდ გააკეთა ასლი MySQL ფაილი (mysql / მონაცემები) და გამოყენების (www / საიტის). მე დარწმუნებული ვარ, რომ ეს მუშაობა, როგორც ადრე.

დაინსტალირების შემდეგ ახალი WampServer ერთად PHP 7, მე დააყენა MySQL სარეზერვო ფაილი და პროგრამა არსებობს უკან, მხოლოდ მაშინ, როდესაც მე შესამოწმებლად ბრაუზერის, არ გამოჩნდა საიტის, მაგრამ WordPress სამონტაჟო ეკრანზე, თითქოს ეს იყო ახალი ნახვა. რძე! Open PHPMyAdmin თუ მონაცემთა ბაზა იყო Ok და დაინახა, რომ, მიუხედავად იმისა, რომ ჩამოთვლილი მონაცემთა ბაზაში, როცა მე დააწკაპებთ მაგიდაზე მონაცემების სანახავად გამოჩნდა შემდეგი შეცდომა:

  MySQL შეცდომა #1146 - მაგიდის <table_name> არ არსებობს

მე ძებნას უკვე და აღმოვაჩინე, რომ თქვენ შეგიძლიათ მხოლოდ კოპირება ან გადაადგილება MySQL ფაილი პირდაპირ სხვა MySQL დირექტორია თუ ფაილი ტიპის MyISAM, იმ გაფართოება .frm .MYD .MYI. მე ნამდვილად არ ვიცი, რა მოხდა, მაგრამ ჩემი ბაზაში გამოჩნდა, როგორც InnoDB (.frm e .idb). სამწუხაროდ,, მხოლოდ მას შემდეგ, ღონისძიების დაინახა MySQL დოკუმენტაცია უკვე გააფრთხილა:

  თქვენ არ შეგიძლიათ თავისუფლად გადაადგილება .IBD ფაილი შორის მონაცემთა ბაზის საიტები როგორც თქვენ შეგიძლიათ MyISAM მაგიდა ფაილი. 
  მაგიდა განმარტება ინახება InnoDB საერთო Tablespace მოიცავს მონაცემთა ბაზის სახელი. 
  გარიგების პირადობის მოწმობა და შესვლა თანმიმდევრობა ნომრები ინახება Tablespace ფაილი ასევე განსხვავდება მონაცემთა ბაზები.

გადაწყვეტა

მე მივიღე, რომ ზოგიერთი მარტივი გადაწყვეტილებები, მაგრამ მე აღწერს აქ ერთი, რომ ნამდვილად მუშაობდა ჩემთვის, მიუხედავად იმისა, რომ, როგორც ჩანს, უფრო რთული, პოსტი არ არის ნაპოვნი “აღდგენა მაგიდა(s) MySQL მონაცემთა ბაზაში, როდესაც frm და IBD ფაილი ხელმისაწვდომია მხოლოდ“.

ადრე, თუმცა, გზით ცოდნის, ღირს დამახსოვრების, რომ შედარებით InnoDB, MySQL ინარჩუნებს სტრუქტურა .frm ფაილი და მონაცემების .ibd. საკმარისი თეორია, საშუალებას მიიღოთ ქვემოთ!

ნაბიჯი 1: ხელახლა სტრუქტურა .frm

როგორც ვთქვი, .frm შეიცავს სტრუქტურა თქვენი მაგიდა. პირველი, ჩვენ უნდა ფეხზე, რომ სტრუქტურა და შემდეგ პოპულარული მონაცემთა. თქვენ შეგიძლიათ ამის გაკეთება 3 სხვადასხვა მეთოდები აღწერილია ქვემოთ, უფრო ადრე, მინდა გითხრათ, რაღაც შესახებ “MySQL საშუალებები”.

MySQL საშუალებები | mysqlfrm

თუ თქვენ არ აპირებთ გამოიყენოთ შემოთავაზებული მეთოდი 1 (Online) მაშინ თქვენ უნდა გამოვიყენოთ ინსტრუმენტი “mysqlfrm” გათვალისწინებული “MySQL საშუალებები“.

ეს ინსტრუმენტი იქნება ამონაწერი მონაცემების სტრუქტურას და გენერირება SQL script მაგიდის შექმნა. ამ, ჩამოტვირთვა “MySQL საშუალებები” (რაღაც mysql-კომუნალური-1.6.4-winx64.msi) და დააყენოთ-o.

გახსენით კონსოლი (Command / OF) და გამოყენების CD ბრძანება გადავიდეს ეგ მონტაჟი დირექტორია (რაღაც C:\Program Files MySQL MySQL საშუალებები 1.6\). გაითვალისწინეთ, რომ შიგნით რომ დირექტორია შესრულებად mysqlfrm.exe.

  cd "C:\Program Files  MySQL  MySQL საშუალებები 1.6"

არჩევა მხოლოდ ერთი მეთოდით ამონაწერი სტრუქტურა მაგიდა შეიცავს .frm:

1° მეთოდი | Online

1. ეწვიეთ https://recovery.twindb.com/;
2. Clique არ მენიუ “აღდგენა სტრუქტურა” და შემდეგ “საწყისი .frm ფაილი“;
3. დააკლიკეთ ღილაკს “Browser…” და აირჩიეთ თქვენი .frm ფაილი; e
4. დააკლიკეთ ღილაკს “ატვირთვა” და მაგიდის შექმნა script ჩანს ეკრანზე.

თქვენ შეგიძლიათ გააგზავნოთ მრავალი .frm ფაილი ერთდროულად ქმნის ერთი script ყველა მაგიდები. უბრალოდ თქვენ შექმნით .zip მთელი თავისი .frm ადრე “Browser / ატვირთვა”.

2° მეთოდი | გამოყენების –დიაგნოსტიკური

/* მაგალითად generic */
   mysqlfrm -diagnostic "<წყარო / path>/mytable.frm" > "<დანიშნულების / path / recovered_mytable.sql>"
 
/* მაგალითი პრაქტიკაში WordPress wp_posts.frm მაგიდა */
   mysqlfrm --დიაგნოსტიკური "C:\wamp  bin  mysql  mysql5.6.17  მონაცემების  meubanco  wp_posts.frm" > "C:\recovered_wp_posts.sql"

3° მეთოდი | გამოყენების –სერვერზე

/* მაგალითად generic */
  mysqlfrm -სერვერი=root:myPassword@localhost პორტიანი=3311 "<წყარო / path>/mytable.frm" > "<დანიშნულების / path>/recovered_mytable.sql"
 
/* მაგალითი პრაქტიკაში WordPress wp_posts.frm მაგიდა */
  mysqlfrm --სერვერზე=root@localhost --პორტი=3307 ""C:\wamp  bin mysql\mysqld.6.17\მონაცემები  meubanco  wp_posts.frm" > "C:\recovered_wp_posts.sql"

არ გამოიყენოთ MySQL პორტი! აირჩიეთ სხვა ნებისმიერი ხელმისაწვდომი. გაითვალისწინეთ, რომ ბრძანება გადამისამართებების გამომავალი .sql ფაილი, რომელიც ინახება მითითებულ გზას (არავითარ შემთხვევაში, C:).

ნაბიჯი 2: ხელახლა მაგიდაზე თქვენს მონაცემთა ბაზაში

ახალი მონაცემთა ბაზის, შექმნა მაგიდასთან სკრიპტის გენერირდება ნაბიჯი 1. პირადად მე დაყენებული სუფთა მობილური WampServer და გამოიყენება PHPMyAdmin (http://localhost / phpmyadmin /) მონაცემთა ბაზის შექმნა და იმპორტი SQL script შეიქმნა ნაბიჯი 1 (recovered_wp_posts.sql). ეს სცენარი იქნება შექმნა 2 ფაილი დირექტორია თქვენი MySQL მონაცემთა ბაზაში:

  SUA_TABELA.frm
  SUA_TABELA.IDB

ჩემს შემთხვევაში, ეს ფაილი შეიქმნა C:\wamp64 bin mysql mysql5.7.14 მონაცემების <MYDATABASE.GDB>. სხვა სიტყვებით, ძებნის თქვენი MySQL ინსტალაცია და აღნიშნავენ, რომ დირექტორია მონაცემები არსებობს მონაცემთა ბაზა და ორი ფაილი სახელად.

ნაბიჯი 3: ამოიღონ ახალი .idb ფაილი

ამოიღონ new .idb ფაილი, აწარმოებს შემდეგ SQL ბრძანება:

/* მაგალითად generic */
  ALTER TABLE mytable გაუქმება Tablespace;
 
/* მაგალითი პრაქტიკაში WordPress wp_posts მაგიდა */
  ALTER TABLE wp_posts გაუქმება Tablespace;

Este Comando ამოიღონ o ლინკი entre მაგიდის e o Tablespace (სადაც ისინი ფიზიკურად ინახება მონაცემთა ბაზის ფაილი), და ამოიღონ ფაილი .idb.

ნაბიჯი 4: ასლი ძველი .idb ფაილი

ორიგინალური ფაილი .idb (რომელიც შეიცავს მონაცემებს) საჭიროებს დაზუსტებას მფლობელის გადაწერა ადგილი .idb წაიშალა ნაბიჯი 3. გამოიყენეთ Ctrl + C და Ctrl + V ან თუნდაც კლავს იმ ბრძანების.

ნაბიჯი 5: Reactivate მაგიდა

გაწყვეტილი ბმულის ნაბიჯი 3 თქვენ უნდა აღდგეს შემდეგ ბრძანება:

/* მაგალითად generic */
  ALTER TABLE mytable IMPORT Tablespace;
 
/* მაგალითი პრაქტიკაში WordPress wp_posts მაგიდა */
  ALTER TABLE wp_posts IMPORT Tablespace;

არ ინერვიულოთ, თუ თქვენ მიიღეთ რაიმე გაფრთხილება, თუმცა, შეიძლება უფრო ზოგადი ავარია ნაჩვენებია შემდეგი შეცდომა:

  #1808 - Schema mismatch (მაგიდის ROW_TYPE_DYNAMIC row ფორმატი, .IBD ფაილი აქვს ROW_TYPE_COMPACT row ფორმატში.)

ამ შემთხვევაში, ეს მოხდა იმის გამო, სხვაგვარად რომ mysql5.7.14 (NEW) ქმნის ძირითადად მაგიდა იმ Mysql-06/05/17 (ანტიკური), sem o ROW_FORMAT = კომპაქტური.

მაშინ, თუ თქვენ იყენებთ MySQL> = კანონის mysql5.7.14, ყველა თქვენ უნდა გააკეთოთ დაამატოთ ROW_FORMAT = კომპაქტური მაგიდის შექმნა განმარტება.

  CREATE TABLE `wp_posts` (. . .) ENGINE=InnoDB ROW_FORMAT=კომპაქტური

სხვა შეცდომები

მხოლოდ ჩანაწერი, ადრე გამოგვდის .frm მონაცემების მოპოვება, მე მქონდა გარკვეული შეცდომები:

  # წყაროს localhost: ... დაკავშირებული.
  # სასტარტო შეიცავდა სერვერზე პორტი 3304 ... ERROR ცდილობს შეჩერება ვერ შეიცავდა სერვერზე.  პროცესი id = 6648.
  ERROR: Spawn სერვერზე ოპერაცია ვერ შედგა. Clone შეცდომა სერვერზე: ვერ კომუნიკაცია ახალი მაგალითად. პროცესი id = 6648.. დიაგნოსტიკა, გაუშვით სასარგებლო ისევ და გამოყენების the --მრავალსიტყვაობა ვარიანტის სანახავად შეტყობინებები შეიცავდა სერვერზე და გამოსწორების ნებისმიერი შეცდომები წარმოდგენილი შემდეგ აწარმოებს კომუნალური ერთხელ.
  SUCCESS: პროცესი PID 6648 (ბავშვის პროცესი PID 7264) შეწყდა.
traceback (ყველაზე ბოლო ზარი ბოლო):
  ფაილი "G:\ade  აშენება  sb_0-19921351-1470074463.97  Python-2.7.6-windows-x86-64bit  lib  საიტი პაკეტები  cx_Freeze  initscripts  Console.py", ონლაინ 27, in <მოდული>
  ფაილი "scripts\mysqlfrm.py", ონლაინ 422, in <მოდული>
  ფაილი ".\mysql\utilities\command\read_frm.py", ონლაინ 439, in read_frm_files
  ფაილი ".\mysql\utilities\command\read_frm.py", ონლაინ 166, in _spawn_server
  ფაილი ".\mysql\utilities\command\serverclone.py", ონლაინ 180, in clone_server
  ფაილი ".\mysql\utilities\common\tools.py", ონლაინ 273, in get_mysqld_version
IOError: [Errno 13] წვდომა აკრძალულია: "Version_check"

ამ კონკრეტულ შემთხვევაში WordPress, თქვენ უნდა ამოიღონ სკრიპტი, რომელიც გენერირდება SQL მიღებული .frm, ყველა მასალა, როგორც "DEFAULT ‘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

სულ ხელმისაწვდომი: 14927

10 მიმოხილვა “აღდგენა MySQL მაგიდები, როდესაც მხოლოდ .frm და .ibd ფაილი ხელმისაწვდომია

  1. Rodrigo განაცხადა:

    რა უნდა გავაკეთოთ, როდესაც თქვენ ხედავთ შემდეგ შეცდომა: #1815 – შიდა შეცდომა. ვერ აღადგინოთ LSNs მაგიდა “MYDATABASE.GDB”.”minhatabela”: მონაცემთა სტრუქტურა კორუფციის.
    შესაძლებელია შეასრულოს მონაცემების ხელით ჩანართები? როგორ უნდა გავაკეთოთ?
    დიდი მადლობა.

  2. Cristian U განაცხადა:

    Hi Taylor,

    როგორ ფიქრობთ გადაწყვიტოს ეს შეცდომა:
    ERROR: Spawn სერვერზე ოპერაცია ვერ შედგა. Clone შეცდომა სერვერზე: ვერ დაუკავშირდეს ახალი მაგალითად. პროცესი id = 6648.. დიაგნოსტიკა, გაუშვით სასარგებლო ისევ და გამოიყენოთ –მრავალსიტყვაობა ვარიანტის სანახავად შეტყობინებები შეიცავდა სერვერზე და გამოსწორების ნებისმიერი შეცდომები წარმოდგენილი შემდეგ აწარმოებს კომუნალური ერთხელ.
    SUCCESS: პროცესი PID 6648 (ბავშვის პროცესი PID 7264) შეწყდა.

    მე შენარჩუნება მიღების იგივე გაგზავნა და მე არ ვიცი, როგორ უნდა გადაწყდეს ეს.

    მადლობა

დატოვე პასუხი

თქვენი ელ-ფოსტა არ გამოქვეყნდება. აუცილებელი ველები აღნიშნულია *