Я довольно новичок в MySQL, и я получаю довольно интересную ошибку, из-за которой я не могу найти никакой помощи через Google и поиск в stackoverflow.
Я использую локальный сервер MySQL 5.6.10 на MacOS 10.8.3 и управляю своей базой данных с помощью Navicat Essentials для MySQL.
Ошибка, которую я получаю, заключается в том, что после запуска и управления моей базой данных в течение нескольких дней / недель все в порядке (что выглядит не полностью) приводит к удалению некоторых таблиц, которые я создал с помощью запросов из Navicat.
Когда я пытаюсь выполнить запросы с использованием этих таблиц, Navicat предупреждает меня, что конкретная таблица не существует. Пока все хорошо - вот хорошая часть:
Когда я пытаюсь СОЗДАТЬ таблицу, например с именем «temp», которая была там ранее, я получаю следующее сообщение об ошибке:
Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.
Тем не менее, если я попытаюсь отбросить таблицу или откажусь от табличного пространства для этой таблицы, используйте
DROP TABLE temp;
ALTER TABLE temp DISCARD TABLESPACE;
Я получаю следующие сообщения об ошибках:
Error : Unknown table 'database.temp'
Error : Table 'database.temp' doesn't exist
Это означает, что мне рекомендуется отказаться от табличного пространства, но когда я пытаюсь это сделать, таблица не существует. Возможно ли, что какой-то тип этой таблицы находится в другом месте, где запрос DISCARD не проверяется? И есть ли у кого-нибудь идея, что может вызвать все это - совершенно случайно, как кажется?
Как я уже сказал, я новичок в этой теме и почти ничего не знаю. Я подозреваю, что перезагрузка моего ноутбука, то есть перезагрузка моего локального сервера MySQL, или, возможно, права доступа пользователя могут иметь отношение к нему, но я просто предполагаю здесь.
источник
Ответы:
Немного поздно здесь, но обычно я видел, что эта проблема возникает, когда вы получаете ошибку 'tablespace full' при работе в режиме 'innodb_file_per_table'. Не вдаваясь в подробности (подробнее здесь ), табличное пространство сервера базы данных определяется параметром innodb_data_file_path и по умолчанию довольно мало. Даже увеличенный, «табличное пространство заполнено» может все еще встречаться с большими запросами и тому подобным (там хранится много «незаполненных» «вещей», отменяются журналы, кэши и т. Д.).
В любом случае, я обнаружил, что если вы посмотрите в каталог ОС, где хранятся файлы для каждой таблицы, / var / lib / mysql по умолчанию в OSX, / usr / local / var / mysql с homebrew iirc, вы найдете потерянный файл tablename.ibd без его обычного сопутствующего файла tablename.frm. Если вы переместите этот файл .ibd в безопасное временное место (просто для безопасности), это должно решить проблему.
Одно предостережение: убедитесь, что все, что изначально вызывало проблему, например, длительный запрос, заблокированная таблица и т. Д., Было очищено. В противном случае вы просто получите другой потерянный файл .ibd при повторной попытке.
источник
/usr/local/mysql/data
вместо/var/lib/mysql/
. В остальном прекрасно решил проблему.Пользователи Xampp и Mamp
Произошла та же ошибка при импорте базы данных (после ее очистки) через MySQL. Я обнаружил, что у меня остался
tablename.ibd
файл, а все остальные были удалены. Я удалил его вручную из,mysql/data/database_name
и ошибка исчезла.источник
Для пользователей WAMP [Windows 7 Ultimate x64-bit]:
Я согласен с тем, что сказал DangerDave, и поэтому я делаю ответ доступным для пользователей WAMP .
Теперь вы увидите папки всех ваших баз данных
[Your offending MySQL table name].frm
, вместо этого должен быть файл[Your offending MySQL table name].ibd
[Your offending MySQL table name].ibd
источник
Если
.idb
после удаления вы снова создадите заново, прочитайте этот ответ.Вот как это работает со мной. У меня был
.idb
файл без его соответствия,.frm
и всякий раз, когда я удаляю.idb
файл, база данных создает его заново. и я нашел решение в одной строке в документации MySQL (часть табличного пространства не существует )Я скопировал другой
.frm
файл таблицы и назвал его как мою отсутствующую таблицу, затем сделал обычный запрос удаления таблицы и вуаля, он работал, и таблица удалялась нормально!моя система XAMPP на окнах MariaDB v 10.1.8
источник
В моем случае единственным рабочим решением было:
bad_table
ENGINE = MyISAM ...bad_table
источник
Это именно то, что я сделал в mariadb 10.2.16 на fedora, когда у меня была таблица, которая показывала точно такие же ошибки в файле журнала, я полагаю ...
Ваш пробег и ошибки могут отличаться, но я предполагаю, что основной
с таблицей сброса не работает, а также изменить таблицу ...
создать таблицу также не удается так:
чтобы это исправить, сначала я сделал
затем в каталоге / var / lib / mysql / database_name я выполнил следующие действия в качестве пользователя root, подтвердив перезапись innodb_table.ibd, вызвавшую у нас проблемы
затем в консоли mysql я выполнил успешную команду удаления для обеих таблиц
и теперь все квадраты, и я могу воссоздать единый стол ...
источник
В моем случае:
Сначала удалите
tableName.ibd
в своей базе данных директорию из Mysql, а затем снова запустите:источник
Я получил ту же ошибку при запуске его на Wampserver при попытке создать таблицу пользователей. Я нашел файл users.ibd и после удаления этого файла снова запустил команду migrate, и она заработала. Файл на моей машине с Windows находился в папке wamp / bin / mysql / mysql5.6.12 / data / myproject.
источник
Решение
Однако более простой вариант заключается в следующем: перезапустите MySQL, затем выполните те же четыре шага, как указано ниже:
Таким образом, идентификатор табличного пространства в словаре данных и файл совпадают; таким образом, импорт табличного пространства завершился успешно.
Это может дать вам большую уверенность в работе с некоторыми "хитами" InnoDB во время процесса восстановления или даже передачи файлов.
ссылка
источник
Вот шаги решения:
источник
Имел эту проблему несколько раз. Если у вас большая БД и вы хотите избежать резервного копирования / восстановления (с добавленной отсутствующей таблицей), попробуйте несколько раз назад и вперед:
DROP TABLE my_table;
ALTER TABLE my_table DISCARD TABLESPACE;
-и-
rm my_table.ibd (сирота без соответствующего my_table.frm) находится в каталоге / var / lib / mysql / my_db /
-а потом-
СОЗДАЙТЕ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ
my_table
(...)источник
Удаление / перемещение tablename.ibd точно не работает для меня.
Как я это решил
Так как я собирался удалить поврежденную и несуществующую таблицу, я сделал резервную копию других таблиц, перейдя в phpmyadmin-> database-> export-> selected table в backup-> export (as .sql).
После этого я выбрал значок базы данных рядом с именем базы данных, а затем отбросил его. Создана новая база данных. Выберите вашу новую базу данных-> импорт-> выберите файл, который вы скачали ранее-> нажмите импорт. Теперь у меня есть старые рабочие таблицы и удаленная поврежденная таблица. Теперь я просто создаю таблицу, которая выдает ошибку.
Вероятно, у меня была более ранняя резервная копия поврежденной таблицы.
источник
Эта ошибка возникает при приостановке некоторых функций. Как и при выполнении запроса ниже с неправильным внешним ключом.
источник
Была точно такая же проблема; Я бы добавил варево
mysql@5.6
(после ранее 5,5).Значения по умолчанию для brew - 5.6,
innodb_file_per_table=1
а для 5.5 -innodb_file_per_table=0
.Ваш существующий
ibdata1
файл (объединенные данные innodb) по-прежнему будет содержать ссылки на таблицы, которые вы пытаетесь создать / удалить. Либо изменитеinnodb_file_per_table
обратно на 0, либо удалите файл данных ibdata1 ( это приведет к потере всех ваших данных, поэтому сначала убедитесь, что вы mysqldump, или у вас уже есть дамп .sql ).Вторым по
mysql@5.6
умолчанию brew, который меня поразил , было отсутствие порта, поэтому по умолчанию в сети использовались сокеты unix, и клиент mysql продолжал сообщать:Я добавил
<string>--port=3306</string>
в.plist
массив, но вы также можете указатьport=3306
в своемmy.cnf
Запустите
brew services stop mysql@5.6
внесите измененияbrew services start mysql@5.6
источник
Попытка отбросить табличное пространство может привести к другим ошибкам. Для меня я получил следующую ошибку:
Моим решением было сбросить базу данных. Это удалит все связанные с ним табличные пространства и позволит вам снова создавать таблицы.
источник
rm -r
. Это раздражает, но ни показывает.Если у вас есть другой сервер с хорошей версией той же таблицы, вы можете сделать копию (table_copy), перенести table_copy на проблемный сервер. Затем удалите проблемную таблицу и переименуйте table_copy в table.
источник
Для меня это помогло просто перейти в каталог MYSQL DATA в / var / lib / mysql / {db_name} (linux) и удалить файл {table_name} .ibd, который совпадает с именем папки.
источник
Я только удаляю свою старую БД, расположенную на моем локальном хосте, прямо из wamp, Остановка всех сервисов, Зайдите в wamp / bin / mysql / mysql [версия] / data, и я нашел БД с проблемами, я удаляю ее и снова запускаю wamp all services, создайте заново свою базу данных, и все готово, теперь вы можете импортировать ваши таблицы,
источник
Способ, который я нашел, чтобы «решить» эту проблему, довольно раздражает, но есть сценарий, который ее обрабатывает.
По сути, вам нужно
ibdata1
иib_logfile*
файлы , чтобы уйти (они содержат отображения внешних ключей, между прочим). Единственный безопасный способ сделать это - экспортировать все ваши базы данных, остановить mysql, удалить файлы, запустить mysql, а затем импортировать файлы.Сценарий, который помогает решить эту проблему, - https://github.com/uberhacker/shrink-ibdata1 , хотя заявленное назначение этого сценария иное, оно действительно решает проблему.
источник
Единственный способ, которым это работало для меня, было:
источник
Если у вас возникла эта проблема, и у вас нет другого варианта, поменяйте движок на любой другой движок, например «myisam», затем попытайтесь создать таблицу.
Отказ от ответственности: это неверный ответ, так как у вас могут быть ограничения внешнего ключа, которые не будут поддерживаться другим механизмом хранения. У каждого механизма хранения есть своя специализация для хранения и доступа к данным, эти моменты также должны быть приняты во внимание.
источник
Пожалуйста, УДАЛИТЕ табличное пространство перед ИМПОРТОМ
Я получил то же самое решение проблемы ниже
Сначала вы должны удалить имя вашей базы данных. если ваша база данных не удаляется, вы отправляете меня. Для системы Windows ваш каталог будет C: / xampp / mysql / data / yourdabasefolder удалить "yourdabasefolder"
Снова вы должны создать новую базу данных и импортировать старый файл sql. Это будет работа
Спасибо
источник
Я должен был найти мой каталог данных MySQL:
ПОКАЗАТЬ ПЕРЕМЕННЫЕ ГДЕ Variable_Name LIKE "% dir"
Затем принудительно удалите эту базу данных:
sudo rm -rf
источник
Вы можете запустить следующий запрос от имени пользователя root.
источник
Эй, разработчики не тратьте свое время. Просто удалите базу данных, содержащую таблицы, и снова импортируйте целые таблицы. Экономьте время = время это деньги. Приветствия.
источник