Как изменить тип данных столбца с 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: 
1. Сделать полный бэкап базы.
2. Удалить все внешние ключи, ссылающиеся на изменяемое поле.
3. Изменить тип поля.
4. Изменить тип полей всех внешних ключей, ссылающихся на изменяемое поле.
5. Пересоздать все внешние ключи, ссылающиеся на изменяемое поле.

Вариант 2:
1. Сделать полный дамп базы.
2. Отредактировать дамп, изменив тип поля и всех внешних ключей, ссылающихся на него.
3. Восстановить базу из дампа.

В обоих вариантах надо останавливать работу с базой.
Похожие вопросы