Kesalahan: Tablespace untuk tabel xxx sudah ada. Harap Buang tablespace sebelum IMPOR
Saya cukup baru dalam MySQL dan saya mendapatkan kesalahan yang cukup menarik yang tidak dapat saya temukan bantuannya melalui google dan pencarian stackoverflow.
Saya menjalankan server lokal MySQL 5.6.10 pada MacOS 10.8.3 dan mengelola database saya melalui Navicat essentials for MySQL.
Kesalahan yang saya dapatkan adalah setelah menjalankan dan mengelola database saya dengan baik selama beberapa hari/minggu, ada sesuatu yang memicu untuk (tampaknya tidak lengkap) menghapus beberapa tabel yang saya buat menggunakan kueri dari dalam Navicat.
Ketika saya mencoba menjalankan kueri menggunakan tabel-tabel ini, Navicat kemudian memperingatkan saya bahwa tabel tertentu tidak ada. Sejauh ini bagus - inilah bagian yang bagus:
Ketika saya mencoba untuk CREATE tabel, misalnya bernama "temp", yang sebelumnya ada, saya mendapatkan pesan kesalahan berikut:
Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.
Namun demikian, jika saya mencoba untuk men-drop tabel, atau mencoba membuang tablespace untuk tabel ini, menggunakan
DROP TABLE temp;
ALTER TABLE temp DISCARD TABLESPACE;
Saya mendapatkan pesan kesalahan berikut ini:
Error : Unknown table 'database.temp'
Error : Table 'database.temp' doesn't exist
Jadi itu berarti bahwa saya disarankan untuk membuang ruang tabel tetapi ketika saya mencoba melakukannya, tabel tersebut tidak ada. Apakah mungkin ada beberapa jenis sisa tabel ini di tempat yang berbeda di mana kueri DISCARD tidak diperiksa? Dan apakah ada yang punya ide apa yang bisa memicu semua itu - benar-benar secara acak seperti yang terlihat?
Seperti yang saya katakan, saya masih baru dalam hal ini dan cukup banyak yang tidak tahu apa-apa. Saya menduga bahwa mem-boot ulang laptop saya, yaitu mengatur ulang server MySQL lokal saya, atau mungkin hak izin pengguna mungkin ada hubungannya dengan hal itu, tetapi saya hanya berhipotesis di sini.
Sedikit terlambat di sini, tetapi umumnya saya telah melihat masalah ini terjadi ketika Anda mendapatkan ' tablespace penuh ' kesalahan saat berjalan dalam mode ' innodb_file_per_table '. Tanpa membahas terlalu banyak detail (lebih lanjut [di sini][1]), tablespace server database ditentukan oleh pengaturan innodb_data_file_file_path dan secara default agak kecil. Bahkan dibuat lebih besar, tablespace yang penuh masih dapat terjadi dengan query yang lebih besar dan semacamnya (banyak non-tabel yang tersimpan di sana, undo log, cache, dll...).
Bagaimanapun, saya menemukan bahwa jika Anda melihat di direktori OS di mana file-per-tabel disimpan, /var/lib/mysql secara default di OSX, /usr/local/var/mysql dengan iirc homebrew, Anda akan menemukan file tablename.ibd yatim piatu tanpa file tablename.frm pendamping normal. Jika Anda memindahkan file .ibd ke lokasi sementara yang aman (hanya untuk amannya saja) itu akan memperbaiki masalahnya.
Xampp dan Mamp Pengguna
Sama-sama memiliki kesalahan saat mengimpor database (setelah pengosongan itu) melalui MySQL. Saya menemukan bahwa saya memiliki
namatabel.ibd
file yang tersisa saat semua orang lain yang dihapus. Saya dihapus secara manual darimysql/data/database_name
dan kesalahan itu pergi.Untuk WAMP [Windows 7 Ultimate x64-bit] Pengguna:
Saya setuju dengan apa yang DangerDave kata dan jadi saya'm membuat jawaban yang tersedia untuk WAMP Pengguna.
Sekarang, anda'll melihat folder dari semua database anda
[Anda menyinggung MySQL table name].frm
, bukannya harus ada file[Anda menyinggung MySQL table name].ibd
[Anda menyinggung MySQL table name].ibd
Jika anda mendapatkan
.idb
diciptakan lagi setelah anda menghapusnya, kemudian membaca jawaban ini.Ini bagaimana hal itu bekerja dengan saya. Aku punya
.idb
file tanpa itu's sesuai.frm
dan setiap kali saya hapus.idb
file, database menciptakan itu lagi. dan saya menemukan solusi dalam satu baris di MySQL dokumentasi (Tablespace Tidak Ada bagian)Saya menyalin tabel yang lain
.frm
file dan nama itu seperti saya hilang meja, kemudian membuat normal drop table query dan voila, bekerja dan tabel turun biasanya!sistem saya adalah XAMPP pada windows MariaDB v 10.1.8
Dalam kasus saya hanya bekerja solusi:
bad_table
ENGINE=MyISAM ...bad_table
Ini adalah persis apa yang saya lakukan di mariadb 10.2.16 pada fedora ketika saya punya tabel yang menunjukkan persis sama kesalahan dalam log file yang saya kira...
jarak tempuh anda dan kesalahan dapat bervariasi, tapi yang utama saya asumsikan adalah
dengan drop table tidak bekerja serta alter table...
membuat tabel juga gagal seperti:
dalam rangka untuk memperbaiki kesalahan ini, apa yang saya lakukan pertama kali
kemudian di /var/lib/mysql/database_name direktori yang saya lakukan berikut sebagai root mengakui timpa innodb_table.ibd menyebabkan kita masalah
kemudian kembali di konsol mysql saya mengeluarkan berhasil menjatuhkan perintah pada kedua tabel
dan semuanya sekarang semua persegi dan saya bisa menciptakan satu meja...
Solusi
Namun, pilihan yang lebih mudah adalah: restart MySQL, kemudian lakukan empat langkah yang sama seperti berikut:
Dengan cara ini, id tablespace pada kamus data dan file cocok; dengan demikian, impor tablespace berhasil.
Hal ini dapat memberi Anda kepercayaan diri yang lebih besar dalam menangani beberapa InnoDB "gotcha's" selama proses pemulihan atau bahkan transfer file.
ref
Aku punya kesalahan yang sama berjalan pada wampserver saat mencoba untuk membuat tabel pengguna. Aku menemukan pengguna.ibd file dan setelah saya menghapus file ini, aku berlari bermigrasi perintah lagi dan itu berhasil. File pada mesin windows saya berada di wamp/bin/mysql/mysql5.6.12/data/myproject.
Dalam kasus saya:
Pertama menghapus
namatabel.ibd
di dalam direktori database dari Mysql dan menjalankan kedua:di Sini adalah solusi langkah-langkah:
Kesalahan ini terjadi bila anda menunda beberapa fungsi. Seperti menjalankan query di bawah ini dengan benar foreign key.
Menghapus/Memindahkan tablename.ibd yakin tidak bekerja untuk saya.
Bagaimana saya soal itu
Karena saya akan menghapus rusak dan tak ada meja, aku mengambil cadangan dari tabel lain dengan masuk ke phpmyadmin->database->ekspor->tabel yang dipilih untuk backup->ekspor(seperti .sql).
Setelah itu saya memilih database ikon di samping nama database dan kemudian menjatuhkannya. Buat sebuah database baru. Pilih database baru anda->impor-> Pilih file yang anda download tadi->klik impor. Sekarang saya telah lama saya di meja kerja dan meja rusak dihapus. Sekarang saya hanya membuat tabel yang melempar kesalahan.
Mungkin aku punya cadangan yang sebelumnya rusak meja.
Punya masalah ini beberapa kali. Jika anda memiliki besar DB dan ingin mencoba menghindari backup/restore (dengan menambahkan meja hilang), mencoba beberapa kali bolak-balik:
DROP TABLE my_table;
ALTER TABLE my_table MEMBUANG TABLESPACE;
-dan-
rm my_table.ibd (yatim piatu w/o yang sesuai my_table.frm) yang terletak di /var/lib/mysql/my_db/ direktori
-dan kemudian-
CREATE TABLE IF NOT EXISTS
my_table
(...)Jika anda memiliki sebuah server yang lain dengan versi yang baik dari tabel yang sama anda dapat membuat salinan(table_copy), transfer table_copy untuk masalah server. Kemudian menghapus masalah tabel dan mengubah nama table_copy ke meja.
Mencoba untuk melepaskan tablespace dapat memberikan Anda kesalahan lain. Bagi saya, saya mendapatkan kesalahan berikut:
Solusi saya adalah dengan menghapus basis data. Ini akan menghapus semua tablespace yang terkait dengannya dan memungkinkan Anda untuk membuat tabel lagi.
Punya masalah yang sama persis; aku'd menyeduh ditambahkan
mysql@5.6
(setelah sebelumnya mengalami 5.5).Minuman default untuk 5.6 adalah
innodb_file_per_table=1
sedangkan dalam 5.5 mereka'reinnodb_file_per_table=0
.Ada
ibdata1
file (gabungan innodb data) masih akan memiliki referensi untuk tabel anda're mencoba untuk membuat/drop. Baik perubahaninnodb_file_per_table
kembali ke 0, atau menghapus ibdata1 file data (ini akan kehilangan semua data anda, jadi pastikan anda mysqldump pertama kali atau sudah memiliki .sql dump).Lainnya minuman
mysql@5.6
default yang sedikit saya adalah kurangnya port, sehingga jaringan default ke soket unix, dan mysql klien terus pelaporan:Saya menambahkan
<string>--port=3306</string>
ke.plist
array, tapi anda juga bisa menentukanport=3306
andasaya.cnf
Menjalankan
minuman layanan berhenti mysql@5.6
membuat perubahan anda kemudianminuman jasa mulai mysql@5.6
Bagi saya itu membantu hanya pergi ke MYSQL DATA direktori di bawah /var/lib/mysql/{db_name} (linux) dan drop {table_name}.ibd file yang sama dengan nama folder.
Aku hanya menghapus tua saya DB terletak di localhost langsung dari wamp, Stop semua layanan, Pergi ke wamp/bin/mysql/mysql[versi]/data dan aku menemukan DB dengan problemas, saya menghapus dan mulai lagi wamp semua layanan, buat lagi database anda dan hal itu dilakukan, Sekarang anda dapat mengimpor tabel,
Cara yang saya temukan untuk "memecahkan" ini masalah yang cukup menjengkelkan, tapi ada script yang menangani itu.
Pada dasarnya, anda perlu
ibdata1
danib_logfile*
file untuk pergi (mengandung pemetaan kunci asing, antara lain). Satu-satunya safe cara untuk melakukan ini adalah untuk mengekspor database anda, stop mysql, menghapus file, mulai mysql, dan kemudian impor file.Script yang membantu memecahkan masalah ini adalah https://github.com/uberhacker/shrink-ibdata1 meskipun menyatakan tujuan dari script ini adalah berbeda, hal ini tidak memecahkan masalah.
Satu-satunya cara itu bekerja untuk saya adalah: