Редактиране 2016 г.: наскоро (август 2016 г.) пуснахме gh-ost
, променяйки отговора си, за да го отрази.
Днес има няколко инструмента, които ви позволяват да правите онлайн таблица за промяна на MySQL. Това са:
- редактиране 2016 г.: gh-ost :Инструментът за миграция на схеми без задействане на GitHub (отказ от отговорност:аз съм автор на този инструмент)
- oak-online- alter-table , като част от openark-комплекта (отказ от отговорност:аз съм автор на този инструмент)
- pt-online-schema- промяна , като част от Percona Toolkit
- промяна на онлайн схемата във Facebook за MySQL
Нека разгледаме "нормалната" `ALTER TABLE`:
ALTER
на голяма таблица ще отнеме много време . innodb_buffer_pool_size
е важно, както и другите променливи, но на много голяма маса всички те са незначителни. Просто отнема време.
Какво прави MySQL с ALTER
таблица е да създадете нова таблица с нов формат, да копирате всички редове и след това да превключите. През това време масата е напълно заключена.
Помислете за вашето собствено предложение:
Най-вероятно ще се представи най-лошо от всички опции. Защо така? Тъй като използвате таблица на InnoDB, INSERT INTO tablename_tmp SELECT * FROM tablename
прави за транзакция. огромени транзакция. Това ще създаде дори повече натоварване от нормалния ALTER TABLE
.
Освен това ще трябва да изключите приложението си по това време, за да не пише (INSERT
, DELETE
, UPDATE
) на вашата маса. Ако е така - цялата ви транзакция е безсмислена.
Какво предоставят онлайн инструментите
Инструментите не работят еднакво. Основните неща обаче са споделени:
- Те създават таблица в сянка с променена схема
- Те създават и използват тригери за разпространение на промените от оригиналната таблица към таблицата призрак
- Те бавно копирайте всички редове от вашата таблица в таблица с сянка. Те го правят на парчета:да речем, 1000 реда наведнъж.
- Те правят всичко по-горе, докато вие все още имате достъп и манипулирате оригиналната таблица.
- Когато са доволни, те разменят двете, като използват
RENAME
.
Openark-комплект инструментът се използва вече 3,5 години. Инструментът Percona е на няколко месеца, но вероятно е по-изпитан от предишния. Твърди се, че инструментът на Facebook работи добре за Facebook, но не предоставя общо решение на обикновения потребител. Самият аз не съм го използвал.
Редактиране 2016 г.: gh-ost
е решение без задействане, което значително намалява натоварването на главния запис върху главния, отделяйки натоварването при запис на миграция от нормалното натоварване. Той е одитируем, контролиран, тестван. Разработихме го вътрешно в GitHub и го пуснахме като отворен код; правим всички наши производствени миграции чрез gh-ost
днес. Вижте повече тук
.
Всеки инструмент има свои собствени ограничения, разгледайте внимателно документацията.
Консервативният начин
Консервативният начин е да използвате репликация Active-Passive Master-Master, направете ALTER
на резервния (пасивен) сървър, след това сменете ролите и направете ALTER
отново на това, което преди беше активен сървър, сега стана пасивен. Това също е добър вариант, но изисква допълнителен сървър и по-задълбочени познания за репликацията.