Как изменить тип данных столбца с int на BigInt в MySql 5.7?

Каким образом можно эффективно выполнить миграцию таблицы с PK, приблизившегося к 75% максимального значения типа int, на BigInt без блокировки таблицы? Какие способы для этого существуют и какие из них Вы рассматриваете как наиболее эффективные?
  • 25 июля 2024 г. 10:52
Ответы на вопрос 2
Для изменения типа данных столбца с int на BigInt в MySql 5.7 можно использовать следующий SQL-запрос:

```sql
ALTER TABLE table_name MODIFY column_name bigint;
```

Чтобы выполнить миграцию таблицы с PK на BigInt без блокировки таблицы, можно использовать следующие способы:

1. Использование инструментов для онлайн-миграции данных, таких как pt-online-schema-change или gh-ost. Эти инструменты позволяют выполнять изменения структуры таблицы без блокировки данных на чтение и запись.

2. Использование репликации данных. В этом случае можно создать временную таблицу с новой структурой и скопировать данные с помощью репликации на эту новую таблицу, а затем переключить трафик на новую таблицу.

3. Постепенная миграция данных. Можно разделить процесс миграции на несколько этапов, например, сначала изменить тип данных на int unsigned, а затем на BigInt.

Наиболее эффективным способом для миграции таблицы с PK на BigInt считается использование инструментов для онлайн-миграции данных, таких как pt-online-schema-change или gh-ost. Эти инструменты обеспечивают минимальные временные затраты и позволяют проводить изменения без блокировки таблицы, что позволяет поддерживать доступность данных для чтения и записи во время процесса миграции.
Вариант 1: <br/> 1. Сделать полный бэкап базы. <br/> 2. Удалить все внешние ключи, ссылающиеся на изменяемое поле. <br/> 3. Изменить тип поля. <br/> 4. Изменить тип полей всех внешних ключей, ссылающихся на изменяемое поле. <br/> 5. Пересоздать все внешние ключи, ссылающиеся на изменяемое поле. <br/> <br/> Вариант 2: <br/> 1. Сделать полный дамп базы. <br/> 2. Отредактировать дамп, изменив тип поля и всех внешних ключей, ссылающихся на него. <br/> 3. Восстановить базу из дампа. <br/> <br/> В обоих вариантах надо останавливать работу с базой.
Похожие вопросы