Кто-нибудь знает, при каких условиях вы можете получить 1146: Table '<database>.<table>' doesn't exist
ошибки, когда ваша таблица действительно существует?
Я использую тот же код на 5 серверах, только тот, который я недавно арендовал, показывает эту ошибку, поэтому я подозреваю, что это могут быть настройки или установить какую-либо ошибку. Я могу выполнить свою инструкцию sql из командной строки. Я тоже, очевидно, вижу таблицу из командной строки. Я не получаю никаких ошибок при подключении (я использую mysqli, btw).
Любая помощь будет оценена по достоинству.
точный запрос:
$sql = "SELECT DISTINCT(mm_dic_word) AS word FROM spider.mm_dictionary WHERE mm_dic_deleted=0";
Это произошло со мной, и через некоторое время я нашел ответ на статью в блоге, и я хотел бы также добавить его здесь.
Если вы копируете каталог данных MySQL из /var/lib/mysql
в /path/to/new/dir
, но копируете только папки базы данных (т. wpdb
, wpdb
, wpdb
и т. Д.). И у вас есть таблицы 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 *.
Использование mysqlcheck было бы в порядке в этом случае – чтобы вы могли отказаться от проблем со столовой и устранить их, если они были найдены.
Может быть, ваш один сервер – это Linux-ящик? Mysql чувствителен к регистру на linux, но нечувствителен к окнам.
В принципе, я считаю, что проблема, с которой я столкнулась, связана с различием длины хэша паролей. В моем случае у меня появился новый сервер, на нем был полный дамп mysql, который также передавал пароли и информацию о пользователе. Новый сервер уже был инициализирован корневым пользователем с хэш-длиной 16char, но мой старый сервер использовал более новые 32 байта хэш-длины.
Мне пришлось зайти в my.conf, чтобы установить старые настройки паролей в 0 (другой разумный каждый раз, когда я пытался обновлять базу данных, новое обновление было 16 символов в длину). Затем я обновил все пароли, чтобы они были одинаковыми с помощью команды UPDATE mysql.user SET password=PASSWORD('password here');
, затем я сбросил привилегии.
Очевидно, что каждый пользователь с одним и тем же паролем – это действительно плохая идея, поэтому я поменял их один за другим после того, как подтвердил, что он работает.
Я набрал запись в блоге, которая входит в некоторые другие вещи, которые я сделал, которые здесь не работали, прежде чем я столкнулся с этим решением (на случай, если одна или несколько из этих изменений повлияли на мои результаты), однако я считаю, что выше решение будет полным … но я не пытался воспроизвести ошибку, поэтому я не могу быть на 100% уверен.
Я имел такое поведение однажды. Позже я обнаружил, что драйвер JDBC, который я использовал, изменил мой запрос на нижний регистр, поэтому я не смог связаться с моей базой данных (с использованием смешанных букв), хотя мой код использовал правильные смешанные буквы.
Если вы вошли в систему как человек, у которого нет разрешения на просмотр этой базы данных / таблицы, вы, вероятно, получите этот результат. Вы используете тот же логин в командной строке, что и в mysqli?
Это может быть связано с объединением таблиц InnoDB и MyISAM. Если вы скопируете файлы базы данных, MyISAM будет в порядке, и InnoDB появится, но не сработает.
Я видел это в системе centos 6.4 с mysql 5.1 и файловой системой xfs.
Таблицы показывают «show tables», но выбор или описание не выполняется с табличным отсутствующим сообщением, как вы описали. Файлы там, где я их ожидаю.
Система работала отлично в течение нескольких месяцев, а затем после перезагрузки службы mysqld после изменения /etc/my.cnf, чтобы установить table_cache на 512 вместо 256, она пошла вбок.
Согласно arcconf, контроллер рейда считает, что все в порядке. xfs_check ничего не находит. системный список событий IPMI понятен. dmesg показывает некоторые жалобы iptables на отслеживание соединений и удаление пакетов, поэтому мы, возможно, были DOS'd, но поскольку на сервере нет ничего действительно запущенного снаружи, я не вижу, как это может повлиять на целостность данных mysql?
Я закончил тем, что продвигал рабочую станцию для освоения и перезагрузки системы, и теперь мне интересно, что могло вызвать ошибку, и если выбор xfs на centos 6.4 по-прежнему является стабильным выбором, или если виновником был mysql 5.1.
О да, и никогда не меняйте запущенную систему 🙂
Mac OS X? ОСТАНОВИТЕ, не возвращайте ничего еще …
У меня была эта проблема пару раз на Маверикс. MySQL больше не включается, но моя установка по существу такая же, как и то, что вы ожидаете найти на Snow Leopard, я думаю, а не MAMP или что-то в этом роде.
После миграции с одного компьютера на другой у меня возникла эта проблема. Это было результатом того, что панель управления MySQL запускает mysqld, а не запускает ее в командной строке. (При переносе эта несколько устаревшая панель управления забывает, что вы сказали ей НЕ запускать при загрузке.)
Посмотрите на процессы (верхний или монитор активности) в моей системе: если владелец root, он был запущен и не работает должным образом; правильный процесс будет иметь _mysql как владельца.
Иногда у меня есть оба процесса, работающие бок о бок!
Как ни странно, вы можете сделать все, включая использование mysql через командную строку. Однако, несмотря на то, что перечислены таблицы innodb, они генерируют ошибку при отсутствии запросов.
Это, похоже, проблема собственности, которая может применяться и к другим системам.