Переместить таблицы MySQL и данные из механизма хранения MyISAM в InnoDB - PullRequest
5 голосов
/ 02 июня 2011

Этот вопрос, вероятно, предназначен для экспертов и администраторов 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} Это то, что сейчас установлено.

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

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

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

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

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

1 голос
/ 03 июня 2011

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

ALTER TABLE t1 ENGINE = InnoDB;

См. Документ MySQL .

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

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

0 голосов
/ 02 июня 2011

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

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

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

...