2009-06-18 4 views
12

Каким будет самый быстрый способ добавить новый столбец в большую таблицу mysql?Добавить новый столбец в большой таблице mysql

Столбец «Добавить столбец» создает копию полной таблицы, а затем заменяет старую новую таблицу create. Пока этот процесс запущен, исходная таблица читаема, но все вставки и обновления застопориваются.

На больших столах копия может занять много времени, есть ли способ уменьшить ее?

+0

Связанные вопрос: http://stackoverflow.com/questions/1645215/how-do-i-add-a-column-to-large-sql-server-table –

+1

Рассмотрим настройки innodb_log_file_size (Но будьте осторожны, см. http://www.mysqlperformanceblog.com/2011/07/09/how-to-change-innodb_log_file_size-safely/) и innodb_log_buffer_size. Для получения дополнительной информации см. Мой ответ здесь: http://stackoverflow.com/a/12688184/1148030 –

ответ

5

Вы застряли, выполняя ALTER TABLE. Лучшим способом эффективного решения этой проблемы является использование установки MASTER-MASTER.

Вы можете сначала изменить MASTER1 и просто использовать MASTER2 в процессе производства. Затем вы переключаетесь и делаете точную противоположность.

2

Не делайте этого вживую на активной системе. Для активной системы сделайте это, пока вы берете систему для регулярного обслуживания.

+0

Возможно сделать обновление в ведомом блоке, но есть ли какой-либо ручной способ воссоздать обновления на реальном ? двоичный журнал или что-то в этом роде. Ручной способ будет записывать каждую вставку или обновление и применять в том же порядке. – Maraino

1

Предполагая INNODB таблицу:

  1. Copy {Existing Table} до {новой таблицы} без данных (схема только)
  2. Используйте Alter таблицу команд, чтобы добавить/изменить столбцы на новую таблицу (должны работать в одно мгновение)
  3. MYSQLDUMP существующая таблица (с использованием одной транзакции, -no-drop-table и т. д.) в файл
  4. импортировать файл дампа в {New Table} (это может занять некоторое время, но старый стол еще в течение этого периода)
  5. d в течение периода обслуживания, DROP {Старый стол} и переименовать {Новая таблица} в предыдущую {Старую таблицу}.
Смежные вопросы