Таблицы InnoDB существуют в MySQL, но говорят, что они не существуют после копирования базы данных на новый сервер

Я использовал mysqldump для экспорта своей базы данных, а затем импортировал ее в MySQL на другом сервере. Теперь я могу видеть все свои таблицы, если я "показываю таблицы", но я не могу выбрать или описать ни одну из них.

ОШИБКА 1146 (42S02): Таблица "mydatabase.user" не существует

Все мои таблицы являются InnoDB. Я видел одну проблему, которая была у людей, когда они использовали old_passwords, поэтому я явно установил это значение в 0 в my.cnf и убедился, что все пароли в таблице mysql были 41 шестнадцатеричной цифрой, как и должно быть для новых паролей.

3 ответа

Решение

Причина "показать таблицы"; работает потому, что mysqld будет сканировать каталог базы данных только для файлов.frm. Пока они существуют, он видит определение таблицы.

Если вы импортировали данные в MySQL и появилось это сообщение об ошибке, первое, что я немедленно сделал бы, это запустил эту команду: (Кстати, это MySQL 5.1.45, но в любом случае работает в MySQL 5.x)

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)

Если сервер, на который вы импортировали данные, говорит, что InnoDB отключен, то у вас большая проблема. Вот что вы должны сделать:

1) Удалить все данные с нового сервера импорта БД

2) Очистка InnoDB Setup

3) запустить ПОКАЗАТЬ ДВИГАТЕЛИ; и убедитесь, что InnoDB полностью работоспособен!!!

4) Перезагрузите mysqldump на новый сервер импорта

Попробуйте!

У меня была эта проблема, когда я перешел с сервера Windows на сервер Linux. Таблицы - это файлы, а файлы Windows не чувствительны к регистру, но файлы linux чувствительны к регистру.

В моей заявке, в запросах sql, иногда я использовал имена таблиц в верхнем регистре, а иногда в нижнем регистре, поэтому иногда я получал тот же результат, что и вы.

В моем случае это было SQLCA.DBParm параметр.

я использовал SQLCA.DBParm = "Databse = "sle_database.text"" но это должно быть

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

Объясните: вы собираетесь объединить три строки:

a) Database='               - "Database='"

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

c) ' - "'"
Другие вопросы по тегам