Перемещение таблиц MySQL и данных из механизма хранения MyISAM в InnoDB

Этот вопрос, вероятно, предназначен для экспертов и администраторов MySQL, которые раньше выполняли такой переход.

У меня есть 17 таблиц MySQL, триггеров и хранимых процедур на механизме хранения MyISAM. Эти таблицы содержат около 8 МБ данных вместе. Поскольку я перемещаю приложение и базу данных в Amazon EC2 и RDS, мне было интересно, каковы основные соображения при переносе таблиц из MyISAM в InnoDB.

Шаги, которые я буду выполнять, в основном сводятся к следующему.

  1. Системные таблицы на AWS RDS должны быть на MyISAM, поэтому никаких соревнований по этому поводу.
  2. Создайте 17 таблиц с такой же структурой, как они существуют в MyISAM, и постройте их в RDS InnoDB.
  3. Экспортируйте данные из таблиц MyISAM и импортируйте их в новые таблицы, созданные в RDS на InnoDB.
  4. Создайте триггеры, хранимые процедуры и функции в базе данных InnoDB.

Когда я спрашиваю о ключевых аспектах миграции, подобной этой, между механизмами хранения MySQL, я хочу знать с точки зрения опытных администраторов, нужно ли явно позаботиться о чем-то на уровне БД во время миграции данных и т. Д., Чтобы БД вела себя так и надо и глюков нет. Меня беспокоит в основном то, что я читал, что способы буферизации, ввода-вывода, использования ЦП и памяти в InnoDB и MyISAM различны.

Я с радостью приму ваши 2 цента на этот процесс.

Спасибо.

* Обновить *

innodb_buffer_pool_size - {DBInstanceClassMemory * 3/4} Это то, что сейчас установлено.

Я ищу и другие параметры. Сообщите мне, если вы хотите увидеть значения, установленные для каких-либо других конкретных параметров.


person Aakash    schedule 02.06.2011    source источник


Ответы (3)


Между MyISAM и InnoDB есть много различий, но основные моменты, о которых вам следует знать перед миграцией., 1. Резервное копирование данных не может быть выполнено простым копированием файлов, как в MyISAM 2. InnoDB не работает оптимизированным образом при запуске с параметрами по умолчанию вам нужно будет настроить и настроить в соответствии с вашими потребностями. 3. InnoDB не имеет сжатых индексов, таких как MyISAM, поэтому он займет больше места. 4. InnoDB автоматически добавляет столбцы первичного ключа к вторичным ключам. поэтому убедитесь, что столбцы первичного ключа не большие.,

Кроме того, миграция должна быть простой. 1. Создайте таблицы со структурой, аналогичной MyISAM, но только с измененным движком на InnoDB. 2. Выгрузите данные из таблицы MyISAM. 3. Импортируйте данные в порядке первичных ключей в движке InnoDB, заключив импорт между START TRANSACTION и COMMIT., Это самый быстрый способ загрузки данных. 4. Создайте хранимые процедуры и триггер.,. но они не имеют ничего общего с механизмом хранения.

Вы можете сообщить мне, если вам понадобится помощь с конфигурацией InnoDB.

person ovais.tariq    schedule 03.06.2011
comment
Каковы ваши рекомендуемые параметры InnoDB или значения конфигурации, которые следует установить в RDS, чтобы повысить его производительность? благодаря. я следую по шагам. - person Aakash; 03.06.2011

Если вы хотите преобразовать текущие таблицы в INNODB, вот простой способ:

ALTER TABLE t1 ENGINE = InnoDB;

См. MySQL doc.

Сделать это на своих серверах до перехода в облако - отличная идея - не меняйте два параметра одновременно!

Есть много вещей, которые отличаются в движке InnoDB, но я уверен, что несколько минут с вашей любимой поисковой системой покажут вам это.

person Alain Collins    schedule 02.06.2011
comment
это работает ... я попытался изменить движок в таблицах MyISAM на моем сервере, и он изменил его. Я хочу понять, какие изменения на самом деле происходят с таблицами и данными при выполнении этого скрипта изменения таблицы движка ... подробнее об этом !! благодаря. - person Aakash; 03.06.2011
comment
Вы получаете все удовольствие от innodb (блокировка на уровне строк и т. Д.) И всю боль (без счетчика (*) и т. Д.). - person Alain Collins; 09.06.2011

Сам процесс миграции очень прост. Дамп запишет все необходимые объекты, которые нужно реконструировать. Вам нужно только удалить (или изменить, если значение по умолчанию не то, что вы хотите), предложения механизма хранения. Возможно, вам придется беспокоиться о том, что приложения, написанные для MyISAM, могут предполагать, что нет необходимости совершать транзакции. Так или иначе, несколько лет назад мне сошло с рук это:

mysqldump --all-databases | perl -pwe 's/\) TYPE=MyISAM/\)/' >dump.sql
mysql <dump.sql

плюс добавление коммитов и откатов там, где это необходимо.

person cababunga    schedule 02.06.2011