MySQL Table не существует ошибка, но она существует - PullRequest
21 голосов
/ 23 ноября 2010

Кто-нибудь знает, при каких условиях вы можете получить ошибку 1146: Table '<database>.<table>' doesn't exist, когда ваша таблица действительно существует?

Я использую один и тот же код на 5 серверах, только один, который я недавно арендовал, показывает эту ошибку, поэтому я подозреваю, что это может быть какая-то ошибка установки или установки. Я могу выполнить мой оператор SQL из командной строки просто отлично. Я, очевидно, вижу таблицу из командной строки. Я не получаю никаких ошибок при установлении соединения (я использую mysqli, кстати).

Любая помощь будет оценена.

точный запрос:

$sql = "SELECT DISTINCT(mm_dic_word) AS word FROM spider.mm_dictionary WHERE mm_dic_deleted=0";

Ответы [ 10 ]

45 голосов
/ 03 октября 2011

Это только что произошло со мной, и через некоторое время я нашел ответ в статье блога, и хотел также разместить его здесь.

Если вы копируете каталог данных MySQL из /var/lib/mysql в /path/to/new/dir, но копируете только папки базы данных (т.е. mysql, wpdb, ecommerce и т. Д.) И у вас есть таблицы innodb, ваша innodb таблицы будут отображаться в «Показать таблицы», но запросы к ним (select и describe) не будут выполнены, с ошибкой Mysql error: table db.tableName doesn't exist. Вы увидите файл .frm в каталоге db и удивитесь, почему.

Для таблиц innodb важно скопировать файлы ib*, которые в моем случае были ibdata1, ib_logfile0 и ib_logfile1. Как только я сделал перевод, убедившись, что скопировал их, все заработало как положено.

Если ваш файл my.cnf содержит "innodb_file_per_table", файл .ibd будет присутствовать в каталоге db, но вам по-прежнему нужны файлы ib *.

4 голосов
/ 27 февраля 2013

В этом случае можно использовать mysqlcheck - так что вы можете отказаться от проблем с безопасностью таблиц и исправить их, если потребуется.

2 голосов
/ 01 февраля 2018

Это произошло со мной, когда я пытался выбрать таблицу, используя UPPERCASE, и имя таблицы было в нижнем регистре.

Итак, чтобы решить этот вопрос, я добавил "lower_case_table_names = 1" в файл my.cnf.

2 голосов
/ 03 декабря 2010

В принципе, я считаю, что проблема, с которой я столкнулся, была связана с различной длиной хэша пароля.В моем случае, я получил новый сервер, сделал полный дамп mysql на нем, который также передавал пароли и информацию о пользователе.Новый сервер уже был инициализирован пользователем root, у которого был хэш длиной 16 символов, но мой старый сервер использовал более новую длину хэша 32 символов.

Я должен был зайти в my.conf, установив для настройки старых паролей значение0 (с другой стороны, каждый раз, когда я пытался обновить базу данных, новое обновление занимало 16 символов).Затем я обновил все пароли до совпадения с помощью команды UPDATE mysql.user SET password=PASSWORD('password here');, затем сбросил привилегии.

Очевидно, что иметь каждого пользователя с одним и тем же паролем - это действительно плохая идея, поэтому я поменял их один за другим после того, как подтвердил, что он работает.в некоторые другие вещи, которые я сделал, которые не работали здесь , до того, как я наткнулся на это решение (на случай, если одно или несколько из этих изменений повлияли на мой результат), однако, я думаю, что вышеуказанное решениебыть полным ... но я не пытался воспроизвести ошибку, поэтому я не могу быть уверен на 100%.

2 голосов
/ 23 ноября 2010

Может ли быть так, что ваш единственный сервер - это linux box? Mysql чувствителен к регистру в Linux, но нечувствителен к Windows.

1 голос
/ 23 ноября 2010

У меня было такое поведение однажды. Позже я обнаружил, что драйвер JDBC, который я использовал, изменил мой запрос на нижний регистр, поэтому я не смог получить к нему доступ к своей базе данных (которая использовала смешанные буквы), хотя мой код использовал правильные смешанные буквы.

0 голосов
/ 24 июля 2014

Mac OS X?Остановись, пока ничего не переписывай ...

У меня была эта проблема пару раз на Маверикс.MySQL больше не включен, но моя установка по сути такая же, как вы ожидаете найти на Snow Leopard, я думаю, а не MAMP или что-то в этом роде.

После перехода с одного компьютера на другой у меня было этопроблема.Это было результатом того, что панель управления MySQL запустила mysqld, а не мой запуск в командной строке.(При миграции эта несколько устаревшая панель управления забывает, что вы сказали, что она НЕ запускается при загрузке.)

Посмотрите на процессы (top или монитор активности) в моей системе: если владелец является пользователем root, он был запущензапущен и не работает должным образом;правильный процесс будет иметь _mysql в качестве владельца.

Иногда у меня оба процесса работают бок о бок!

Как ни странно, вы можете делать все, включая использование mysql через командную строку.Однако, даже несмотря на то, что таблицы innodb перечислены, они генерируют ошибку «не существует» при запросе.

Похоже, это проблема владения, которая может применяться и в других системах.

0 голосов
/ 08 мая 2013

Я видел это в системе centos 6.4 с mysql 5.1 и файловой системой xfs.

Таблицы отображаются с «показом таблиц», но выбор или описание завершаются неудачно с сообщением «таблица не существует», как вы описали. Файлы там, где я их ожидаю.

Система работала нормально в течение нескольких месяцев, затем после перезапуска службы mysqld после изменения /etc/my.cnf, чтобы установить для table_cache значение 512 вместо 256, она пошла в сторону.

Согласно arcconf, контроллер рейда считает, что все в порядке. xfs_check не находит ничего. системный список событий IPMI понятен. dmesg показывает некоторые жалобы iptables на отслеживание соединений и отбрасывание пакетов, поэтому мы, возможно, были DOS'ами, но поскольку на сервере ничего не работает, я не понимаю, как это может повлиять на целостность данных mysql?

Я закончил тем, что продвинул ведомое устройство к управлению и перезагрузил систему, и теперь мне интересно, что могло вызвать ошибку, и если выбор xfs на centos 6.4 все еще остается стабильным выбором, или виновником был mysql 5.1.

О да, и никогда не меняйте работающую систему:)

0 голосов
/ 24 ноября 2010

Это может быть связано с объединением таблиц InnoDB и MyISAM.Если вы скопируете файлы базы данных, MyISAM будет в порядке, и InnoDB появится, но не сможет работать.

0 голосов
/ 23 ноября 2010

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

...