MySQL ALTER TABLE для таблиц, слишком больших для дублирования - PullRequest
8 голосов
/ 06 января 2012

При добавлении столбца в таблицу MyISAM MySQL создаст> Копировать> Удалить> Переименовать. У меня есть таблица, которая достаточно велика, чтобы ее нельзя было скопировать в оставшееся свободное место на сервере. Попытка добавить столбец приводит к заполнению диска. Время здесь не проблема, не доступность таблиц, только место на диске.

Если не копировать данные на другой сервер, урезать, изменять и копировать их, есть ли способ добавить столбец в таблицу MyISAM без создания временной таблицы и дублирования всех данных?

Ответы [ 2 ]

3 голосов
/ 06 января 2012

Вы можете создать новую пустую таблицу, вручную переместить данные по частям (ВСТАВИТЬ в новую, УДАЛИТЬ из старой на определенное количество строк), удалить старую таблицу и переименовать новую таблицу. По сути, то, что делает MySQL, но перемещает данные вместо того, чтобы копировать их, что должно позволить вам использовать меньше места.

1 голос
/ 06 января 2012

В общем, я стараюсь оставить достаточно свободного места, чтобы иметь возможность восстановить мою самую большую таблицу. Это позволяет мне запускать OPTIMIZE TABLE или ALTER TABLE при необходимости.

У вас есть другой диск, установленный на вашем сервере?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...