У нас достаточно небольшая база данных, которую мы хотели преобразовать из MyISAM в InnoDB. Будучи новичками в базе данных, мы просто конвертировали (используя alter table), даже не закрывая сайт.
Теперь, когда преобразование выполнено, кажется, что пропущено множество прерывистых строк. Возможно ли это из-за операций во время преобразования? Или проблема где-то еще?
Ответы:
Выполнение операции ALTER для изменения механизмов хранения не приведет к исчезновению строк. Однако позвольте мне дать несколько советов, так как вы сказали, что вы «новички в базе данных» в своем вопросе.
При изменении существующей схемы или выполнении всего, что может повлиять на данные, вот несколько основных советов:
Вероятно, я мог бы получить гораздо больше информации, но вышесказанное предоставит вам варианты, когда что-то пойдет не так.
Что касается ваших отсутствующих данных / строк, то нет способа узнать w / oa «до / после» снимок для сравнения. Вы можете сравнить с вашей последней резервной копией, чтобы хотя бы убедиться в этом.
источник
Один из лучших способов преобразовать MyISAM в InnoDB без большого количества простоев имеет только одно предварительное условие: использование подчиненного устройства репликации.
Вот с высоты птичьего полета план
Звучит просто? За этим стоит много деталей.
Настройка мастера репликации / ведомого
Существует отличный способ создать Раба без особых помех для Мастера. Я написал два поста:
Вместо того, чтобы подробно рассказывать, как использовать rsync, прочтите эти два поста.
Конвертировать каждую таблицу MyISAM на ведомом устройстве в InnoDB
На БД-подчиненном вы можете выполнить следующую инструкцию SQL:
Для MySQL 5.5:
Версия для MySQL до MySQL 5.5
Используя выходные данные из запроса, у вас есть сценарий преобразования для ведомого.
Вы должны поместить эти две строки вверху скрипта:
Сценарий сначала отключит двоичное ведение журнала (если вы настроили ведомое устройство на наличие двоичных журналов), остановите репликацию и преобразует каждую таблицу MyISAM в InnoDB.
Вот как создать этот скрипт и выполнить его:
Направьте ваше приложение на Раба
Выполните запросы SELECT от ведомого. Если вы удовлетворены содержанием данных на подчиненном устройстве, не стесняйтесь указывать свое приложение на подчиненном устройстве следующим образом:
SHOW SLAVE STATUS\G
и убедитесь, что Seconds_Behind_Master равен 0service mysql stop
(время простоя начинается)Если вы сделали к этому моменту невредимым, ПОЗДРАВЛЯЕМ !!!
ДОБАВЛЕННЫЙ БОНУС : Если вы настраиваете Master / Master Replication (иначе круговую репликацию) вместо Master / Slave, вы можете сделать это вместо этого:
SHOW SLAVE STATUS\G
и убедитесь, что Seconds_Behind_Master равен 0STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='';
Теперь у вас есть ведущий / ведомый в обратном порядке. Новый мастер имеет данные InnoDB, а старый мастер теперь является ведомым с данными MyISAM. Если вы разделяете чтение и запись, чтение может идти от ведомого устройства (чтение выполняется быстрее от MyISAM, чем от InnoDB), а запись идет к мастеру (поддержка транзакций для InnoDB). Как поет Ханна Монтана, вы получаете лучшее из обоих миров (Да, у меня есть две дочери, которые любят шоу) !!!
ДРУГОЙ ДОБАВЛЕННЫЙ БОНУС : Поскольку Мастер теперь является InnoDB, вы можете выполнять mysqldump от Мастера без простоев и без вмешательства в транзакции. Единственный недостаток - увеличение загрузки процессора и дискового ввода-вывода. Таким образом, вы можете использовать mysqldump для табличных структур только на ведущем устройстве (InnoDB) и mysqldump данных только на ведомом устройстве (такой дамп не будет иметь ссылок на InnoDB или MyISAM. Это будут только данные) плюс mysqldump из структуры таблиц для ведомого, чтобы иметь расположение MyISAM.
Возможности могут продолжаться из-за этой новой установки ...
ОБНОВЛЕНИЕ 2011-08-27 19:50 ПО ВОСТОЧНОМУ ВРЕМЕНИ
Мои извенения. Я не полностью прочитал вопрос. Вы уже выполнили разговор .
Только если вы уже включили бинарное ведение журнала и у вас есть резервная копия, вы можете
service mysql stop
service mysql start --datadir=/var/lib/mysql2
Это должно отразить все, что было записано, и преобразование должно сработать. Опять же, все это допустимо, если вы уже включили двоичное ведение журнала до последнего резервного копирования . В противном случае мои соболезнования.
источник