2011-05-25 15 views
6

Użyłem mysqldump do eksportu mojej bazy danych, a następnie zaimportowałem ją do MySQL na moim drugim serwerze. Teraz mogę zobaczyć wszystkie moje tabele, jeśli wykonuję "Pokaż tabele", ale nie mogę faktycznie wybrać lub opisać żadnego z nich.Tabele InnoDB istnieją w MySQL, ale mówią, że nie istnieją po skopiowaniu bazy danych do nowego serwera.

ERROR 1146 (42S02): Tabela 'mydatabase.user' nie istnieje

wszystkich moich tabelach InnoDB. Widziałem jeden problem, w którym ludzie używają old_passwords, więc jawnie ustawiłem to na 0 w my.cnf i upewniłem się, że wszystkie hasła w tabeli mysql mają 41 cyfr szesnastkowych, tak jak powinny być dla nowych haseł.

+0

Czy jesteś pewien, że przywracanie wykonane bez błędów? Spróbuj przywrócić za pomocą pojedynczej transakcji, transakcja zatrzyma się na błędach. – Igor

+0

To działało przez jakiś czas po tym, jak go skopiowałem, a potem po prostu zaczęło mówić, że tabela nie istnieje. Ale nie mogę utworzyć tabeli, ponieważ istnieje ... Problem polegał na tym, że po imporcie nastąpiły pewne zmiany w danych, które miały miejsce w przypadku tej kopii, więc muszę mieć dostęp do tych co najmniej. Plik .frm dla tej tabeli jest dokładnie taki sam jak robocza kopia bazy danych. – mrgordon

+0

Wygląda na to, że masz problemy ze strukturą tabeli. Nic na to nie poradzę. Wypróbuj nowe przywracanie z włączonym protokołem i umieść tutaj dowolny błąd z dziennika. – Igor

Odpowiedz

7

Powód "Pokaż tabele;" działa, ponieważ mysqld będzie skanował tylko katalog bazy danych dla plików .frm. Dopóki istnieją, widzi definicję tabeli.

Jeśli importowane dane do MySQL i ten błąd zdarza się, pierwszą rzeczą, którą natychmiast by zrobić to uruchomić polecenie: (BTW to MySQL 5.1.45, ale działa w MySQL 5.x tak)

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) 

Jeśli serwer zaimportował dane do InnoDB jest wyłączony, oznacza to, że masz duży problem. Oto co należy zrobić:

1) Usuń wszystkie dane z New importu DB Server

2) Cleanup InnoDB Setup

3) Uruchom POKAŻ silników; i upewnij się, że InnoDB jest w pełni operacyjny !!!

4) Odśwież mysqldump do nowego serwera importu

spróbować !!!

2

Miałem ten problem, gdy zmieniłem z serwera Windows na serwer Linux. Tabele są plikami, a pliki systemu Windows uwzględniają wielkość liter, ale w plikach systemu Linux rozróżniana jest wielkość liter.

W mojej aplikacji, w kwerendach sql, czasami używałam wielkich tablenames i innych razy małych liter, więc czasami otrzymywałam taki sam wynik jak ty.

0

W moim przypadku był to parametr SQLCA.DBParm.

użyłem SQLCA.DBParm = "Databse = "sle_database.text"" ale musi to być

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

Wyjaśnij: masz zamiar połączyć trzy ciągi:

a) Database='    - "Database='" 

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

c) ' - "'" 
Powiązane problemy