2011-05-25 14 views
6

Ho usato mysqldump per esportare il mio database e quindi l'ho importato in MySQL sul mio altro server. Ora posso vedere tutti i miei tavoli se faccio "show tables" ma non posso effettivamente selezionarli o descriverli.Le tabelle InnoDB esistono in MySQL ma dicono che non esistono dopo aver copiato il database sul nuovo server

ERRORE 1146 (42S02): Table 'mydatabase.user' non esiste

Tutti i miei tavoli sono InnoDB. Ho visto un problema in cui le persone utilizzavano old_passwords, quindi ho impostato esplicitamente su 0 in my.cnf e mi sono assicurato che tutte le password nella tabella mysql fossero 41 cifre esadecimali come dovrebbero essere per le nuove password.

+0

Sei sicuro che il ripristino ha fatto senza errori? Prova a effettuare il ripristino con una singola transazione, la transazione si fermerà sugli errori. – Igor

+0

Stava lavorando per un po 'dopo che l'ho copiato e poi ho iniziato a dire che la tabella non esisteva. Ma non riesco a creare la tabella perché esiste ... Il problema è che ci sono state alcune modifiche ai dati che sono accaduti con questa copia dopo l'importazione, quindi devo essere in grado di accedere a quelli almeno. Il file .frm per questa tabella è esattamente uguale a una copia di lavoro del database. – mrgordon

+0

Sembra che tu abbia problemi con la struttura di una tabella. Non posso aiutarti con quello. Prova il nuovo ripristino con il registro abilitato e pubblica qui eventuali errori dal registro. – Igor

risposta

7

Il motivo "mostra tabelle"; funziona perché mysqld eseguirà la scansione della directory del database solo per i file .frm. Finché esistono, vede una definizione di tabella.

Se sono stati importati i dati in MySQL e questo messaggio di errore si verifica, la prima cosa che vorrei subito fare è eseguire il seguente comando: (BTW Questo è MySQL 5.1.45, ma funziona in MySQL 5.x comunque)

mysql> show engines; 
+------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
| Engine  | Support | Comment              | Transactions | XA | Savepoints | 
+------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
| InnoDB  | YES  | Supports transactions, row-level locking, and foreign keys  | YES   | YES | YES  | 
| MRG_MYISAM | YES  | Collection of identical MyISAM tables       | NO   | NO | NO   | 
| BLACKHOLE | YES  | /dev/null storage engine (anything you write to it disappears) | NO   | NO | NO   | 
| CSV  | YES  | CSV storage engine            | NO   | NO | NO   | 
| MEMORY  | YES  | Hash based, stored in memory, useful for temporary tables  | NO   | NO | NO   | 
| FEDERATED | NO  | Federated MySQL storage engine         | NULL   | NULL | NULL  | 
| ARCHIVE | YES  | Archive storage engine           | NO   | NO | NO   | 
| MyISAM  | DEFAULT | Default engine as of MySQL 3.23 with great performance   | NO   | NO | NO   | 
+------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
8 rows in set (0.00 sec) 

Se il server in cui sono stati importati i dati dice InnoDB è disabilitato, si ha un grosso problema. Ecco cosa si dovrebbe fare:

1) rilasciare tutti i dati dal Nuovo Importa DB server

2) Cleanup InnoDB Setup

3) MOSTRA macchine funzionino; e assicurati che InnoDB sia pienamente operativo !!!

4) Ricarica il mysqldump nel nuovo server di importazione

fare un tentativo !!!

2

Ho riscontrato questo problema quando sono passato da un server Windows a un server Linux. Le tabelle sono file e i file di Windows sono case sensitive, ma i file di Linux sono case sensitive.

Nella mia aplicazione, nelle query SQL, alcune volte ho usato il nome in maiuscolo e altre volte in minuscolo, quindi, a volte ho ottenuto lo stesso risultato.

0

Il mio caso era il parametro SQLCA.DBParm.

ho usato SQLCA.DBParm = "Databse = "sle_database.text"" ma deve essere

SQLCA.DBParm = "Database='" +sle_database.text+ "'" 

spiego: si sta andando a coniugare tre corde:

a) Database='    - "Database='" 

b) (name of the database) - +sle_database.text+ 

c) ' - "'"