it-swarm.com.ru

MySQL Table не существует ошибка, но она существует

Кто-нибудь знает, при каких условиях вы можете получить ошибку 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";
19
Troy Knapp

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

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

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

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

2
Troy Knapp

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

Если вы копируете каталог данных MySQL из /var/lib/mysql в /path/to/new/dir, но копируете только папки базы данных (т.е. mysql, wpdb, ecommerce и т.д.) И у вас есть таблицы innodb, ваши таблицы innodb будут отображаться в «show tables», но запрашивать их (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 *.

44
Isaac

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

4
David Ramirez

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

2
Jan Thomä

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

1
Ray

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

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

1
Allan Zeidler

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

0
mveerman

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

0
gdelfino

Я видел это в системе 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
Michael Will

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

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

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

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

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

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

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

0
Phreditor