Recuperare le tabelle di MySQL quando solo il frm file. e ibd sono disponibili

Come risolvere “Errore MySQL #1146 -Tabella non esiste” causato da spostare i file IDB (InnoDB) direttamente tra le directory (tablespace).

logo_mysql

Problema

Molti dei problemi che abbiamo sono problemi che abbiamo creato. Avevo appena istituito un sito usando WordPress e pensato: Che ne dici di vedere come questo funziona in PHP 7? Ok, come mio WampServer utilizzato PHP 5.6, così ho dovuto “felice” idea di aggiornare il WampServer 2.5 (Apache-2.4.9, MySQL-5.6.17, PHP 5.5.12) per WampServer 3.0.6 (Apache 2.4.23, MySQL 5.7.14, 5.6.25 PHP e Php 7.0.10).

Naturalmente,, Iniziato da backup, ma il mio grande slittamento era sceglie di non esportare SQL da tale sito, Invece, appena fatto una copia dei file MySQL (MySQL/dati) e l'applicazione (www/sito). Ero sicuro che avrebbe funzionato, come le altre volte.

Dopo aver installato il nuovo WampServer con PHP 7, mettere i file di backup e la schiena di applicazione, solo quando sono andato a testare dal browser, non Visualizza il sito, ma lo schermo di installazione di WordPress come se si trattasse di un nuovo sito. Congelato! Aprire PHPMyAdmin e controllare per vedere se il database era Ok e ho visto che, Nonostante sia elencato nel database, Quando fa clic sulla parte superiore della tabella per visualizzare i dati il seguente messaggio di errore:

  MySQL Errore #1146 -Tabella <TABLE_NAME> doesn ' t esiste

Ho cercato e ho appena scoperto che è possibile solo copiare o spostare i file direttamente in un'altra directory di MySQL MySQL se i file sono di tipo MyISAM, quelli con estensione frm. MYD. MYI. Non so cosa sia successo, ma il mio database è comparso come InnoDB (.FRM e. idb). Purtroppo, solo dopo il fatto che MySQL ha avvisato la documentazione:

  Non è possibile spostare liberamente .File IBD tra directory del database come è possibile con i file di tabella MyISAM. 
  La definizione di tabella archiviata nel tablespace InnoDB ha condiviso include il nome del database. 
  L'ID di transazione e Registro sequenza di numeri memorizzati nei file di tablespace differiscono anche tra database.

Soluzione

Cheguei un ver algumas soluções simples, mas vou descrever aqui una única realmente funcionou para mim, apesar de parecer bem mais complexa, encontrada nessun Post “Ripristino di tabella(s) in database MySQL quando file frm o ibd sono disponibili solo“.

Antes, Tuttavia, un título de conhecimento, Vale lembrar em relação ao tipo InnoDB, MySQL la struttura di guardia nei file e dati in ibd frm.. Basta con la teoria, Andiamo dritti al sodo!

Passo 1: Ricreare la struttura dei file FRM

Come ha detto, la frm contiene la struttura della tabella. In primo luogo abbiamo bisogno di recuperare questa struttura per poi compilare i dati. È possibile farlo 3 diversi metodi descritti di seguito, ma prima, Permettetemi di dirvi qualcosa circa il “Utilità di MySQL”.

Utilità di MySQL | mysqlfrm

Se non si intende utilizzare il primo metodo proposto (Online) quindi è necessario utilizzare lo strumento “mysqlfrm” fornito dalla “Utilità di MySQL“.

Questo strumento estrae la struttura di dati e generare la creazione della tabella script SQL. Per questo, Scarica “Utilità di MySQL” (qualcosa di simile mysql-utilities-1.6.4-winx64.msi) e installarlo.

Aprire la console (Comando / Della) e utilizzare il comando CD per spostare la directory di installazione predefinita (qualcosa di simile C:\Programmi di utilità di C:Program MySQL MySQL 1.6\). Si noti che all'interno di questa directory non esiste il file eseguibile mysqlfrm.exe.

  CD "C:\C:Program MySQL   MySQL Utilities 1,6"

Scegliere solo uno dei metodi descritti di seguito per estrarre la struttura di tabella contenuta nei file FRM:

1º Metodo. | Online

1. Visitare il sito Web HTTPS://Recovery.twindb.com/;
2. Fare clic sul menu “Recuperare la struttura” e poi in “FRM file da.“;
3. Fare clic sul pulsante “Browser…” e selezionare il file frm; e
4. Fare clic sul pulsante “Caricare” e lo script di creazione tabella verrà visualizzato sullo schermo.

È possibile inviare più file frm una volta generando un singolo script con tutte le tabelle. Solo per farvi creare un file zip con tutti i suoi FRM prima “Browser/Upload”.

2º Metodo. | Utilizzando –diagnostica

/* Esempio generico */
   mysqlfrm-diagnostica "<percorso di origine>/MyTable.frm" > "<Destination/Path/recovered_mytable.SQL>"
 
/* Esempio in pratica con la tabella di wp_posts.frm di WordPress */
   mysqlfrm --diagnostica "C:\wampbinmysqlmysql5.6.17datameubancowp_posts.frm" > "C:\recovered_wp_posts.SQL"

3º Metodo. | Utilizzando –Server

/* Esempio generico */
  mysqlfrm-server=radice:miapassword@localhost-porta=3311 "<percorso di origine>/MyTable.frm" > "<percorso di destinazione>/recovered_mytable.SQL"
 
/* Esempio in pratica con la tabella di wp_posts.frm di WordPress */
  mysqlfrm --Server=radice@localhost --porta=3307 ""C:\wampbinMySQL\MySQL5.6.17\datameubancowp_posts.FRM" > "C:\recovered_wp_posts.SQL"

Non utilizzare la porta di MySQL! Scegliere qualsiasi altro disponibili. Si noti che il comando reindirizza l'output in un file con estensione SQL che viene salvato nel percorso specificato (nel caso in, C:).

Passo 2: Ricreare la tabella nel database

In un nuovo database, creare una tabella con lo script generato nel passaggio 1. Personalmente ho installato una versione pulita di WampServer e usato PHPMyAdmin (http://localhost/phpmyadmin /) per creare il database e importare lo script SQL creato nel passaggio 1 (recovered_wp_posts.SQL). Questo script creerà 2 file nella directory del database MySQL:

  SUA_TABELA.FRM SUA_TABELA.IDB

Nel mio caso, Questi file sono stati creati in C:\wamp64binmysqlmysql5.7.14data<la mia sede>. IE, guardare per l'installazione di MySQL e di notare che nella directory Data Ci sarà il database e i due file indicati.

Passo 3: Rimuovere il nuovo file IDB

Per rimuovere il nuovo file IDB, eseguire il seguente comando SQL:

/* Esempio generico */
  ALTER TABLE mytable scartare TABLESPACE;
 
/* Esempio in pratica con la tabella wp_posts di WordPress */
  ALTER TABLE wp_posts scartare TABLESPACE;

Questo comando rimuove il collegamento tra la tabella e il tablespace (Dove sono memorizzati fisicamente i file di database), e rimuovere il file IDB.

Passo 4: Copiare il vecchio file IDB

Il file originale di IDB (l'oggetto che contiene i dati) deve essere copiato al posto che ha eliminato nel passaggio IDB 3. Utilizzare Ctrl + C e Ctrl + V o uccidere se stessi utilizzando la riga di comando.

Passo 5: Riattivare la tabella

Il collegamento interrotto nel passaggio 3 deve essere ripristinato con il seguente comando:

/* Esempio generico */
  ALTER TABLE mytable importazione TABLESPACE;
 
/* Esempio in pratica con la tabella wp_posts di WordPress */
  ALTER TABLE wp_posts importazione TABLESPACE;

Non ti preoccupare se vengono visualizzati alcuni avvisi, Tuttavia, Potrebbe essere malfunzionamento generale che appare il seguente errore:

  #1808 - Mancata corrispondenza dello schema (Tabella ha formato di riga ROW_TYPE_DYNAMIC, .IBD file ha il formato di riga ROW_TYPE_COMPACT.)

In questo caso, Questo è accaduto dovuto in modo diverso da mysql 5.7.14 (Nuovo) Crea una tabella di default rispetto a Mysql-5.6.17 (VECCHIO), senza la KEY_BLOCK_SIZE = compact.

Allora, Se si utilizza MySQL > = mysql 5.7.14, tutto quello che dovete fare è aggiungere KEY_BLOCK_SIZE = compact nella definizione di creazione della tabella.

  CREATE TABLE 'wp_posts' (. . .) MOTORE=InnoDB KEY_BLOCK_SIZE=Compatto

Altri errori

Per la cronaca, prima di ottenere successo nell'estrazione dei dati da. frm, Ho avuto alcuni errori:

  # Origine su localhost: ... collegato.
  # Avvio del server generato sulla porta 3304 ... Errore tentativo di arrestare Impossibile server generato.  Id processo = 6648.
  ERRORE: Riproducono il funzionamento del server non riuscita. Errore del server clone: Impossibile comunicare con Nuovo istanza. Id di processo = 6648.. Per diagnosticare, eseguire nuovamente l'utilità e utilizzare il --opzione di livello di dettaglio per visualizzare i messaggi dal server generato e correggere eventuali errori ha presentato quindi eseguita nuovamente l'utilità.
  SUCCESSO: Il processo con PID 6648 (processo figlio di PID 7264) è stata terminata.
Traceback (più recente ultima chiamata):
  File "G:\adebuildsb_0-19921351-1470074463.97Python-2.7.6-Windows-x86-64bitlibsite-packagescx_FreezeinitscriptsConsole.py", linea 27, in <modulo>
  File "scripts\mysqlfrm.py", linea 422, in <modulo>
  File ".\mysql\utilities\command\read_frm.py", linea 439, in read_frm_files
  File ".\mysql\utilities\command\read_frm.py", linea 166, in _spawn_server
  File ".\mysql\utilities\command\serverclone.py", linea 180, in clone_server
  File ".\mysql\utilities\common\tools.py", linea 273, in get_mysqld_version IOError: [Errno 13] Autorizzazione negata: 'version_check'

Nel caso specifico di WordPress, è necessario rimuovere lo script che ha generato il codice SQL generato sotto. frm, PREDEFINITE tutte le voci ‘0000-00-00 00:00:00’, in caso contrario, cattura l'errore:

  #1067 - Valore predefinito (impostazione predefinita) non valido per 'comment_date'

Questo è tutto!

Tipi di carattere

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

Visite totali: 21139

12 Commenti su “Recuperare le tabelle di MySQL quando solo il frm file. e ibd sono disponibili

  1. Rodrigo ha detto:

    Cosa fare quando viene visualizzato il seguente messaggio di errore: #1815 – Errore interno. Non è possibile reimpostare gli LSN nella tabella “la mia sede”.”myTable”: Danneggiamento dei dati struttura.
    Posso eseguire gli inserimenti di dati manualmente? Come eseguire questa operazione?
    Dal già vi ringrazio.

  2. Cristian U ha detto:

    Ciao Taylor,

    Come hai risolto questo errore:
    ERRORE: Riproducono il funzionamento del server non riuscita. Errore del server clone: Impossibile comunicare con nuova istanza. Id processo = 6648.. Per diagnosticare, eseguire nuovamente l'utilità e utilizzare il –opzione di livello di dettaglio per visualizzare i messaggi dal server generato e correggere eventuali errori ha presentato quindi eseguita nuovamente l'utilità.
    SUCCESSO: Il processo con PID 6648 (processo figlio di PID 7264) è stata terminata.

    Continuo a ricevere lo stesso messaggio e don t sapere come ´ per risolverlo.

    Grazie

  3. Reginaldo Luiz de Freitas ha detto:

    Complimenti Taylor, ma didattico Impossibile!! Tu sei lo stesso ragazzo!

    abbraccio e grazie per condividere la tua esperienza!

Lasciare una risposta

L'indirizzo email non verrà pubblicato. Campi obbligatori sono contrassegnati con *