Почему нет таблиц, хотя они есть (mysql)?
Приветствую!
На сервере случилось крайне странное.
Таблицы есть, но таблиц нету О_о.
Т.е. SHOW TABLES; показывает,
а select * from tablename говорит, что нет такой таблицы.
mysqlcheck говорит следующее:
и так со всеми!
Что могло случиться (предполагаю повреждение фс т.к. сервер как раз ушёл в этот момент в даун) и главное — как починить?
P.S. бэкап данных есть, бэкапа структуры нет.
- Вопрос задан более трёх лет назад
- 1229 просмотров
- Вконтакте

Сделайте в консоли
show full tables
Вообще такая проблема была. Пользователю базы выдали права на подключение, но забыли дать права на sql-команды. Тогда и выходит такая штуковина, может быть оно?
Если пишете на php посмотрите внутри движка. Мб там есть миграции и можно их накатить что бы структуру вернуть.
mysql не выводит результат запроса, пишет, что такой таблицы не существует. Запрос: SELECT * FROM Сотрудники.
Проверил через phpmyadmin:
1. Mysql нормально работает с русскими названиями таблиц
2. Запрос нормально работает с русскими названиями таблиц не обрамленными апострофами.
В вашем случае, я думаю, возможна проблема с различием кодировок между клиентом и сервером.
Выполните запрос типа
SHOW TABLES;
если название вашей таблицы «Сотрудники» вернет «кракозяброй», то дело в кодировке и сервер просто не понимает к какой таблице вы делаете запрос.
PS Названия таблиц, столбцов лучше выполнять написанными на латинице, а в идеале написанными на англ. языке как предложил Юрий.
MySQL> Таблица не существует. Но это делает (или должно)
Я изменил datadir установки MySQL, и после нескольких шагов он работал нормально. Каждая базовая база была перемещена правильно, но одна.
Я могу подключиться и использовать базу данных, даже SHOW TABLES вернет мне все таблицы правильно и файлы каждой таблицы существуют в каталоге данных mysql. Но когда я пытаюсь выбрать что-то там, он говорит, что таблица не существует. Но таблица существует, она даже отображается в инструкции SHOW TABLES!
Моя догадка заключается в том, что SHOW TABLES перечисляет существование файлов так или иначе, что файлы повреждены или что-то в этом роде, но не проверяет. Поэтому я могу перечислить их, но не получить к ним доступ.
Но это просто предположение, я никогда не видел этого раньше. Невозможно перезапустить базу данных для тестирования, все остальные приложения, которые ее используют, работают нормально.
Кто-нибудь знает, что это такое?
33 ответа
На всякий случай все еще заботятся:
У меня была такая же проблема после копирования каталога базы данных напрямую с помощью команды
Если вы делаете это с помощью базы данных, которая использует таблицы InnoDB , вы получите эту сумасшедшую ошибку «таблица не существует», упомянутую выше.
Проблема в том, что вам нужны файлы ib* в корневом каталоге MySQL datadir (например, ibdata1 , ib_logfile0 и ib_logfile1 ).
Когда я скопировал те, это сработало для меня.
Для меня в Mac OS (MySQL DMG Installation) простой перезапуск сервера MySQL решил проблему. Я предполагаю, что гибернация вызвала это.
Эта ошибка также может возникать при настройке lower_case_table_names на 1 , а затем попытки доступа к таблицам, которые были созданы со значением по умолчанию для этой переменной. В этом случае вы можете вернуть его к предыдущему значению, и вы сможете прочитать таблицу.
Я получаю эту проблему, когда случай для имени таблицы, который я использую, отключен. Таким образом, таблица называется «db», но я использовал «DB» в select statement. Убедитесь, что корпус тот же.
- остановить MySQL
- резервная копия папки mysql: cp -a/var/lib/mysql/var/lib/mysql-backup
- скопировать папку базы данных со старой машины в /var/lib/mysql
- переопределить ib * (ib_logfile *, ibdata) из старой базы данных
- начать MySQL
- свалка базы данных
- mysqldump >dbase.mysql
- остановить службу MySQL
- удалить /var/lib/mysql
- переименуйте /var/lib/mysql-backup в /var/lib/mysql
- начать MySQL
- создать базу данных
- mysqldump < dbase.mysql
К сожалению, MySQL позволяет использовать символы unicode и non-printable в имени таблицы. Если вы создали свои таблицы, скопировав код с какого-либо документа/веб-сайта, есть вероятность, что он имеет нулевое пространство.
Я просто провел три дня на этом кошмаре. В идеале у вас должна быть резервная копия, которую вы можете восстановить, а затем просто опустите поврежденную таблицу. Подобные ошибки могут привести к тому, что ваш ibdata1 станет огромным (размер 100 ГБ + для скромных таблиц)
Если у вас нет недавней резервной копии, например, если вы полагались на mySqlDump, то ваши резервные копии, вероятно, в какой-то момент в прошлом проваливались. Вам нужно будет экспортировать базы данных, которые, конечно, вы не можете сделать, потому что при запуске mySqlDump вы получите ошибки блокировки.
Итак, в качестве обходного пути перейдите к /var/log/mysql/database_name/ и удалите имя_таблицы. *
Затем немедленно попытайтесь сбросить таблицу; это должно теперь работать. Теперь восстановите базу данных в новой базе данных и перестройте отсутствующие таблицы. Затем выгрузите разбитую базу данных.
В нашем случае мы также постоянно получали сообщения mysql has gone away через случайные интервалы во всех базах данных; как только поврежденная база данных была удалена, все стало нормальным.
SQL Management Studio не распознает существование таблицы после создания по сценарию
Поэтому, если я создаю новую таблицу в редакторе запросов в SQL Management Studio после обновления базы данных, я могу видеть эту таблицу и работать с ней. Однако, если я хочу запустить другой запрос, ссылаясь на эту таблицу из редактора запросов, он не пересчитывает эту таблицу. Я пробовал обновить на уровне БД и на уровне таблицы, но это не имеет значения. Однако, если я уйду из студии управления, то снова открою ее, и все будет в порядке.
Итак, я запускаю это, а затем запускаю это.
Это не говорит о том, что государств не существует. Также Штаты не отображаются в интеллигенции. Что мне делать с