sql >> Database teknologi >  >> RDS >> Mysql

FEJL 1878 (HY000):Midlertidig filskrivningsfejl

MySQL implementerer ALTER TABLE som en tabelgendannelse, så to kopier af tabellen findes på systemet på et tidspunkt i processen. Du skal bruge over 12 GB ledig plads til denne handling.

Frigør lidt plads. Alternativt kan du indstille din server til at bruge en anden midlertidig mappe , hvor der er plads nok.

Alternativ til alternativet (WHILE skal muligvis pakkes ind i en lagret procedure):

  • opret en ny tabel (temp_table ) med den nye struktur
  • overfør data i små batches fra original_table ind i temp_table
  • slip original_table og omdøb temp_table


-- useful only if concurrent access is allowed during migration LOCK TABLES original_table WRITE, temp_table WRITE; SELECT COUNT(*) INTO @anythingleft FROM original_table; WHILE @anythingleft DO -- transfer data INSERT INTO temp_table SELECT original_table.old_stuff, "new stuff" FROM original_table ORDER BY any_sortable_column_with_unique_constraint -- very important! LIMIT 1000; -- batch size, adjust to your situation DELETE FROM original_table ORDER BY any_sortable_column_with_unique_constraint LIMIT 1000; -- ORDER BY and LIMIT clauses MUST be exactly the same as above SELECT COUNT(*) INTO @anythingleft FROM original_table; END WHILE; -- delete, rename DROP TABLE original_table; UNLOCK TABLES; RENAME TABLE old_table TO original_table;

Hvis din tabel bruger InnoDB, er en mere omfattende løsning mulig med SELECT ... FOR UPDATE; i stedet for bordlåse, men jeg stoler på, at du forstår ideen.



  1. Spring batch med kolonnealias som sorteringsnøgle - forkert udformet hvor-erklæring

  2. Sådan indstilles en timeout for MySQL-forespørgsel ved hjælp af C API

  3. JDBC-parameter verifyServerCertificate=false forbinder uden behov for et klientnøglelager og truststore

  4. Sammenlign eksekveringsplaner i SQL Server