Mysql
 sql >> база данни >  >> RDS >> Mysql

ГРЕШКА 1878 (HY000):Неуспешно записване на временен файл

MySQL прилага ALTER TABLE като повторно създаване на таблица, така че две копия на таблицата съществуват в системата на някакъв етап от процеса. За тази операция ще ви трябват над 12 GB свободно пространство.

Освободете малко място. Като алтернатива, настройте сървъра си да използва различна временна директория , където има достатъчно място.

Алтернатива на алтернативата (WHILE може да се наложи да бъде обвит в съхранена процедура):

  • създайте нова таблица (temp_table ) с новата структура
  • прехвърляне на данни на малки партиди от original_table в temp_table
  • пуснете original_table и преименувайте 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;

Ако вашата таблица използва InnoDB, по-сложно решение е възможно с SELECT ... FOR UPDATE; вместо ключалки за маса, но вярвам, че разбирате идеята.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не мога да инсталирам mysql2 gem на macOS Sierra

  2. Mysql инструкция за вмъкване и избор на няколко реда с last_insert_id()

  3. Какво не е наред с тази съхранена процедура?

  4. Добавете колона с номериран списък към върната MySQL заявка

  5. Преобразуване на въглеродна дата в mysql timestamp.