Преобразование большого MyISAM в InnoDB - PullRequest
3 голосов
/ 25 августа 2011

Я пытаюсь преобразовать таблицу MySQL MySQL из 10 миллионов строк в InnoDB.
Я попробовал ALTER TABLE, но мой сервер застрял, и я убил mysql вручную. Каков рекомендуемый способ сделать это?

Опции, о которых я думал:
1. Создание новой таблицы InnoDB и вставка частей данных каждый раз.
2. Сброс таблицы в текстовый файл и выполнение LOAD FILE
3. Попробуйте еще раз и просто не отвечайте серверу, пока он не завершит работу (я пробовал 2 часа, и сервер является рабочим, поэтому я предпочитаю, чтобы он работал)
4. Дублирование таблицы, удаление ее индексов, затем преобразование, а затем добавление индексов

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Смена механизма таблицы требует переписывания таблицы, и поэтому таблица недоступна так долго.Удаление индексов, затем преобразование и добавление индексов может ускорить первоначальное преобразование, но добавление индекса создает блокировку чтения для вашей таблицы, поэтому в итоге эффект будет таким же.Создание новой таблицы и передача данных - путь.Обычно это делается в 2 этапа - сначала скопируйте записи, а затем воспроизведите любые изменения, которые были сделаны при копировании записей.Если вы можете позволить себе отключить вставки / обновления в таблице, оставляя чтения, это не проблема.Если нет, есть несколько возможных решений.Одним из них является использование инструмента для изменения схемы в Facebook.Другой вариант - настроить приложение на запись в обе таблицы при переносе записей, а не переключаться только на новую запись.Это зависит от кода приложения, и важной частью является обработка уникальных ключей / дубликатов, так как в старой таблице вы можете обновить запись, а в новой - вставить ее.(здесь уровень изоляции транзакций также может играть решающую роль, снизьте его как можно больше).«Классическим» способом является использование репликации, которая, насколько я знаю, также выполняется в 2 части - вы запускаете репликацию, записываете позицию мастера, затем импортируете дамп базы данных на второй сервер, затем запускаете его в качестве подчиненного устройства.Догнать изменения.

0 голосов
/ 25 августа 2011

Пытались ли вы сначала заказать ваши данные в ПК?Например:

ALTER TABLE tablename ORDER BY PK_column;

должно ускорить преобразование.

...