Ошибка: табличное пространство для таблицы xxx существует. Пожалуйста, УДАЛИТЕ табличное пространство перед ИМПОРТОМ

Я довольно новичок в 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, или, возможно, права доступа пользователя могут быть связаны с ним, но я просто выдвигаю гипотезу здесь.

95 голосов | спросил MattMirabilis 29 MaramFri, 29 Mar 2013 03:49:53 +04002013-03-29T03:49:53+04:0003 2013, 03:49:53

20 ответов


0

Здесь я немного опоздал, но обычно я видел эту проблему, когда вы получаете сообщение об ошибке «заполнено табличное пространство» при работе в режиме «innodb_file_per_table». Не вдаваясь в подробности (подробнее здесь ), табличное пространство сервера базы данных определяется параметром innodb_data_file_path и по умолчанию довольно мало. Даже увеличенный, «табличное пространство заполнено» может все еще встречаться с большими запросами и тому подобным (там хранится много «незаполненного» материала, отменяются журналы, кэши и т. Д.).

В любом случае, я обнаружил, что если вы посмотрите в каталог ОС, в котором хранятся файлы для каждой таблицы, /var /lib /mysql по умолчанию для OSX, /usr /local /var /mysql с homebrew iirc, вы ' Я найду осиротевший файл tablename.ibd без его обычного сопутствующего файла tablename.frm. Если вы переместите этот файл .ibd в безопасное временное место (просто для безопасности), это должно решить проблему.

$ ls /var/lib/mysql

table1.frm
table1.idb
table2.frm
table2.ibd
table3.idb <- problem table, no table3.frm
table4.frm
table4.idb

$ mkdir /tmp/mysql_orphans
$ mv /var/lib/mysql/table3.ibd /tmp/mysql_orphans/

Одно предостережение: убедитесь, что изначально вызывало проблему, например, долго выполняющийся запрос, заблокированная таблица и т. д ... были очищены. В противном случае вы просто получите другой потерянный файл .ibd при повторной попытке.

ответил DangerDave 11 FebruaryEurope/MoscowbTue, 11 Feb 2014 06:47:48 +0400000000amTue, 11 Feb 2014 06:47:48 +040014 2014, 06:47:48
0

Пользователи Xampp и Mamp

Произошла та же ошибка при импорте базы данных (после ее очистки) через MySQL. Я обнаружил, что у меня есть файл tablename.ibd, а все остальные были удалены. Я удалил его вручную из mysql/data/database_name, и ошибка исчезла.

ответил Technotronic 8 J0000006Europe/Moscow 2014, 19:59:22
0

Если после удаления вы снова создадите .idb, прочитайте этот ответ.

Вот как это работает со мной. У меня был файл .idb без соответствующего ему .frm и всякий раз, когда я удаляю файл .idb, база данных снова создает его. и я нашел решение в одной строке в mysql документации (часть табличного пространства не существует )

  
    

1- Создайте соответствующий файл .frm в каком-либо другом каталоге базы данных и скопируйте его в каталог базы данных, где находится бесхозная таблица.

         

2- Выпустите DROP TABLE для исходной таблицы. Это должно успешно удалить таблицу, и InnoDB должен напечатать предупреждение в журнал ошибок об отсутствии файла .ibd.

  

Я скопировал другой файл .frm и назвал его как мою отсутствующую таблицу, а затем сделал обычный запрос удаления таблицы. и воалла это сработало и стол опустился нормально!

моя система - xampp в windows MariaDB v 10.1.8

ответил Accountant م 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 23 Sep 2016 05:30:37 +0300 2016, 05:30:37
0

В моем случае единственным рабочим решением было:

  1. CREATE TABLE bad_table ENGINE = MyISAM ...
  2. rm bad_table.ibd
  3. DROP TABLE bad_table
ответил Andrey Radomanov 12 MarpmMon, 12 Mar 2018 17:58:49 +03002018-03-12T17:58:49+03:0005 2018, 17:58:49
0

Решение

Однако, более простой вариант заключается в следующем: перезапустите mysql, затем выполните те же четыре шага, которые перечислены в начале сообщения. Таким образом, идентификатор табличного пространства в словаре данных и файл совпадают; таким образом, импорт табличного пространства завершился успешно.

Это может дать вам большую уверенность в работе с некоторыми "хитростями" InnoDB в процессе восстановления или даже при передаче файлов.

ref

ответил Bhavin Rana 15 AMpMon, 15 Apr 2013 10:27:40 +040027Monday 2013, 10:27:40
0

Я получил ту же ошибку при запуске на wampserver при попытке создать таблицу пользователей. Я нашел файл users.ibd и после удаления этого файла снова запустил команду migrate, и она заработала. Файл на моем компьютере с Windows находился в папке wamp /bin /mysql /mysql5.6.12 /data /myproject.

ответил morgan 24 AMpThu, 24 Apr 2014 01:04:19 +040004Thursday 2014, 01:04:19
0

Удаление /перемещение tablename.ibd точно не сработало для меня.

Как я решил это

Поскольку я собирался удалить поврежденную и несуществующую таблицу, я сделал резервную копию других таблиц, перейдя в phpmyadmin-> database-> export-> gt; отобранные таблицы для резервного копирования-> экспорта (as. SQL).

После этого я выбрал значок базы данных рядом с именем базы данных, а затем отбросил его. Создана новая база данных. Выберите новую базу данных -> import-> Выберите файл, который вы скачали ранее -> нажмите «Импорт». Теперь у меня есть старые рабочие таблицы и удаленная поврежденная таблица. Теперь я просто создаю таблицу, которая выдавала ошибку.

Вероятно, у меня была более ранняя резервная копия поврежденной таблицы.

ответил Rust 17 +03002015-10-17T12:56:49+03:00312015bEurope/MoscowSat, 17 Oct 2015 12:56:49 +0300 2015, 12:56:49
0

Эта ошибка возникает при приостановке некоторых функций. Как запуск запроса ниже с неправильным внешним ключом.

set foreign_key_checks=0
ответил zeddarn 21 Jam1000000amThu, 21 Jan 2016 08:05:00 +030016 2016, 08:05:00
0

Попытка отбросить табличное пространство может привести к другим ошибкам. Для меня я получил следующую ошибку:

DROP TABLESPACE `tablename`

Error Code: 1478. Table storage engine 'InnoDB' does not support the create option 'TABLESPACE or LOGFILE GROUP' 

Моим решением было удалить базу данных. Это удалит все связанные с ним табличные пространства и позволит вам снова создавать таблицы.

ответил Aris 18 J0000006Europe/Moscow 2013, 08:43:33
0

Если у вас есть другой сервер с хорошей версией той же таблицы, вы можете сделать копию (table_copy), перенести table_copy на проблемный сервер. Затем удалите проблемную таблицу и переименуйте table_copy в table.

ответил user3524152 11 PMpFri, 11 Apr 2014 18:29:22 +040029Friday 2014, 18:29:22
0

Вот шаги решения:

  1. сделайте резервную копию вашей базы данных (структура с опцией drop и данными)
  2. остановить службу двигателя MySQL
  3. удалите каталог базы данных вручную из mysql /data
  4. запустить движок mysql
  5. создайте новую базу данных с любым именем, отличным от вашей поврежденной базы данных
  6. создайте одну таблицу с именем поврежденной таблицы внутри новой базы данных (это секрет). и лучше создать таблицу с точно такой же структурой.
  7. переименуйте базу данных в старую поврежденную базу данных
  8. восстановите резервную копию, и ваша таблица будет работать нормально.
ответил Mahmoud Rabea 17 22015vEurope/Moscow11bEurope/MoscowTue, 17 Nov 2015 20:31:44 +0300 2015, 20:31:44
0

Это именно то, что я сделал в mariadb 10.2.16 на fedora, когда у меня была таблица, в которой были показаны те же самые ошибки в файле журнала, я полагаю ...

2018-07-11  9:43:58 140323764213504 [Note] InnoDB: The file './database_name/innodb_table.ibd' already exists though the corresponding table did not exist in the InnoDB data dictionary. You can resolve the problem by removing the file.
2018-07-11  9:44:29 140323764213504 [Warning] InnoDB: Tablespace 'database_name/innodb_table' exists in the cache with id 2836 != 2918

пробег и ошибки могут отличаться, но я предполагаю, что основным является

...already exists though the corresponding table did not exist in the InnoDB data dictionary...

с удаленной таблицей не так хорошо, как с измененной таблицей ...

MariaDB [database_name]> drop table innodb_table;
ERROR 1051 (42S02): Unknown table 'database_name.innodb_table'

MariaDB [database_name]> alter table innodb_table discard tablespace;
ERROR 1146 (42S02): Table 'database_name.innodb_table' doesn't exist

создать таблицу также не удается так:

MariaDB [database_name]> create table  innodb_table(`id` int(10) unsigned NOT NULL);
ERROR 1813 (HY000): Tablespace for table '`database_name`.`innodb_table`' exists. Please DISCARD the tablespace before IMPORT

чтобы исправить это, сначала я сделал

create table  innodb_table2(`id` int(10) unsigned NOT NULL);
Query OK, 0 rows affected (0.07 sec)

затем в каталоге /var /lib /mysql /database_name я выполнил следующие действия в качестве пользователя root, подтвердив перезапись innodb_table.ibd, вызвавшую проблемы

cp innodb_table2.frm innodb_table.frm
cp innodb_table2.ibd innodb_table.ibd
chown mysql:mysql innodb_table.frm innodb_table.ibd
chmod 660 innodb_table.frm innodb_table.ibd
systemctl restart mariadb

затем в консоли mysql я выполнил успешную команду удаления для обеих таблиц

MariaDB [database_name]> drop table innodb_table;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    8
Current database: database_name

Query OK, 0 rows affected (0.08 sec)

MariaDB [database_name]> drop table innodb_table2;
Query OK, 0 rows affected (0.25 sec)

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

MariaDB [database_name]> create table  innodb_table (`id` int(10) unsigned NOT NULL);
Query OK, 0 rows affected (0.08 sec)
ответил Chris 11 J000000Wednesday18 2018, 18:18:14
0

Была эта проблема несколько раз. Если у вас большая БД и вы хотите избежать резервного копирования /восстановления (с добавленной отсутствующей таблицей), попробуйте несколько раз взад и вперед:

DROP TABLE my_table;

ALTER TABLE my_table DISCARD TABLESPACE;

й -

rm my_table.ibd (сирота без соответствующего my_table.frm), расположенная в каталоге /var /lib /mysql /my_db /

-и потом -

СОЗДАЙТЕ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ my_table (...)

ответил Nerko 12 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 12 Sep 2015 19:42:24 +0300 2015, 19:42:24
0

Я только удаляю свою старую БД, расположенную на моем локальном хосте, прямо из wamp, Остановка всех сервисов, Перехожу на wamp /bin /mysql /mysql [версия] /data, и я нашла БД с проблемами, я удаляю ее и запускаю снова все сервисы, создайте заново свою базу данных и все готово, теперь вы можете импортировать ваши таблицы,

ответил XMaster 3 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 03 Sep 2016 10:54:00 +0300 2016, 10:54:00
0

Способ, который я нашел для «решения» этой проблемы, довольно раздражает, но есть сценарий, который ее обрабатывает.

По сути, вам нужны ibdata1 и ib_logfile* файлы, которые нужно удалить (среди прочего, они содержат сопоставления внешних ключей). Единственный безопасный способ сделать это - экспортировать все базы данных, остановить mysql, удалить файлы, запустить mysql, а затем импортировать файлы.

Сценарий, который помогает решить эту проблему, - https://github.com/uberhacker/shrink-ibdata1. , хотя заявленная цель этого скрипта иная, он действительно решает проблему.

ответил Glen Solsberry 25 PMpWed, 25 Apr 2018 20:44:04 +030044Wednesday 2018, 20:44:04
0

Пожалуйста, ОТМЕНИТЕ табличное пространство перед ИМПОРТОМ

Я получил то же решение проблемы ниже

  1. Сначала вы должны удалить имя вашей базы данных. если ваша база данных не удаляется, вы отправляете меня. Для системы Windows ваш каталог будет C: /xampp /mysql /data /yourdabasefolder удалить "yourdabasefolder"

  2. Опять же, вам нужно создать новую базу данных и импортировать старый файл sql. Это будет работа

Спасибо

ответил F5 Buddy 15 J0000006Europe/Moscow 2018, 09:14:29
0

Была точно такая же проблема; Я бы заварил добавил [email protected] (после того, как ранее было 5,5).

Параметры по умолчанию для 5.6: innodb_file_per_table=1, тогда как в 5.5 они innodb_file_per_table=0.

Ваш существующий файл ibdata1 (объединенные данные innodb) будет по-прежнему содержать ссылки на таблицы, которые вы пытаетесь создать /удалить. Измените innodb_file_per_table на 0 или удалите файл данных ibdata1 ( это приведет к потере всех ваших данных, поэтому убедитесь, что вы Сначала mysqldump или уже есть .sql dump ).

Другим brew [email protected] по умолчанию, который меня поразил, было отсутствие порта, поэтому по умолчанию в сети использовались сокеты Unix и mysql клиент продолжал сообщать:

ERROR 2013 (HY000): Lost connection to MySQL server at 'sending authentication information', system error: 32

Я добавил <string>--port=3306</string> в .plist массив, но вы также можете указать port=3306 в своем my.cnf

Запустите brew services stop [email protected], затем внесите изменения brew services start [email protected]

ответил jaygooby 23 PM00000040000004031 2018, 16:41:40
0

Мне нужно было найти каталог с данными MySQL:

ПОКАЗАТЬ ПЕРЕМЕННЫЕ ГДЕ Variable_Name LIKE "% dir"

Затем принудительно удалите эту базу данных.

sudo rm -rf

ответил GarethReid 13 22018vEurope/Moscow11bEurope/MoscowTue, 13 Nov 2018 07:03:09 +0300 2018, 07:03:09
0

Для меня это помогло просто перейти в каталог MYSQL DATA в /var /lib /mysql /{db_name} (linux) и удалить файл {table_name} .ibd совпадает с именем папки.

ответил Yura Galavay 4 TueEurope/Moscow2018-12-04T14:32:57+03:00Europe/Moscow12bEurope/MoscowTue, 04 Dec 2018 14:32:57 +0300 2018, 14:32:57
0

если у вас возникла эта проблема, и у вас нет другого варианта, поменяйте движок на любой другой движок, например «myisam», затем попытайтесь создать таблицу.

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

ответил Ankit Vishwakarma 6 +03002016-10-06T08:46:17+03:00312016bEurope/MoscowThu, 06 Oct 2016 08:46:17 +0300 2016, 08:46:17

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132