sql >> Database >  >> RDS >> Mysql

Fout:Tabelruimte voor tabel xxx bestaat. VERWIJDER de tabelruimte vóór het IMPORTEREN

Een beetje laat hier, maar over het algemeen heb ik dit probleem zien optreden wanneer je een 'tablespace full'-fout krijgt bij het uitvoeren in een 'innodb_file_per_table'-modus. Zonder al te veel in detail te treden (meer hier ), wordt de tabelruimte van de databaseserver gedefinieerd door de instelling innodb_data_file_path en is standaard vrij klein. Zelfs groter gemaakt, kan de 'tablespace full' nog steeds voorkomen bij grotere queries en dergelijke (veel niet-table 'dingen' worden daarin opgeslagen, ongedaan maken van logs, caches, enz...).

Hoe dan ook, ik ontdekte dat als je in de OS-directory kijkt waar de bestanden-per-tabel zijn opgeslagen, /var/lib/mysql standaard op OSX, /usr/local/var/mysql met homebrew iirc, je een verweesd bestand tablename.ibd zonder het normale begeleidende bestand tablename.frm. Als u dat .ibd-bestand naar een veilige tijdelijke locatie verplaatst (voor de zekerheid), zou dat het probleem moeten oplossen.

$ ls /var/lib/mysql

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

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

Een waarschuwing echter, zorg ervoor dat wat ooit het probleem oorspronkelijk veroorzaakt, b.v. langlopende query, vergrendelde tabel, enz... is gewist. Anders krijg je gewoon een ander verweesd .ibd-bestand als je het een tweede keer probeert.



  1. MySQL TRUNCATE TABLE begrijpen door praktische voorbeelden

  2. een efficiënte manier om te testen of een tabelrij bestaat

  3. Een databasemodel vanaf nul maken

  4. Wat is de standaardnaam van de beperking in MySQL?