MySQL тупик - додавання стовпців


1

У мене була неприємна проблема MySQL, яка виникає днями Я додав два нові стовпці до таблиці "Акції" (13 існуючих стовпців, ~ 750 записів) за допомогою інтерфейсу PHPMyAdmin. Цей запит ("ALTER TABLE .....") ніколи повністю не виконував і не блокував таблицю, щоб кожен наступний запит до "Promotions" зависав і стояв у черзі. Мені знадобилося близько години, щоб зрозуміти, що це відбувається, і проблема була вирішена перезавантаженням моєї бази даних.

Чи є стандартні заходи обережності, які необхідно вжити, і відомі проблеми, що виникають внаслідок зміни схем бази даних? Я ніколи не бачив, щоб подібне блокування відбувалося раніше.

Відповіді:


0

Розглянемо наступний сценарій, ЩО ПІДКЛЮЧИТИ таблицю mysql більш гладко, особливо щодо виробничого середовища:

1. CREATE tmp_table LIKE original_table
2. ALTER tmp_table..
3. INSERT INTO tmp_table SELECT * FROM original_table
4. RENAME original_table to orginal_table_old
5. RENAME tmp_table to original_table
6. DROP original_table_old

Також вас можуть зацікавити ПЛАТНІ ТАБЛИЦІ та РЕКЛАМНІ ТАБЛИЦІ щодо документації.

Редагувати: Існують альтернативні рішення, щоб вирішити цю проблему, наприклад, Per-online- інструмент зміни схем від Percona.


Як би ви зупинили, що таблиці стають розбіжними між кроками 3 та 5?
eggyal

Не існує ідеального рішення для подібних ситуацій. Зміна живої таблиці вимагає невеликого простою, але якщо величезна сумісність і важливі для бізнесу дані не знаходяться на стадії, цей метод буде корисним. Також інженери facebook витратили багато часу і на вирішення цієї проблеми: facebook.com/notes/mysql-at-facebook/…

Так, це безумовно має сенс. У цьому випадку не було «невеликого простою», хоча він був повністю заблокований принаймні на одну годину. Мені б хотілося, щоб у мене були деякі інструменти для запуску аналізу того, що саме відбувається, перш ніж я перезавантажував екземпляр.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.