ALTER TABLE DROP COLUMN - статус сервера «Остановлен» - PullRequest
0 голосов
/ 14 октября 2019

Я нахожусь в процессе удаления 4 столбцов из моей таблицы (MySQL / innodb),

простой код,

ALTER TABLE database_name.table_name
DROP COLUMN A,
DROP COLUMN B,
DROP COLUMN C,
DROP COLUMN D;

Он работает уже почти 20 часов. Это большая таблица 30 ГБ / 8560000 строк, большая для моего опыта, локальный экземпляр на старом настольном компьютере.

Когда я проверяю состояние сервера на панели администрирования, он говорит мне, что сервер имеет«Остановлено». Однако в окне «Действие / Respose» в нижней части окна «Запрос» в этой строке отображается «Выполняется ...», а значок означает ожидаемую анимацию вращения / мышления.

Существует около 4 КБ / с трафика, нонет чтения или записи, использование InnoBuffer составляет 99,9%, что должно быть около 30 ГБ, ЦП находится между 1,5 и 2.

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

Мне просто интересно, что именно происходит? Это «нормально», и я просто должен быть терпеливым?

1 Ответ

1 голос
/ 16 октября 2019

Лучший способ отбросить несколько столбцов в большой (для моей машины) базе данных MySQL, которую я обнаружил, - это создать новую таблицу, исключив столбец, который я пытался удалить.

Таблица измененияКоманда заняла несколько дней, прежде чем повесить трубку / разорвать связь с моим БД. Используя код, подобный следующему, я смог достичь того, что мне нужно, чуть более чем за два часа.

CREATE TABLE new_table_name AS
    SELECT column_E,column_F,column_G
    FROM old_table_name;

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

...