Mysql RDS с 3 миллионами записей не позволяет добавить новый столбец

0

Привет, У меня есть сервер базы данных mysql rds, и одна из моих таблиц имеет 3 million+ когда я пытаюсь добавить новый столбец, который он всегда терпит неудачу, и дает следующую ошибку

Запрос ALTER TABLE user_notifications ADD program_id int(11);

Ошибка Temporary file write failure ошибка Temporary file write failure.

Мой экземпляр RDS DB - db.t2.medium

Теги:
amazon-web-services
amazon-rds
ruby-on-rails-4

2 ответа

1

ALTER TABLE - это воссоздание таблицы, поэтому две копии таблицы будут существовать в системе на каком-то этапе процесса.

Таким образом, для этой операции вам потребуется свободное пространство больше, чем размер data length.

Вы можете проверить data length в таблице.

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

  • 1
    «ALTER TABLE - это пересоздание таблицы ... на некоторой стадии процесса». Не всегда верно MySQL 5.6+ поддерживает интерактивный DDL для таблиц InnoDB ( dev.mysql.com/doc/refman/5.6/en/… ) .. "Указание ALGORITHM = INPLACE заставляет операцию использовать метод на месте для предложений и механизмов хранения, которые ее поддерживают, и в противном случае завершается с ошибкой, что позволяет избежать длинного копирования таблицы, если вы попытаетесь изменить таблицу, которая использует другой механизм хранения чем вы ожидаете. "источник dev.mysql.com/doc/refman/5.7/en/alter-table.html
0

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

Я подозреваю, что таблица большая, поскольку у нее 3 миллиона записей, и на вашем диске недостаточно места

В этой статье показано, как определить, сколько дискового пространства используются таблицами

  • 0
    «MySQL заново создаст таблицу при использовании alter ... disk для другой копии таблицы». Не всегда верно MySQL 5.6+ поддерживает интерактивный DDL для таблиц InnoDB ( dev.mysql.com/doc/refman/5.6/en/… ) .. "Указание ALGORITHM = INPLACE заставляет операцию использовать метод на месте для предложений и механизмов хранения которые поддерживают его, и в противном случае выдают ошибку, что позволяет избежать длинной копии таблицы, если вы попытаетесь изменить таблицу, которая использует другой механизм хранения, чем вы ожидаете. "source dev.mysql.com/doc/refman/5.7/en/alter -table.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню