Ibalik muli ang MySQL talahanayan kapag lamang ang .frm at .ibd file ay magagamit

Paano upang malutas “MySQL Error #1146 - Table ay hindi umiiral” sanhi ng paglipat ng mga file .idb (InnoDB) direkta sa pagitan directories (tablespace).

logo_mysql

problema

Marami sa mga problema namin mga problema nililikha namin. Katatapos ko lang maghanda ng isang website gamit ang WordPress at pag-iisip: tulad makita kung paano ito gumagana sa PHP 7? Ok, bilang aking WampServer ginamit PHP 5.6, pagkatapos ay ako had sa “masaya” ideya na i-upgrade ang WampServer 2.5 (Apache-2.4.9, MySQL-5.6.17, Php5.5.12) para sa WampServer 3.0.6 (Apache2.4.23, Mysql5.7.14, Php5.6.25 at Php 7.0.10).

malinaw, Nagsimula ako sa pamamagitan ng backup, ngunit ang aking malaking maling hakbang ay pumili na huwag i-export ang SQL tulad Site, sa halip, ginawa lamang ng isang kopya ng mga file MySQL (MySQL / data) at application (www / site). Tiwala ako noon ito gumagana, gaya ng bago.

Pagkatapos i-install ang bagong WampServer na may PHP 7, Ko bang ilagay ang MySQL backup file at ang application doon sa likod, lamang kapag ako ay pagsubok ng browser, hindi lumitaw Site, ngunit ang WordPress pag-install screen na parang ito ay isang bagong website. halaya! Buksan PHPMyAdmin upang makita kung ang database ay Ok at nakita na, sa kabila ng pagiging nakalista sa database, kapag nag-click sa talahanayan upang tingnan ang data ay nagpakita ang mga sumusunod na mensahe ng error:

  MySQL pagkakamali #1146 - Table <table_name> ay hindi umiiral

Ako ay naghahanap at natuklasan ko na maaari ka lamang kopyahin o ilipat ang mga file nang direkta sa isa pang MySQL MySQL direktoryo kung ang mga file ay ang uri MyISAM, mga may extension .frm .MYD .MYI. Hindi ko talaga alam kung ano ang nangyari, ngunit ang aking database ay lumitaw bilang InnoDB (.frm e .idb). sa kasamaang-palad, lamang pagkatapos ay nakita ang kaganapan ng MySQL babasahin na binigyan ng babala:

  hindi malaya mo maaaring ilipat .IBD file sa pagitan ng database directories bilang magagawa mo sa mga file MyISAM mesa. 
  Ang table definition naka-imbak sa InnoDB shared tablespace ay kinabibilangan ng mga pangalan ng database. 
  Ang transaksyon ID at mag-log sequence numero na naka-imbak sa mga file tablespace din naiiba sa pagitan database.

solusyon

Nakatanggap ako upang gawin ang ilang mga simpleng solusyon, pero ipaliliwanag ko dito ang isa na talagang nagtrabaho para sa akin, kahit na ito ay tila malayo mas kumplikado, Hindi nahanap ang mag-post “Ipinapanumbalik mesa(s) sa MySQL database kapag frm o IBD file ay makukuha lamang“.

bago, gayunman, sa pamamagitan ng paraan ng kaalaman, ito ay nagkakahalaga ng pagtanda na kung ikukumpara sa InnoDB, MySQL mapigil ang kaayusan nito sa .frm mga file at ang data sa .ibd. sapat na teorya, Hinahayaan makakuha ng pababa sa!

hakbang 1: Re-lumikha ng ang istraktura ng .frm

tulad ng sinabi ko, .frm ay naglalaman ng mga istraktura ng talahanayan. Unang kailangan namin upang mabawi na istraktura at pagkatapos ay matapos ang popular na data. Maaari mong gawin ito 3 Iba't ibang mga pamamaraan na inilarawan sa ibaba, higit pa bago, hayaan mo akong sabihin sa iyo ng isang bagay tungkol sa mga “MySQL Utilities”.

MySQL Utilities | mysqlfrm

Kung hindi mo nilayon upang gamitin ang mga iminungkahing pamamaraan 1 (online) pagkatapos ay kailangan mong gamitin ang tool “mysqlfrm” ibinigay ng “MySQL Utilities“.

Ang tool na ito ay i-extract ang data istraktura at bumuo ng SQL script para sa paglikha ng table. para sa, download “MySQL Utilities” (isang bagay tulad ng MySQL-1.6.4-winx64.msi-utility) at i-install-o.

Buksan ang console (utos / NG) at gamitin ang CD command upang ilagay ang default na pag-install direktoryo (isang bagay tulad ng C:\Program Files MySQL MySQL Utilities 1.6\). Tandaan na sa loob ng direktoryo na ay ang mga maipapatupad mysqlfrm.exe.

  CD "C:\Program Files  MySQL  MySQL Utilities 1.6"

Pumili ng isa lamang sa mga pamamaraan sa ibaba upang i-extract ang istraktura ng talahanayan na nakapaloob sa .frm:

1Pamamaraan No. | online

1. Bisitahin ang website https://recovery.twindb.com/;
2. Clique walang menu “Ibalik muli Structure” at pagkatapos ay sa “mula .frm file“;
3. I-click ang button “browser…” at piliin ang inyong .frm file; e
4. I-click ang button “Upload” at table paglikha script ay lilitaw sa screen.

Maaari kang magpadala ng maramihang mga .frm nang sabay-sabay ang paglikha ng isang solong script na may lahat ng mga talahanayan. Lamang upang ipaalam sa iyo na lumikha ng isang .zip sa lahat .frm nito bago “Browser / I-upload”.

2Pamamaraan No. | paggamit –diagnostic

/* halimbawa ng generic */
   mysqlfrm -diagnostic "<source / landas>/mytable.frm" > "<patutunguhan / path / recovered_mytable.sql>"
 
/* Halimbawa ng mga kasanayan na may WordPress talahanayan wp_posts.frm */
   mysqlfrm --diagnostic "C:\wamp  bin  MySQL  mysql5.6.17  data  meubanco  wp_posts.frm" > "C:\recovered_wp_posts.sql"

3Pamamaraan No. | paggamit –server

/* halimbawa ng generic */
  mysqlfrm -server=ugat:mypassword@localhost -port=3311 "<source / landas>/mytable.frm" > "<destination / path>/recovered_mytable.sql"
 
/* Halimbawa ng mga kasanayan na may WordPress talahanayan wp_posts.frm */
  mysqlfrm --server=ugat@localhost --port=3307 ""C:\wamp  bin MySQL\mysqld.6.17\data\meubanco\wp_posts.frm" > "C:\recovered_wp_posts.sql"

Huwag gamitin ang MySQL port! Pumili ng anumang iba pang magagamit. Tandaan na ang command ay nagre-redirect ang output sa isang Sql file na naka-save sa tinukoy na path (walang kaso, C:).

hakbang 2: Re-lumikha ng mga talahanayan sa iyong database

Sa isang bagong database, lumikha ng isang talahanayan na may ang script ay nakabuo ng sa Hakbang 1. Ako personal na naka-install sa isang malinis na bersyon ng WampServer at ginamit PHPMyAdmin (http://localhost / phpmyadmin /) upang lumikha ng database at i-import ang SQL script na nilikha sa hakbang 1 (recovered_wp_posts.sql). Ang script na ito ay lilikha 2 mga file sa direktoryo ng iyong MySQL database:

  SUA_TABELA.frm
  SUA_TABELA.IDB

Sa aking kaso, mga file na ito ay nilikha sa C:\wamp64 bin MySQL mysql5.7.14 data <MYDATABASE.GDB>. sa ibang salita, hanapin ang iyong pag-install MySQL at tandaan na ang direktoryo data magkakaroon ng database at ang dalawang nabanggit na mga file.

hakbang 3: Alisin ang mga bagong .idb file

Upang alisin ang mga bagong .idb file, patakbuhin ang sumusunod na command SQL:

/* halimbawa ng generic */
  Baguhin TALAAN mytable itapon ang TABLESPACE;
 
/* Halimbawa ng mga kasanayan na may WordPress wp_posts mesa */
  Baguhin TALAAN wp_posts itapon ang TABLESPACE;

Este comando alisin o link entre isang tabela e o tablespace (Kung saan pisikal na naka-imbak sa database file), at alisin ang mga file .idb.

hakbang 4: Kopyahin ang lumang .idb file

Ang orihinal na file .idb (na naglalaman ng data) Kailangan mo upang makopya sa lugar ng .idb kung saan ay tinanggal na sa Hakbang 3. Gamitin ang Ctrl + C at Ctrl + V o kahit pumatay sa command line.

hakbang 5: Buhayin muli ang talahanayan

Ang sirang link sa Hakbang 3 Kailangan mong maibalik kasama ang sumusunod na command:

/* halimbawa ng generic */
  Baguhin TALAAN mytable IMPORT TABLESPACE;
 
/* Halimbawa ng mga kasanayan na may WordPress wp_posts mesa */
  Baguhin TALAAN wp_posts IMPORT TABLESPACE;

Huwag mag-alala kung ikaw ay makakuha ng ilang mga babala, gayunman, ay maaaring magbigay ng pangkalahatang breakdown na nagpapakita ng mga sumusunod na error:

  #1808 - schema Maling pagtutugma (Table ay ROW_TYPE_DYNAMIC row format, .IBD file ay ROW_TYPE_COMPACT row format.)

sa kasong ito, ito nangyari dahil sa ang iba't ibang mga paraan na mysql5.7.14 (NEW) lumilikha ang default na mesa na may kaugnayan sa MySQL-6.5.17 (OLD), sem o ROW_FORMAT = compact.

pagkatapos, kung ikaw ay gumagamit MySQL> = ang mysql5.7.14, ang kailangan mo lang gawin ay idagdag ROW_FORMAT = compact sa kahulugan paglikha ng table.

  LILIKHA TALAAN `wp_posts` (. . .) ENGINE=InnoDB ROW_FORMAT=siksik

iba pang mga error

Para lamang sa the record, bago succeeding sa .frm data bunutan, Ako ay nagkaroon ng ilang mga pagkakamali:

  # Source sa localhost: ... konektado.
  # Simula ng spawned server sa port 3304 ... ERROR Sinusubukang upang ihinto nabigo spawned server.  Proseso id = 6648.
  ERROR: Nabigo ang mga itlog ng isda server na operasyon. I-clone ang server error: Hindi magawang makipag-ugnayan sa bago pagkakataon. proseso id = 6648.. upang mag-diagnose, patakbuhin ang utility muli at paggamit ang --kaliguyan pagpipilian upang tingnan ang mga mensahe mula sa spawned server at iwasto ang anumang mga error na ipinakita pagkatapos patakbuhin ang utility muli.
  SUCCESS: Ang proseso na may PID 6648 (batang proseso ng PID 7264) Winakasan.
traceback (pinakahuling tawag huling):
  talaksan "G:\ade  bumuo  sb_0-19921351-1470074463.97  Python-2.7.6-windows-x86-64bit  lib  site-pakete  cx_Freeze  initscripts  Console.py", linya 27, sa <module>
  talaksan "scripts\mysqlfrm.py", linya 422, sa <module>
  talaksan ".\mysql\utilities\command\read_frm.py", linya 439, in read_frm_files
  talaksan ".\mysql\utilities\command\read_frm.py", linya 166, in _spawn_server
  talaksan ".\mysql\utilities\command\serverclone.py", linya 180, in clone_server
  talaksan ".\mysql\utilities\common\tools.py", linya 273, in get_mysqld_version
IOError: [errno 13] tinanggihan ang pahintulot: 'Version_check'

Sa partikular na kaso ng WordPress, kailangan mong alisin ang script na bumuo ng SQL nakuha sa .frm, lahat ng mga entry ng 'DEFAULT ‘0000-00-00 00:00:00', kung hindi, mahuli ang error:

  #1067 - default na halaga (default) di-wastong para sa 'COMMENT_DATE'

na!

pinagkukunan

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

Kabuuang accesses: 21479

12 mga review “Ibalik muli ang MySQL talahanayan kapag lamang ang .frm at .ibd file ay magagamit

  1. Rodrigo sinabi:

    Ano ang dapat gawin kapag nakita mo ang mga sumusunod na mensahe ng error: #1815 – Internal error. Hindi reset LSNs sa table “MYDATABASE.GDB”.”minhatabela”: Data istraktura katiwalian.
    Ito ba ay posible na gawin ang data nang manu-mano pagsingit? Kung paano ito gawin?
    pasasalamat ko sa iyo.

  2. Cristian U sinabi:

    Hi Taylor,

    Paano ninyo malutas ang error na ito:
    ERROR: Nabigo ang mga itlog ng isda server na operasyon. I-clone ang server error: Hindi magawang makipag-usap sa mga bagong pagkakataon. Proseso id = 6648.. upang mag-diagnose, patakbuhin ang utility muli at gamitin ang –kaliguyan pagpipilian upang tingnan ang mga mensahe mula sa spawned server at iwasto ang anumang mga error na ipinakita pagkatapos patakbuhin ang utility muli.
    SUCCESS: Ang proseso na may PID 6648 (batang proseso ng PID 7264) Winakasan.

    panatilihin ko matanggap ang parehong mensahe at ako do not malaman kung paano upang malutas ito.

    salamat

  3. Reginaldo Luiz de Freitas sinabi:

    Congratulations Taylor, ngunit didaktiko imposible!! ikaw ang parehong tao!

    yakap at salamat para sa pagbabahagi ng iyong karanasan!

-Iwan Ng sagot

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *